Excel文件数据导入和导出功能实现


Excel导入功能

1、前端组件代码

引用 "xlsx": "^0.12.13"

2、后台API代码

C# 全选
/// <summary>
/// 导入
/// </summary>
/// <returns></returns>
[HttpPost]
public GZAPIResult Import(List<data_WeiFaList_XianChang> datas)
{
	//var  entities.engsys_assetsType.AsNoTracking()
	using (var trans = entities.Database.BeginTransaction())
	{
		try
		{
			var dataDBCache = entities.data_WeiFaList_XianChang.AsNoTracking().ToList();
			List<data_WeiFaList_XianChang> dataNew = new List<data_WeiFaList_XianChang>();

			var ids = datas.Select(s => s.ChuFaDanHao).ToList();
			entities.data_WeiFaList_XianChang.Where(w => ids.Contains(w.ChuFaDanHao)).BatchDelete();
			entities.SaveChanges();

			//entities.BulkInsert(datas);
			entities.data_WeiFaList_XianChang.AddRange(datas);
			entities.SaveChanges();
			trans.Commit();
		}
		catch (Exception ex)
		{
			Logs.Intance.Error(ex, "现场违法,导入失败");
			trans.Rollback();
			return GZAPIException(ex);
		}
	}
	return GZAPISuccess();

}

3、前端代码

前端中提供了导入组件 ExcelImport

1) 导入组件

JavaScript 全选
import ExcelImport from '@components/excelImport/index.vue'
...
components: {
    ExcelImport
}

2) 组件设置

HTML 全选
<ExcelImport :dataStruck='importDataStruck' v-permission-any="2|4" actions="/jiaojing/WeiFaList_XianChang/import" @onSuccess="onImportSuccess" title="数据导入">导入</ExcelImport>

dataStruck属性

JavaScript 全选
importDataStruck: [
	{
	  field: 'ChuFaDanHao',
	  display: '处罚单号',
	},
	{
	  field: 'WeiFaShiJian',
	  display: '违法时间',
	},
	{
	  field: 'ChePaiHaoMa',
	  display: '车牌号码',
	},
	{
	  field: 'HaoPaiZhongLei',
	  display: '号牌种类',
	},
	{
	  field: 'WeiFaDiZhi',
	  display: '违法地址',
	},
	{
	  field: 'WeiFaXingWei',
	  display: '违法行为',
	},
	{
	  field: 'WeiFaDaiMa',
	  display: '违法代码',
	},
	{
	  field: 'DangShiRen',
	  display: '当事人',
	},
	{
	  field: 'JiaShiZhengHao',
	  display: '驾驶证号',
	},
	{
	  field: 'ZhiQinMinJingJingHao',
	  display: '执勤民警警号',
	},
	{
	  field: 'ChuLiJiGuan',
	  display: '处理机关名称',
	},
	{
	  field: 'ChuLiDaDui',
	  display: '处理机关大队名称',
	},
  ],

导入成功onSuccess事件

JavaScript 全选
// 导入成功
onImportSuccess() {
  this.refrshData()
},

3) 属性说明

属性名称字段类型描述
data-struckarray[object]数据结构定义
data-struck.fieldstring数据字段名
data-struck.displaystring字段描述
actionsstring导入API,不需要携带API公共头 /api/
titlestring导入设置窗体标题,通常设置为数据导入即可
on-successevent导入成功事件,通常在该事件中(导入成功后)刷新数据源

导入功能预览

Excel文件数据导入和导出功能实现

第一步:选择Excel数据文件

YESWEB文件Excel的导入与导出

第二步:设置字段映射

YESWEB文件Excel的导入与导出

第三步:数据预览

YESWEB文件Excel的导入与导出

 

导出Excel功能

1、前端组件源码

2、后台API代码

原理:获取数据转换为datatable,然后把datatable转换为excel文件流

YESWEB.Serverlibs模块中提供了NOPIHelper类库,通过NOPIHelper.saveExcel方法,可以把datatable转换为excel文件流

C# 全选
/// <summary>
/// 导出
/// </summary>
/// <returns></returns>
[HttpGet]
public IActionResult Export()
{
	var data = entities.data_WeiFaList_XianChang.AsNoTracking().Select(s => new
	{
		s.ChuFaDanHao,
		s.WeiFaShiJian,
		s.ChePaiHaoMa,
		s.HaoPaiZhongLei,
		s.WeiFaDiZhi,
		s.WeiFaXingWei,
		s.WeiFaDaiMa,
		s.DangShiRen,
		s.JiaShiZhengHao,
		s.ZhiQinMinJingJingHao,
		s.ChuLiJiGuan,
		s.ChuLiDaDui
	}).ToList();

	DataTable dt = new DataTable();
	dt.Columns.Add("ChuFaDanHao", typeof(System.String)).Caption = "处罚单号";
	dt.Columns.Add("WeiFaShiJian", typeof(System.DateTime)).Caption = "违法时间";
	dt.Columns.Add("ChePaiHaoMa", typeof(System.String)).Caption = "车牌号码";
	dt.Columns.Add("HaoPaiZhongLei", typeof(System.String)).Caption = "号牌种类";
	dt.Columns.Add("WeiFaDiZhi", typeof(System.String)).Caption = "违法地址";
	dt.Columns.Add("WeiFaXingWei", typeof(System.String)).Caption = "违法行为";
	dt.Columns.Add("WeiFaDaiMa", typeof(System.String)).Caption = "违法代码";
	dt.Columns.Add("DangShiRen", typeof(System.String)).Caption = "当事人";
	dt.Columns.Add("JiaShiZhengHao", typeof(System.String)).Caption = "驾驶证号";
	dt.Columns.Add("ZhiQinMinJingJingHao", typeof(System.String)).Caption = "执勤民警警号";
	dt.Columns.Add("ChuLiJiGuan", typeof(System.String)).Caption = "处理机关支队名称";
	dt.Columns.Add("ChuLiDaDui", typeof(System.String)).Caption = "处理机关大队名称";
	foreach (var v in data)
	{
		dt.Rows.Add(v.ChuFaDanHao, v.WeiFaShiJian, v.ChePaiHaoMa, v.HaoPaiZhongLei, v.WeiFaDiZhi, v.WeiFaXingWei,
			v.WeiFaDaiMa, v.DangShiRen, v.JiaShiZhengHao, v.ZhiQinMinJingJingHao, v.ChuLiJiGuan, v.ChuLiDaDui);
	}
	dt.AcceptChanges();

	var bytes = NOPIHelper.saveExcel(dt, true, NOPIHelper.WorkbookType.xlsx);

	MemoryStream ms = new MemoryStream(bytes);
	ms.Position = 0;
	//Access-Control-Expose-Headers: Content-Disposition
	//var result= File(bytes, "application/octet-stream", $"Devices_{batchID}.xlsx");
	Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

	// 返回中文文件名,需要使用Uri.EscapeUriString 编码一下,要不然文件名中中文部分会异常
	return File(ms, "application/octet-stream", Uri.EscapeUriString("高速现场违法信息.xlsx"));
}

3、前台代码

前端中提供了导入组件 ExcelExport

1) 导入组件

JavaScript 全选
import ExcelExport from '@components/excelExport/index.vue'
...
components: {
    ExcelExport
  },

2) 使用组件

HTML 全选
<ExcelExport actions="/jiaojing/WeiFaList_XianChang/export">导出</ExcelExport>

3) 属性说明

属性名称字段类型描述
actionsstring导入API,不需要携带API公共头 /api/

导出下载Excel功能预览

Excel文件数据导入和导出功能实现

导出EXCEL数据 带查询参数

带查询参数导出数据,需要用到post请求

1、前端代码:

Excel文件数据导入和导出功能实现

2、后台API接口

采用post请求方式:

C# 全选
/// <summary>
/// 导出
/// </summary>
/// <returns></returns>
[HttpPost]
public IActionResult Export(P_SearchList searchData)
{
	var queryEntity = entitiesQuery.jiazhao_StudentInfo;

	if (searchData.Date_Range != null && searchData.Date_Range.Length == 2)
	{
		var JoinDate_Begin = searchData.Date_Range[0];
		var JoinDate_End = searchData.Date_Range[1];
		queryEntity = queryEntity.Where(w => w.JoinDate >= JoinDate_Begin && w.JoinDate <= JoinDate_End);
	}

	if (!String.IsNullOrEmpty(searchData.UserName)) queryEntity = queryEntity.Where(w => w.UserName == searchData.UserName);
	if (!String.IsNullOrEmpty(searchData.Principal)) queryEntity = queryEntity.Where(w => w.Principal == searchData.Principal);
	if (!String.IsNullOrEmpty(searchData.CarType)) queryEntity = queryEntity.Where(w => w.CarType == searchData.CarType);
	if (!String.IsNullOrEmpty(searchData.Status)) queryEntity = queryEntity.Where(w => w.Status == searchData.Status);

	var query = QueryList(queryEntity);

	var data = query.ToList();

	var bytes = NOPIHelper.saveExcel(data, true, NOPIHelper.WorkbookType.xlsx);

	MemoryStream ms = new MemoryStream(bytes);
	ms.Position = 0;
	//Access-Control-Expose-Headers: Content-Disposition
	//var result= File(bytes, "application/octet-stream", $"Devices_{batchID}.xlsx");
	Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");

	// 返回中文文件名,需要使用Uri.EscapeUriString 编码一下,要不然文件名中中文部分会异常
	return File(ms, "application/octet-stream", Uri.EscapeUriString("学员档案.xlsx"));
}

3、前端代码

1) 导入组件

Excel文件数据导入和导出功能实现

2)使用组件

<ExcelExport actions="/jiazhao/StudentInfo/Export" :bodyData="searchData">导出</ExcelExport>

searchData参数为查询条件的对象

 

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
下一篇:YESWEB项目部署
评论列表

发表评论

评论内容
昵称:
关联文章

Excel文件数据导入导出功能实现
C# NPOI导出excel绑定列的下拉数据
excel2007直接打开文件空白,需要菜单打开
使用Hot Chocolate.NET 6构建GraphQL应用(3) —— 实现Query基础功能
使用Hot Chocolate.NET 6构建GraphQL应用(4) —— 实现Query映射功能
使用Hot Chocolate.NET 6构建GraphQL应用(2) —— 实体相关功能实现
账套克隆功能实现
Excel自定义格式千分符
LabVIEW生成.NET的DLL——C#下调用NI数据采集设备功能的一种方法 [原创www.cnblogs.com/helesheng]
使用.NET 6开发TodoList应用(29)——实现静态字符串本地化功能
EF EntityFramework.MappingAPI批量导入 模型属性顺序数据库表不一致时导入错位
使用.NET 6开发TodoList应用(24)——实现基于JWT的Identity功能
使用.NET 6开发TodoList应用(30)——实现Docker打包部署
文件加密技术研究
YESWin winform开发框架 模块功能注册配置
使用.NET 6开发TodoList应用(17)——实现数据塑形
客户端发送数据
iNeuOS工业互联网操作系统,分布式云端控制安全策略增加实时日志功能
C#数据类型常见数据库(SQLServer,MySQL,Oracle,SQLite)的数据类型对应关系
使用.NET 6开发TodoList应用(26)——实现ConfigurationOption的强类型绑定