
当需要导出表格时,我常用的一种是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。
评价
排名
44
文章
7
粉丝
4
评论
7
VS2015源文件编码问题
我和代码的故事 : 65001 utf-8
VS2015源文件编码问题
尘叶心繁 : 打开powershellchcp 65001 #设置为utf-8
VS2015源文件编码问题
剑轩 : easy ui ?
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术