/// <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相关推荐

  1. python xlwt追加内容_python 往excel中追加内容

    from xlrd import open_workbook from xlutils.copy import copy #在创建好的excel种追加新的数据 if __name__ == '__ma ...

  2. NPOI读写Excel

    1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...

  3. NPOI 导入Excel和读取Excel

    1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...

  4. Winform中通过NPOI导出Excel时通过ICellStyle和IDataFormat格式化日期显示格式

    场景 Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载: https://blog.csdn.net/B ...

  5. Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载

    场景 HSSFworkbook,XSSFworkbook,SXSSFworkbook区别 HSSFWorkbook: 是操作Excel2003以前(包括2003)的版本,扩展名是.xls:导出exce ...

  6. asp.net Mvc 使用NPOI导出Excel文件

    1.新建MVC项目,新建控制器.视图 添加控制器: 添加视图(将使用布局页前面的复选框里的勾勾去掉) 2.在Models里新建一个类 public class Shop{/// <summary ...

  7. 分享:一个基于NPOI的excel导入导出组件(强类型)

    一.引子 新进公司被安排处理系统的数据报表任务--对学生的考试成绩进行统计并能导出到excel.虽然以前也有弄过,但感觉不是很好,所以这次狠下心,多花点时间作个让自己满意的插件. 二.适用领域 因为需 ...

  8. python将csv一行保存一个txt_Python读写文件(csv、txt、excel)

    大家做在数据解决的时候,一定难免会与文件交互,那么对于指定的文件类型,我们如何操作呢? 1.python读写csv文件import csv #python2可以用file替代openwith open ...

  9. NPOI 读取excel到DataTable 读取隐藏列 读取公式列

    处理思路: 1.打开excel 用NPOI进行读取: 2.读取第一个Sheet: 读取过程中: a.先设置相应列 不隐藏 b.读取Cell时 先判断是否的包含公式 相应代码如下: public sta ...

最新文章

  1. oracle 11g 逻辑备库,通过Oracle 11g 逻辑standby实现BI的需求
  2. 学习jvm(一)--java内存区域
  3. (转)动态Entity Framework查询:Dynamic Query 介绍
  4. springcloud(十):服务网关zuul
  5. Zookeeper及客户端的基本操作
  6. SQLite语法与Android数据库操作
  7. js之如何获取css样式
  8. gan怎么输入一维数据_GAN网络,利用gan网络完成对一维数据点的生成
  9. VS2015安装(windows10+64)
  10. JAVA之socket编程服务器与客户端通信--实现简易聊天室
  11. Leetcode刷题面试题 16.14. 最佳直线
  12. EasyExcel实现下载Excel(解决无法从浏览器下载问题)
  13. 模拟小信号调理电路(智能车电磁组)
  14. 使用TorchText库进行文本分类
  15. SAP客户信贷配置与管理解析【转】
  16. wireless-tools源码分析-iwpriv
  17. 武汉方言RAP 《武汉》
  18. php memcache increment,memcache的increment用法
  19. linux系统FW升降级步骤,[Fw]初探linux中断系统(2)
  20. visual c++ 下载地址

热门文章

  1. 国外设计公司H5网站模板
  2. 阿里云SDK播放器集成
  3. 抢占智能家居市场,海尔迎来多个竞争对手
  4. c#加入json库引用,添加JSON包引用;新到Java
  5. PTA新生训练赛----3
  6. 服务器常见错误原因以及处理方式
  7. Monthly Expense(二分专题)
  8. ural 2032 Conspiracy Theory and Rebranding 整点三角形
  9. 不属于c语言程序运算符,以下选项中不属于C语言程序运算符的是( )
  10. 算法笔记--素数筛(朴素筛,埃式筛,欧拉筛)