服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# 使用Aspose.Cells 导出Excel的步骤及问题记录

C# 使用Aspose.Cells 导出Excel的步骤及问题记录

2022-12-22 14:43我本梁人 C#

Aspose.Cells是一款功能强大的Excel文档处理和转换控件,开发人员和客户电脑无需安装Microsoft Excel也能在应用程序中实现类似Excel的强大数据管理功能,对C# 使用Aspose.Cells 导出Excel的步骤及问题记录感兴趣的朋友一起看看吧

今天在工作中碰到同事用了一种新型的方式导入excel,在此做个学习记录。

Aspose.Cells简介:Aspose.Cells是一款功能强大的Excel文档处理和转换控件,开发人员和客户电脑无需安装Microsoft Excel也能在应用程序中实现类似Excel的强大数据管理功能,支持所有Excel格式类型的操作,在没有Microsoft Excel的环境下,用户也可为其应用程序嵌入类似Excel的强大数据管理功能。

插件:Aspose.Cells

第一步:准备好导出的模板,例子:

C# 使用Aspose.Cells 导出Excel的步骤及问题记录

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);
          #region 数据重构造
          // 工程形象进度
          #region 构造头部信息
          var topInfo = new Dictionary<string, object>
              { "Title", bigTitle },
              { "ProjectName", model.ProjectName },
              { "Code", barCodeStr }
          };
          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);
          #region 尾部
          #endregion 
          designer.Process();
          wk.CalculateFormula(); 
          #region 重新计算行高
          var startRow = 9;
          var endRow = startRow;
          #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());

此种当时的重点是Excel模板的数据绑定:

第一种:单个值的绑定

C# 使用Aspose.Cells 导出Excel的步骤及问题记录

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

C# 使用Aspose.Cells 导出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);
          #region 数据重构造
          // 工程形象进度
          #region 构造头部信息
          var topInfo = new Dictionary<string, object>
              { "Title", bigTitle },
              { "ProjectName", model.ProjectName },
              { "Code", barCodeStr }
          };
          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);
          #region 预算编号
          //var _dic = this.GetLaborProSettleInfo(exportDataSource);
          //foreach (var item in _dic)
          //{
          //    designer.SetDataSource(item.Key, item.Value);
          //}
          #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);
              }
          #region 尾部
          #region 删除模板sheet
          //wk.Worksheets.RemoveAt(wk.Worksheets["表2"].Index);
          //wk.Worksheets.RemoveAt(wk.Worksheets["表3"].Index);
          designer.Process();
          wk.CalculateFormula();
          #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;
          #region 重新计算行高
          var startRow = 9;
          var endRow = startRow;
          #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());
      }

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的文章就介绍到这了,更多相关C# 导出Excel内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/wofeiliangren/p/15847590.html

延伸 · 阅读

精彩推荐
  • C#使用C#代码获取存储过程返回值

    使用C#代码获取存储过程返回值

    这篇文章主要介绍了使用C#代码获取存储过程返回值,需要的朋友可以参考下...

    柔城6872021-11-03
  • C#详解c# 协变和逆变

    详解c# 协变和逆变

    这篇文章主要介绍了c# 协变和逆变的相关资料,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...

    gt198712002022-10-18
  • C#C#开启线程的四种示例

    C#开启线程的四种示例

    这篇文章主要介绍了C#开启线程的四种方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...

    zls3656582022-10-11
  • C#C# SQLite库使用技巧

    C# SQLite库使用技巧

    SQLite是一个开源、免费的小型RDBMS(关系型数据库),能独立运行、无服务器、零配置、支持事物,用C实现,内存占用较小,支持绝大数的SQL92标准。下面跟随...

    程序猿evint4062022-12-16
  • C#详解Unity中的ShaderGraph入门使用教程

    详解Unity中的ShaderGraph入门使用教程

    Unity2018版本之后推出了一个可编程渲染管线工具ShaderGraph,让我们可以通过可视化界面拖拽来实现着色器的创建和编辑,今天重点给大家介绍Unity中的Shade...

    陈言必行3402022-11-24
  • C#C#实现的WINDOWS登录功能示例

    C#实现的WINDOWS登录功能示例

    这篇文章主要介绍了C#实现的WINDOWS登录功能,结合实例形式分析了简单的Windows图形化登陆功能实现技巧,需要的朋友可以参考下...

    dodo-yufan9942022-01-19
  • C#基于C#实现12306的动态验证码变成静态验证码的方法

    基于C#实现12306的动态验证码变成静态验证码的方法

    这篇文章主要介绍了基于C#实现12306的动态验证码变成静态验证码的方法的相关资料,需要的朋友可以参考下...

    jerrylsxu5182021-11-08
  • C#C# BackgroundWorker用法详解

    C# BackgroundWorker用法详解

    本篇文章主要介绍了C# BackgroundWorker使用详解 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    sparkdev11512021-12-31