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-struck | array[object] | 数据结构定义 |
data-struck.field | string | 数据字段名 |
data-struck.display | string | 字段描述 |
actions | string | 导入API,不需要携带API公共头 /api/ |
title | string | 导入设置窗体标题,通常设置为数据导入即可 |
on-success | event | 导入成功事件,通常在该事件中(导入成功后)刷新数据源 |
导入功能预览
第一步:选择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) 属性说明
属性名称 | 字段类型 | 描述 |
---|---|---|
actions | string | 导入API,不需要携带API公共头 /api/ |
导出下载Excel功能预览
导出EXCEL数据 带查询参数
带查询参数导出数据,需要用到post请求
1、前端代码:
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) 导入组件
2)使用组件
<ExcelExport actions="/jiazhao/StudentInfo/Export" :bodyData="searchData">导出</ExcelExport>
searchData参数为查询条件的对象
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YESWEB 张国生