hjb

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。

关于TNBLOG
TNBLOG,技术分享。技术交流:群号677373950
ICP备案 :渝ICP备18016597号-1
App store Android
精彩评论
{{item.replyName}}
{{item.content}}
{{item.time}}
{{subpj.replyName}}
@{{subpj.beReplyName}}{{subpj.content}}
{{subpj.time}}
猜你喜欢