/// <summary>/// 追加记录DataTable(不含表头,将表内容直接追加进去至末尾)/// </summary>/// <param name="path">路径</param>/// <param name="sheetIndex">目标表下标</param>/// <param name="dt">表格</param>/// <returns></returns>public static bool AppendDataTableToExcel(string path, int sheetIndex, DataTable dt,bool hasFieldRow = true){try{//获取文件流using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)){IWorkbook workbook;//获取excel的文件类型ExcelType type = GetExcelFileType(path).Value;//通过不同的文件类型创建不同的读取接口(xls使用HSSFWorkbook类实现,xlsx使用XSSFWorkbook类实现)switch (type){case ExcelType.xlsx:workbook = new XSSFWorkbook(stream);break;default:workbook = new HSSFWorkbook(stream);break;}//ISheet sheet = null;//获取工作表,默认获取第一张if (workbook.NumberOfSheets > sheetIndex && workbook.NumberOfSheets > 0){sheet = workbook.GetSheetAt(sheetIndex);}else{System.Windows.Forms.MessageBox.Show("索引超出界限或该文件表格为空!");}//是否已经获取工作表,如果没有则直接返回if (sheet == null){return false;}#region//往表中追加Datatableif (hasFieldRow)//判断是否添加表头{//添加表头(当表为空时从0开始,不为空则加1)IRow headRow = sheet.CreateRow(sheet.LastRowNum+(sheet.LastRowNum==0?0:1));for (int i = 0; i < dt.Columns.Count; i++){//获取单元格ICell cell = headRow.CreateCell(i);//设置单元格数据类型cell.SetCellType(CellType.String);//单元格赋值cell.SetCellValue(dt.Columns[i].ColumnName.ToString());}}//添加表头为1,不添加表头为0int starRow;if (hasFieldRow){starRow = 1;}else{starRow = 0;}//遍历行for (int i = 0; i < dt.Rows.Count; i++){//创建行IRow cells = sheet.CreateRow(sheet.LastRowNum + starRow);//遍历列for (int j = 0; j < dt.Columns.Count; j++){//创建单元格ICell cell = cells.CreateCell(j);//设置单元格属性cell.SetCellType(CellType.String);//单元格赋值cell.SetCellValue(dt.Rows[i][j].ToString());}}#endregion//保存bool success = Export(workbook, path);return success;}}catch{return false;}}/// <summary>/// 追加记录DataRow/// </summary>/// <param name="path">路径</param>/// <param name="sheetIndex">目标表下标</param>/// <param name="dr">行数据</param>/// <returns></returns>public static bool AppendDataRowToExcel(string path, int sheetIndex, DataRow dr){try{//获取文件流using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)){IWorkbook workbook;//获取excel的文件类型ExcelType type = GetExcelFileType(path).Value;//通过不同的文件类型创建不同的读取接口(xls使用HSSFWorkbook类实现,xlsx使用XSSFWorkbook类实现)switch (type){case ExcelType.xlsx:workbook = new XSSFWorkbook(stream);break;default:workbook = new HSSFWorkbook(stream);break;}//ISheet sheet = null;//获取工作表,默认获取第一张if (workbook.NumberOfSheets > sheetIndex && workbook.NumberOfSheets > 0){//获取工作表sheet = workbook.GetSheetAt(sheetIndex);}else{System.Windows.Forms.MessageBox.Show("索引超出界限或该文件表格为空!");}//是否已经获取工作表,如果没有则直接返回if (sheet == null){return false;}#region//往表中追加Datatable(没有追加表头数据)//创建行单元(当表为空时从0开始,不为空则加1)IRow cells = sheet.CreateRow(sheet.LastRowNum+(sheet.LastRowNum==0?0:1));//遍历列for (int j = 0; j < dr.ItemArray.Length; j++){//创建单元格ICell cell = cells.CreateCell(j);//设置单元格属性cell.SetCellType(CellType.String);//单元格赋值cell.SetCellValue(dr.ItemArray[j].ToString());}#endregion//保存bool success = Export(workbook, path);return success;}}catch{return false;}}/// <summary>/// 将表格存储为Excel/// </summary>/// <param name="workbook"></param>/// <returns></returns>private static bool Export(IWorkbook workbook,string path){try{FileInfo file = new FileInfo(path);if (file.Exists){file.Delete();file = new FileInfo(path);}// 写入 ,创建其支持存储区为内存的流System.IO.MemoryStream ms = new System.IO.MemoryStream();//写入内存workbook.Write(ms);workbook = null;//FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write);byte[] data = ms.ToArray();fs.Write(data, 0, data.Length);fs.Flush();//关闭ms.Close();//释放ms.Dispose();//fs.Close();return true;}catch (Exception ex){throw new Exception(ex.Message);}}
详细解决方案
C#NPOI 往excel里面追加一行或者一个Datatable
热度:24 发布时间:2023-12-17 04:00:36.0
相关解决方案
- 导出 Excel 资料怎样命名
- word excel pdf在ie浏览器中打开,该如何解决
- 在浏览器中展示word,excel.ppt,pdf等各种文件
- POI 处置 Excel,读取Excel中的格式 如表格框,背景色
- jxls 怎么导出图片到 excel 中
- poi excel 如何合并单元格?
- 用Java EXCEL API 是否能从Excel中导出表格,该如何处理
- java excel 問題 求大神 速解解决方案
- java 处理 excel 相关有关问题
- vs2010 datatable visualizer 不能用,该怎么处理
- 求Microsoft.Office.Interop.Excel.dll 11.0.0.0解决方法
- vs2010 datatable visualizer 不能用,该如何解决
- Microsoft.Office.Interop.Excel.dll 导出的文件版本的有关问题
- VC 2010 怎么 操作 excel 了
- ReportViewer 如何绑定一个动态的 DataTable
- 小弟我用水晶报表9新建一个报表,采用PULL模式,在创建新的连接中选用access/Excel(DAO),选择数据库之后,总是弹出对话框说登录失败
- [Crystal Reports]在ASP.net web中导出 有关问题[Excel、Word、PDF]
- Excel 图表解决方法
- asp.net 导出 包孕样式的 excel
- DataTable 取值解决方法
- 使用FlashPrinter将word,excel,pdf转换成swf失败的有关问题
- DataSet 读写 Excel.该怎么处理
- 100分求解决:datagridview打开Excel报错:名叫“ClampVal”的列已属于此 DataTable
- excel 导入数据到sql。就出有关问题了
- asp.net 导出(上载)Excel xp、win7 兼容
- .net 操作office(excel、word)咋搞?解决方法
- NPOI 导出Excel 多文件打包上载
- 怎的把Microsoft.Office.Interop.Excel.ApplicationClass excel创建的文件保存到数据流中
- asp.net上载并保存 excel 格式表格数据
- 64位操作系统能否使用 Microsoft.ACE.OLEDB.12.0 查询2003及以上的 Excel