分类:
DevExpress
当需要导出表格时,我常用的一种是NPOI,另一种就是Spreadsheet,两者的优缺点暂时略过。 当需要导出比较复杂的表格时,可以考虑先把表格模板定义好,然后再去加载这个表格,合并行列、加公式、加边框样式这些都可以在表格中设置,例如,导出如图:
代码:
public void Run(string FileName, DataTable BalDT) { try { //创建Spreadsheet并加载指定模板 DevExpress.XtraSpreadsheet.SpreadsheetControl spreadsheetControl1 = new DevExpress.XtraSpreadsheet.SpreadsheetControl(); spreadsheetControl1.AllowDrop = false;//如果是C/S调用,可以不设置此属性 spreadsheetControl1.LoadDocument(HttpContext.Current.Server.MapPath("\\format\\表格.xlsx")); //获取Worksheet Worksheet worksheet1 = spreadsheetControl1.Document.Worksheets[0]; if (BalDT.Rows.Count > 0) { worksheet1.Cells[1, 2].Value = BalDT.Rows[0]["CangKuNo"].ToString(); worksheet1.Cells[1, 5].Value = BalDT.Rows[0]["Trade_Name"].ToString(); worksheet1.Cells[2, 2].Value = BalDT.Rows[0]["StartDate"].ToString() == "" ? "" : Convert.ToDateTime(BalDT.Rows[0]["StartDate"]).ToShortDateString(); worksheet1.Cells[2, 5].Value = BalDT.Rows[0]["EndDate"].ToString() == "" ? "" : Convert.ToDateTime(BalDT.Rows[0]["EndDate"]).ToShortDateString(); for (int i = 0; i < BalDT.Rows.Count; i++) { //因为模板中已有两行且设置了公式,填充数据时,可以复制上一行的表格样式 if (i < BalDT.Rows.Count - 2) { worksheet1.Rows.Insert(6 + i); worksheet1.Rows[6 + i].CopyFrom(worksheet1.Rows[5 + i], PasteSpecial.Formats); } //填充数据 worksheet1.Cells[(5 + i), 0].Value = BalDT.Rows[i]["Putrec_Seqno"].ToString(); worksheet1.Cells[(5 + i), 1].Value = BalDT.Rows[i]["PartNo"].ToString(); worksheet1.Cells[(5 + i), 2].Value = BalDT.Rows[i]["Name_CN"].ToString(); worksheet1.Cells[(5 + i), 3].Value = BalDT.Rows[i]["HSC"].ToString(); worksheet1.Cells[(5 + i), 4].Value = BalDT.Rows[i]["Unit_NA"].ToString(); worksheet1.Cells[(5 + i), 5].Value = BalDT.Rows[i]["I_AVGPrice_USD"].ToString(); worksheet1.Cells[(5 + i), 6].Value = BalDT.Rows[i]["PartNoType"].ToString(); worksheet1.Cells[(5 + i), 7].SetValue(BalDT.Rows[i]["BeginStock"]); worksheet1.Cells[(5 + i), 8].SetValue(BalDT.Rows[i]["I_Total"]); worksheet1.Cells[(5 + i), 9].SetValue(BalDT.Rows[i]["E_Total"]); worksheet1.Cells[(5 + i), 10].SetValue(BalDT.Rows[i]["E_ChengPinTotal"]); worksheet1.Cells[(5 + i), 11].SetValue(BalDT.Rows[i]["Last_QTY"]); } } spreadsheetControl1.SaveDocument(FileName, DocumentFormat.Xlsx); } catch (Exception ex) { throw new Exception("表格生成失败," + ex.Message); } }
效果如下:
总而言之,能用Spreadsheet就用,要比NPOI方便很多,至于他的其他方法属性,可以去看看他的API。
评价
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术