C# 使用Aspose.Cells 导出Excel
今天在工作中碰到同事用了一种新型的方式导入excel,在此做个学习记录。
插件:Aspose.Cells
第一步:准备好导出的模板,例子:

C#代码:
#region 验证数据
if (model == null)
{
throw new FriendlyException("无该月结单!");
}
var templatePath = @"Template\trade\Cecsc2bHN\分包分供月度结算审批表.xlsx"; ;
var resFileName = string.Empty;
var bigTitle = string.Empty;
var barCodeStr = string.Empty;
if (string.IsNullOrEmpty(templatePath) || !File.Exists(templatePath))
{
throw new FriendlyException("未找到模板文件!");
}
#endregion
#region 初始化模板文件
var wk = new Workbook(templatePath);
var designer = new WorkbookDesigner(wk);
#endregion
#region 数据重构造
// 工程形象进度
#endregion
#region 构造头部信息
var topInfo = new Dictionary<string, object>
{
{ "Title", bigTitle },
{ "ProjectName", model.ProjectName },
{ "Code", barCodeStr }
};
#endregion
MonthSettlementInfo monthInfo = new MonthSettlementInfo()
{
CurrentInContractSettlementAmount = 56.32M,
TerminalInContractSettlementAmount = 123.32M,
CurrentOutContractSettlementAmount = 6.32M,
TerminalOutContractSettlementAmount = 5.32M,
CurrentDeductionSettlementAmount = 12.32M,
TerminalDeductionSettlementAmount = 26.32M,
CurrentInContractSafeAmount = 2.32M,
TerminalInContractSafeAmount = 1.32M,
CurrentOutContractSafeAmount = 6.32M,
TerminalOutContractSafeAmount = 8.32M,
CurrentDeductionSafeAmount = 4.32M,
TerminalDeductionSafeAmount = 3.32M,
};
//形象进度描述
List<TradeSettleReportProjectProgressItemModel> ProjectProgressList = new List<TradeSettleReportProjectProgressItemModel>();
for (int i = 0; i < 3; i++)
{
TradeSettleReportProjectProgressItemModel Progressmodel = new TradeSettleReportProjectProgressItemModel()
{
ConstractArea = "测试水水水水水水" + i,
Remark = "测试模拟的备注" + i,
ProgressDesc = "测试撒子怕发送所属" + i,
ConstractSite = "场地" + i
};
ProjectProgressList.Add(Progressmodel);
}
#region 工程名称
//绑定数据到excel中
//designer.SetDataSource("绑定的到excle的变量名","对应的值")
designer.SetDataSource("ProgressItem", ProjectProgressList); //list可以循环绑定 绑定的例子在下面。
designer.SetDataSource("ProjectName", model.ProjectName);
designer.SetDataSource("ContractName", model.ContractName);
designer.SetDataSource("ContractCode", model.ContractCode);
designer.SetDataSource("MonthSettlementNo", model.MonthSettlementNo);
designer.SetDataSource("ContractingUnit", model.ContractingUnit);
designer.SetDataSource("SettlementCode", model.SettlementCode);
designer.SetDataSource("EnterpriseName", model.EnterpriseName);
designer.SetDataSource("ThirdPartyName", model.ThirdPartyName);
designer.SetDataSource("SettlementMonth", model.SettlementMonth);
designer.SetDataSource("TotalContractAmount", model.TotalContractAmount);
designer.SetDataSource("SettlementAmountCapitalize", model.SettlementAmountCapitalize);
#endregion
#endregion
#region 尾部
#endregion
designer.Process();
wk.CalculateFormula();
#region 重新计算行高
var startRow = 9;
var endRow = startRow;
#endregion
#region 导出文件
var fileName = $"{model.SettlementMonth.ToString("yyyy年MM月")}{resFileName}.xlsx";
using (var file = new MemoryStream())
{
wk.Save(file, SaveFormat.Xlsx);
wk.Dispose();
return new KeyValuePair<string, byte[]>(fileName, file.ToArray());
}
#endregion
此种当时的重点是Excel模板的数据绑定:
第一种:单个值的绑定

第二种:列表值的循环绑定

完整代码
Service层:

public KeyValuePair<string, byte[]> ExportSettle(TradeSettleReportModel model)
{
#region 验证数据 if (model == null)
{
throw new FriendlyException("无该月结单!");
}
var templatePath = @"Template\trade\Cecsc2bHN\分包分供月度结算审批表.xlsx"; ;
var resFileName = string.Empty;
var bigTitle = string.Empty;
var barCodeStr = string.Empty; if (string.IsNullOrEmpty(templatePath) || !File.Exists(templatePath))
{
throw new FriendlyException("未找到模板文件!");
} #endregion #region 初始化模板文件 var wk = new Workbook(templatePath);
var designer = new WorkbookDesigner(wk); #endregion #region 数据重构造 // 工程形象进度 #endregion #region 构造头部信息
var topInfo = new Dictionary<string, object>
{
{ "Title", bigTitle },
{ "ProjectName", model.ProjectName },
{ "Code", barCodeStr }
};
#endregion MonthSettlementInfo monthInfo = new MonthSettlementInfo()
{
CurrentInContractSettlementAmount = 56.32M,
TerminalInContractSettlementAmount = 123.32M,
CurrentOutContractSettlementAmount = 6.32M,
TerminalOutContractSettlementAmount = 5.32M,
CurrentDeductionSettlementAmount = 12.32M,
TerminalDeductionSettlementAmount = 26.32M, CurrentInContractSafeAmount = 2.32M,
TerminalInContractSafeAmount = 1.32M,
CurrentOutContractSafeAmount = 6.32M,
TerminalOutContractSafeAmount = 8.32M,
CurrentDeductionSafeAmount = 4.32M,
TerminalDeductionSafeAmount = 3.32M,
}; //审批记录
List<TradeSettleReportApprovalCommentsModel> approveModelList = new List<TradeSettleReportApprovalCommentsModel>(); for (int i = 0; i < 2; i++)
{ TradeSettleReportApprovalCommentsModel approveModel = new TradeSettleReportApprovalCommentsModel()
{
Approver = "admin" + i,
Comments = "审批通过" + i,
NodeName = "测试模板" + i,
Seq = i
};
approveModelList.Add(approveModel);
} //形象进度描述
List<TradeSettleReportProjectProgressItemModel> ProjectProgressList = new List<TradeSettleReportProjectProgressItemModel>(); for (int i = 0; i < 3; i++)
{
TradeSettleReportProjectProgressItemModel Progressmodel = new TradeSettleReportProjectProgressItemModel()
{
ConstractArea = "测试水水水水水水" + i,
Remark = "测试模拟的备注" + i,
ProgressDesc = "测试撒子怕发送所属" + i,
ConstractSite = "场地" + i
};
ProjectProgressList.Add(Progressmodel);
} #region 工程名称 designer.SetDataSource("CurrentInContractSettlementAmount", monthInfo.CurrentInContractSettlementAmount);
designer.SetDataSource("TerminalInContractSettlementAmount", monthInfo.TerminalInContractSettlementAmount);
designer.SetDataSource("CurrentOutContractSettlementAmount", monthInfo.CurrentOutContractSettlementAmount);
designer.SetDataSource("TerminalOutContractSettlementAmount", monthInfo.TerminalOutContractSettlementAmount);
designer.SetDataSource("CurrentDeductionSettlementAmount", monthInfo.CurrentDeductionSettlementAmount);
designer.SetDataSource("TerminalDeductionSettlementAmount", monthInfo.TerminalDeductionSettlementAmount);
designer.SetDataSource("CurrentInContractSafeAmount", monthInfo.CurrentInContractSafeAmount);
designer.SetDataSource("TerminalInContractSafeAmount", monthInfo.TerminalInContractSafeAmount);
designer.SetDataSource("CurrentOutContractSafeAmount", monthInfo.CurrentOutContractSafeAmount);
designer.SetDataSource("TerminalOutContractSafeAmount", monthInfo.TerminalOutContractSafeAmount);
designer.SetDataSource("CurrentDeductionSafeAmount", monthInfo.CurrentDeductionSafeAmount);
designer.SetDataSource("TerminalDeductionSafeAmount", monthInfo.TerminalDeductionSafeAmount); designer.SetDataSource("DetailItem", approveModelList);
designer.SetDataSource("ProgressItem", ProjectProgressList);
designer.SetDataSource("ProjectName", model.ProjectName);
designer.SetDataSource("ContractName", model.ContractName);
designer.SetDataSource("ContractCode", model.ContractCode);
designer.SetDataSource("MonthSettlementNo", model.MonthSettlementNo);
designer.SetDataSource("ContractingUnit", model.ContractingUnit);
designer.SetDataSource("SettlementCode", model.SettlementCode);
designer.SetDataSource("EnterpriseName", model.EnterpriseName);
designer.SetDataSource("ThirdPartyName", model.ThirdPartyName);
designer.SetDataSource("SettlementMonth", model.SettlementMonth);
designer.SetDataSource("TotalContractAmount", model.TotalContractAmount);
designer.SetDataSource("SettlementAmountCapitalize", model.SettlementAmountCapitalize);
#endregion #region 预算编号
//var _dic = this.GetLaborProSettleInfo(exportDataSource);
//foreach (var item in _dic)
//{
// designer.SetDataSource(item.Key, item.Value);
//} #endregion #region 写入数据
//foreach (var keyValuePair in topInfo)
//{
// designer.SetDataSource(keyValuePair.Key, keyValuePair.Value);
//}
//designer.SetDataSource("ProjectProgress", exportDataSource.ProjectProgressItems);
//designer.SetDataSource("MonthEstimate", exportDataSource.MonthEstimateOutputs);
#region 表1
//
Dictionary<string, decimal> dic = new Dictionary<string, decimal>(); if (dic != null)
{
foreach (var item in dic)
{
designer.SetDataSource(item.Key, item.Value);
}
} #endregion #endregion #region 尾部 #endregion
#region 删除模板sheet
//wk.Worksheets.RemoveAt(wk.Worksheets["表2"].Index);
//wk.Worksheets.RemoveAt(wk.Worksheets["表3"].Index);
designer.Process();
wk.CalculateFormula();
#endregion #region 插入条形码 //var barCode = BarCodeGenerator.GetBarCodePNG(barCodeStr);
//var barCode = BarCodeGenerator.WriteQRCodeImg(barCodeStr);
//wk.Worksheets[0].Pictures.Add(0, 0, 1, 1, new MemoryStream(barCode));
//wk.Worksheets[0].Pictures[0].Width = 60;
//wk.Worksheets[0].Pictures[0].Width = 60;
#endregion #region 重新计算行高
var startRow = 9;
var endRow = startRow; #endregion #region 导出文件 var fileName = $"{model.SettlementMonth.ToString("yyyy年MM月")}{resFileName}.xlsx";
using (var file = new MemoryStream())
{
wk.Save(file, SaveFormat.Xlsx);
wk.Dispose();
return new KeyValuePair<string, byte[]>(fileName, file.ToArray());
}
#endregion
}
Interface层:
KeyValuePair<string, byte[]> ExportSettle(TradeSettleReportModel model);
Controller层:

[AllowAnonymous]
[HttpPost("Export")]
public async Task<IActionResult> Export()
{
TradeSettleReportModel model = new TradeSettleReportModel()
{
ProjectName = "测刷",
ContractName = "测试合同名称",
ContractCode = "0010101012E",
MonthSettlementNo = "0010101012E",
ContractingUnit = "重庆市",
SettlementCode = "EW2Z4523",
EnterpriseName = "WZQ我在钱钱钱",
ThirdPartyName = "第三方地中四年",
SettlementMonth = DateTime.Now,
SettlementAmountCapitalize = "壹拾贰万叁仟壹佰贰拾叁元贰角伍分", };
var result = await Task.Run(() => tradeSettleCommonService.ExportSettle(model));
return File(result.Value, "application/octet-stream", result.Key);
}
C# 使用Aspose.Cells 导出Excel的更多相关文章
- Aspose.Cells导出Excel(1)
利用Aspose.Cells导出excel 注意的问题 1.DataTable的处理 2.进行编码,便于中文名文件下载 3.别忘了Aspose.Cells.dll(可以自己在网上搜索) public ...
- C#使用Aspose.Cells导出Excel简单实现
首先,需要添加引用Aspose.Cells.dll,官网下载地址:http://downloads.aspose.com/cells/net 将DataTable导出Xlsx格式的文件下载(网页输出) ...
- Aspose.Cells导出Excel(2)
DataTable dtTitle = ds.Tables[]; DataTable dtDetail = ds.Tables[]; int columns = dtTitle.Columns.Cou ...
- C#+Aspose.Cells 导出Excel及设置样式 (Webform/Winform)
在项目中用到,特此记录下来,Aspose.Cells 不依赖机器装没有装EXCEL都可以导出,很方便.具体可以参考其他 http://www.aspose.com/docs/display/cells ...
- aspose.Cells 导出Excel
aspose aspse.Cells可以操作Excel,且不依赖于系统环境. 使用模板,通过绑定输出数据源 这种适合于对格式没有特别要求的,直接绑定数据源即可.和数据绑定控件差不多. Workbook ...
- Aspose.Cells 导出 excel
Aspose.Cells.Workbook book = new Aspose.Cells.Workbook(); Aspose.Cells.Worksheet sheet = book.Worksh ...
- 使用Aspose.Cells读取Excel
最新更新请访问: http://denghejun.github.io Aspose.Cells读取Excel非常方便,以下是一个简单的实现读取和导出Excel的操作类: 以下是Aspose.Ce ...
- 报表中的Excel操作之Aspose.Cells(Excel模板)
原文:报表中的Excel操作之Aspose.Cells(Excel模板) 本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导 ...
- 怎么使用Aspose.Cells读取excel 转化为Datatable
说明:vs2012 asp.net mvc4 c# 使用Aspose.Cells 读取Excel 转化为Datatable 1.HTML前端代码 <%@ Page Language=" ...
随机推荐
- nim_duilib(1)之第一个dui executable(including configure setting in vs2017)
before starting clone nim_duilib: https://github.com/netease-im/NIM_Duilib_Framework 迁出github的源码即可. ...
- 再谈多线程模型之生产者消费者(单一生产者和多消费者 )(c++11实现)
0.关于 为缩短篇幅,本系列记录如下: 再谈多线程模型之生产者消费者(基础概念)(c++11实现) 再谈多线程模型之生产者消费者(单一生产者和单一消费者)(c++11实现) 再谈多线程模型之生产者消费 ...
- 【LeetCode】1101. The Earliest Moment When Everyone Become Friends 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 并查集 日期 题目地址:https://leetcod ...
- 【LeetCode】536. Construct Binary Tree from String 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 统计字符串出现的次数 日期 题目地址:https:// ...
- 【LeetCode】977. Squares of a Sorted Array 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序 日期 题目地址:https://leetcod ...
- 【LeetCode】771. Jewels and Stones 解题报告
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述: 题目大意 解题方法 数组count 字典Counter 日期 题目地址 ...
- ACE_Get_Opt函数笔记
#include "ace/OS_NS_string.h" #include "ace/Configuration.h" #include "ace/ ...
- linux系统安装java
1.下载Java压缩包 *.gz 2.解压 3.修改Linux配置文件,配置Java环境变量 4.使用命令source /etc/profile让修改生效 转载 https://www.cnblogs ...
- CS5265typec转HDMI2.0方案说明书|Capstone CS5265typec转HDMI4K60HZ单转电路|瑞奇达CS5265typec拓展坞设计
一.CS5265总概 Capstone CS5265 USB Type-C到HDMI转换器结合了USB Type-C输入接口和数字高清多媒体接口(HDMI)输出.嵌入式微控制器(MCU)基于工业标准8 ...
- Java Web程序设计笔记 • 【第9章 EL表达式】
全部章节 >>>> 本章目录 9.1 EL 表达式基础 9.1.1 EL 表达式简介 9.1.2 EL 表达式的定义 9.1.3 使用 EL 访问变量 9.1.4 使用 E ...