.NET NPOI 使用HSSFWorkbook,CopyTo复制模版sheet

HSSFWorkbook是生成xls文件,旧版的Excel

需求是设置一个模版Excel,每次使用时,重新生成一个Excel,拷贝模版的sheet加入到新生成的Excel中

//假设你的数据源为ds,新生成的文件导出地址path 
public static void ExportE0092(DataSet ds string path)
{
    using (FileStream fileStream = new FileStream(path, FileMode.Create))
    {
        try
        {
            //用于获取当前工作目录的完整路径
            string executingAssemblyPath = Environment.CurrentDirectory;
            //当前工作目录的上级
            string directoryName = Path.GetDirectoryName(executingAssemblyPath);
            //当前工作目录的上上级
            string parentDirectoryName = Directory.GetParent(directoryName).FullName;
            //拼接你的模版文件地址
            string excelPath = Path.Combine(parentDirectoryName, "file\\Template\\文件名.xls");
            //打开文件
            FileStream excelModel = new FileStream(excelPath, FileMode.Open, FileAccess.Read);
            //模版文件
            HSSFWorkbook modelbook = new HSSFWorkbook(excelModel);
            //模版文件的sheet,使用HSSFSheet 
            HSSFSheet sourceSheet = modelbook.GetSheetAt(0) as HSSFSheet;

            //新建一个excel
            HSSFWorkbook workbook = new HSSFWorkbook();
            //循环数据源创建sheet,有几个DataTable,创建几个sheet
            for (var i = 0; i < ds.Tables.Count; i++)
            {
                string nameStr = ds.Tables[i].TableName;
                DataTable hkTable = ds.Tables[i];

                //创建一个sheet
                sourceSheet.CopyTo(workbook, nameStr, true, true);
                //sheet就是你新建的Excel中刚拷贝过去的sheet
                ISheet sheet = workbook.GetSheet(nameStr);

                //第一行,标题
                IRow row0 = sheet.GetRow(0);
                row0.GetCell(0).SetCellValue("赋值");

                //…………下面就是你在sheet中的赋值信息
            }
            //写入流
            workbook.Write(fileStream);
            //文件流关闭
            excelModel.Close();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }
}

此方法可以将sheet中的表格设置样式都拷贝出来,但是我测试只能拷贝12个sheet,多于12个后开始表格样式丢失

少于12个sheet的宝子可以用用,但是多了还是不行,有解决方法的宝子评论区可以指教一下,多多交流,哈哈哈

posted @ 2024-06-12 10:51  官方小可爱  阅读(2)  评论(1编辑  收藏  举报