C#中通过Excel模板导出数据

一、实现效果

1.1、编写特定格式的Excel模板

 1.2、调用Excel模板导出数据

二、实现核心

        #region   通过模板导出Excel文件

        /// <summary>
        /// 通过模板导出Excel文件
        /// </summary>
        /// <param name="dt">需要导出的DataTable表</param>
        /// <param name="templatePath">使用的的Excel模板路径和名称</param>
        /// <param name="outFilePath">导出的Excel模板路径和名称</param>
        /// <param name="sheetName">sheetName</param>
        /// <param name="startRowIndex">开始添加数据行的索引</param>
        public void ExcelExportByTemplate(DataTable dt, string templatePath, string outFilePath, string sheetName,
            int startRowIndex = 0)
        {
            try
            {
                IWorkbook workBook;
                var outPath = "";
                var fileExt = Path.GetExtension(outFilePath);
                if (fileExt == ".xlsx")
                {
                    outPath = outFilePath.Substring(0, outFilePath.Length - 5) + DateTime.Now.ToString("yyyyMMddhhmmssffff") + ".xlsx";
                    File.Copy(templatePath, outPath, true);
                    using (var fs = File.Open(outPath, FileMode.Open, FileAccess.Read, FileShare.Write))
                    {
                        workBook = new XSSFWorkbook(fs);
                    }
                }
                else if (fileExt == ".xls")
                {
                    outPath = outFilePath.Substring(0, outFilePath.Length - 4) + DateTime.Now.ToString("yyyyMMddhhmmssffff") + ".xls";
                    File.Copy(templatePath, outPath, true);
                    using (var fs = File.Open(outPath, FileMode.Open, FileAccess.Read, FileShare.Write))
                    {
                        workBook = new HSSFWorkbook(fs);
                    }
                }
                else
                {
                    workBook = null;
                }

                if (workBook != null)
                {
                    var style = workBook.CreateCellStyle();
                    style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                    var sheet = string.IsNullOrEmpty(sheetName) ? workBook.GetSheetAt(0) : workBook.GetSheet(sheetName);

                    for (var i = startRowIndex; i < dt.Rows.Count; i++)
                    {
                        var row = sheet.CreateRow(i + 1);
                        for (var j = 0; j < dt.Columns.Count; j++)
                        {
                            var cell = row.CreateCell(j);
                            cell.SetCellValue(dt.Rows[i][j].ToString());
                            cell.CellStyle = style;
                        }
                    }
                }

                var file = new FileStream(outPath, FileMode.Create);

                workBook?.Write(file);

                file.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("Exception:" + ex.Message);
            }
        }

        #endregion 

三、使用方法

        //导出数据到Excel模板文件中
        private void simpleButton5_Click(object sender, EventArgs e)
        {
            DataTable dt = (DataTable)gridControl1.DataSource;

            ExcelExportByTemplate(dt, @"C:\Users\Administrator\Desktop\导出Excel\导出数据模板.xlsx",
                @"C:\Users\Administrator\Desktop\导出Excel\通过模板导出的数据.xlsx","Sheet1",1);
        }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论

打赏作者

牛奶咖啡13

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值