AI智能
改变未来

c# npoi 写入现有的EXCEL指定SHEET

    这边是我模仿写的一个小工具类 实现了将datatable 写入到EXCEL指定的SHEET 指定的行 中 ,

背景是 由于一开始引用了using Microsoft.Office.Interop.Excel;

类库导致客户在没有装office环境的电脑上时候 所以改用了更通用的NPOI进行EXCEL的使用

       /// <summary>
        /// datatable 写入现有的EXCEL 
        /// </summary>
        /// <param name=\”dt_source\”>需要写入的数据源</param>
        /// <param name=\”filepath\”>excel 文件路径</param>
        /// <param name=\”sheetname\”>哪个页面 写</param>
        /// <param name=\”startrow\”>从第几行开始写 </param>
        public static void DtWriteExitExcel(DataTable dt_source, string filepath,string sheetname,int startrow)
        {

         //1.读取现有的EXCEL 文件 获取 IWorkbook 记得关闭 文件流 这里只是要获取SHEET格式

            FileStream fs = null; 
            IWorkbook workbook = null;
            ISheet xSheet = null;
            fs = new FileStream(filepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            if (filepath.IndexOf(\”.xlsx\”) > 0)
            {
                workbook = new XSSFWorkbook(fs);

            }
            else if (filepath.IndexOf(\”.xls\”) > 0)
            {
                workbook = new HSSFWorkbook(fs);
            }
            fs.Close();

           //2.获取需要的SHEET 一个excel 由很多的页组成 这边 sheetname 就是获取需要哪个页的SHEET 格式

            try
            {

                xSheet = workbook.GetSheetAt(workbook.GetSheetIndex(sheetname));

             //3.赋值 根据这个SHEET 来新建行 赋值 单元格  这里startrow 是可以指定从第几行开始写入内容
                for (int i = 0; i < dt_source.Rows.Count; i++)
                {
                    IRow row1 = xSheet.CreateRow(i + startrow );
                    for (int j = 0; j < dt_source.Columns.Count; j++)
                    {
                        ICell celli = row1.CreateCell(j );
                        celli.SetCellValue(dt_source.Rows[i][j].ToString());
                    }
                }

              //4.再次打开这个文件然后将刚刚的 workbook 写入进去 
                FileStream fileStream = File.Open(filepath,FileMode.OpenOrCreate, FileAccess.ReadWrite);
                workbook.Write(fileStream);

               //5.这里 不能把 workbook.Dispose(); 写到写入下面因为是天然异步的 所以就是没有写进去就被你销毁了 
                //workbook.Dispose();
                fileStream.Close();
            }
            catch (Exception EX)
            {

               //6.这边是报错的时候销毁流 不然导致文件锁死状态 只能重启电脑才能打开文件了 
                fs.Close();
                workbook.Dispose();
            }
            
        }

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » c# npoi 写入现有的EXCEL指定SHEET