DevExpress Spreadsheet加载表格填充数据并求和
电脑版发表于:2019/12/2 10:36
当需要导出表格时,我常用的一种是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。

