如何使用NPOI生成excel
NPOI是一个第三方开源组件,用来生成excel占用内存低,生成速度也较快。金蝶云星空有一些引出是使用NPOI组件来实现的。注意,NPOI代码不是金蝶维护,在NPOI生产excel过程中,产生的错误和异常,金蝶这边无法排查,可以借助搜索引擎或者官方文档进行排查。
以下演示将DataTable类型数据生成excel并下载的过程,由于是演示,没有考虑数据量大的情况。如果数据量较大,需要考虑分批获取数据,然后写入的excel中,避免一次性占用过多内存导致系统无法使用的情况。
引出excel效果
以下代码是点击按钮,然后生成excel数据并下载的过程。
using Kingdee.BOS.Core; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata.ControlElement; using Kingdee.BOS.Excel; using Kingdee.BOS.Util; using NPOI.HSSF.Util; using NPOI.SS.UserModel; using NPOI.XSSF.Streaming; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Cloud.BOS.Support.Bill { [HotUpdate] public class NpoiExportPlugin:AbstractBillPlugIn { public override void BarItemClick(BarItemClickEventArgs e) { if (e.BarItemKey.EqualsIgnoreCase("tbExportByNpoi")) { Export(); } } private void Export() { var tb = BuildData(); var showParameter = new DynamicFormShowParameter(); showParameter.FormId = "BOS_FileDownLoad"; showParameter.OpenStyle.ShowType = ShowType.Modal; showParameter.CustomParams.Add("url", NPOIExport(tb)); this.View.ShowForm(showParameter); } private string NPOIExport(DataTable tb) { var wb = new SXSSFWorkbook(); SXSSFSheet sheet = (SXSSFSheet)wb.CreateSheet("demo"); var tempXmlFile = sheet._writer.TemporaryFilePath(); string fileName = string.Format("NPOI-demo-{0}.xlsx" , DateTime.Now.ToString("yyyyMMddhhmmss")); var filePath = PathUtils.GetPhysicalPath(KeyConst.TEMPFILEPATH, fileName); var fileUrl = PathUtils.GetServerPath(KeyConst.TEMPFILEPATH, PathUtils.UrlEncode(fileName)); try { for (int i = 0; i < tb.Rows.Count; i++) { IRow row = sheet.CreateRow(i); for (int colIndex = 0; colIndex < tb.Columns.Count; colIndex++) { ICell cell = row.CreateCell(colIndex); ICellStyle textCellStyle = wb.CreateCellStyle(); textCellStyle.DataFormat = wb.CreateDataFormat().GetFormat("@"); cell.CellStyle = textCellStyle; if (i % 2 == 0) { textCellStyle.FillForegroundColor = HSSFColor.LightBlue.Index; textCellStyle.FillPattern = FillPattern.SolidForeground; } cell.SetCellValue(tb.Rows[i][colIndex].ToString()); } } //写入Excel using (FileStream fs = File.OpenWrite(filePath)) { wb.Write(fs); } } finally { if (wb != null) { wb.Close(); } //清理中间临时xml文件 if (File.Exists(tempXmlFile)) { File.Delete(tempXmlFile); } } return fileUrl; } private DataTable BuildData() { var sheetName = "NPOI Demo"; var tb = new DataTable(sheetName); tb.Columns.Add("fbillno"); tb.Columns.Add("fdate"); tb.Columns.Add("FDOCUMENTSTATUS"); //构造表头 var newRow = tb.NewRow(); newRow["fbillno"] = "单据编号"; newRow["FDate"] = "日期"; newRow["FDOCUMENTSTATUS"] = "状态"; tb.Rows.Add(newRow); for (int i=0;i<=100; i++) { var row = tb.NewRow(); row["fbillno"] = string.Format("BillNo-{0}",i.ToString("000")); row["FDate"] = DateTime.Now.ToLongDateString(); row["FDOCUMENTSTATUS"] = "C"; tb.Rows.Add(row); } return tb; } } }
如何使用NPOI生成excel
NPOI是一个第三方开源组件,用来生成excel占用内存低,生成速度也较快。金蝶云星空有一些引出是使用NPOI组件来实现的。注意,NPOI代码不是...
点击下载文档
本文2024-09-16 18:20:00发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-21462.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章