当前位置: 首页 > 工具软件 > Npoi.Mapper > 使用案例 >

NPOI 多sheet 页导出文件 方法 hssf 与 xssf 大同小异

卓嘉良
2023-12-01
 
                string StrNow = DateTime.Now.ToString("yyyyMMddhhmmss");
                string StrrdNum = rdNum.Next(1, 100000).ToString();
                string Strp = 文件名+".xls";
                //获取服务器内部的文件路径
                string excelNewPath1 = System.Web.HttpContext.Current.Server.MapPath(".." + Strp);
                #region NPOI

                HSSFWorkbook hssfworkbookDown;
                string strFileTemplete = System.Web.HttpContext.Current.Server.MapPath("../模板路径");
                //获取模板文件,使用xssf或者hssf对象获取到模板文件进行插值
                using (FileStream file = new FileStream(strFileTemplete, FileMode.Open, FileAccess.Read))
                {
                    hssfworkbookDown = new HSSFWorkbook(file);
                    file.Close();
                }
             
                for (int i = 0; i < list.Count; i++)
                {
                    string InventoryCode = list[i].InventoryCode;

                    DataTable dt = iInventoryManageHandler.selectallinformatian(InventoryCode);

                  

                    HSSFSheet sheet = (HSSFSheet)hssfworkbookDown.GetSheet("想要获取的模板sheet页名称") as HSSFSheet;

                   //多次复制sheet页,进行插入操作,最后剩下最后一部分需要导出的文件时,插入到第一个sheet页当中
                    if (i != list.Count - 1)
                    {
                        sheet.CopySheet("想要给sheet页命名的名字");
                          
                        HSSFSheet sheet1 = (HSSFSheet)hssfworkbookDown.GetSheet("上面命名的sheet页名称");
                        int intRow = 2;
                        int offset = 0;
                        foreach (DataRow dr in dt.Rows)
                        {
                        //插入行--否则找不到行
                            if (intRow >= 2)
                            {
                                //在所获得的sheet页中插入空行
                                insertRow(hssfworkbookDown, sheet1, intRow, 1);
                                offset++;
                            }
                            sheet1.GetRow(intRow).GetCell(0).SetCellValue(值);
                            intRow++;

                        }
                       //移除多余的空行
                        for (int c = 0; c < 2; c++)
                        {
                             sheet1.ShiftRows(开始行, 结束行, 删除行数);
                        }

                    }
                    else {
                        int intRow = 2;
                        int offset = 0;
                        foreach (DataRow dr in dt.Rows)
                        {
                            if (intRow >= 2)
                            {
                                insertRow(hssfworkbookDown, sheet, intRow, 1);
                                offset++;
                            }
                            sheet.GetRow(intRow).GetCell(0).SetCellValue(值);
                            
                            intRow++;

                        }
                        //给sheet页命名,参数1:sheet页的序号,参数二:名称
                        hssfworkbookDown.SetSheetName(0, "名称");
                      
                        for (int c = 0; c < 2; c++)
                        {
                                //参数一:开始行;参数二:结束行:参数3:删除行数(必须是负数)
                            sheet.ShiftRows(开始行, 结束行, 删除行数);
                        }
                    }
                }
                
                //创建文件,并将所有操作写入文件
                FileStream files = new FileStream(excelNewPath1, FileMode.Create);
                hssfworkbookDown.Write(files);
                files.Close();  
 类似资料: