
使用NPOI导出,读取EXCEL(可追加功能)
View Code View Code
发布日期:2021-05-09 00:53:49
浏览次数:17
分类:博客文章
本文共 8749 字,大约阅读时间需要 29 分钟。
使用NPOI导出,读取EXCEL,具有可追加功能
看代码
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.IO; 5 using System.Data; 6 using NPOI.SS.UserModel; 7 using NPOI.XSSF.UserModel; 8 using NPOI.HSSF.UserModel; 9 10 namespace NPOIExcel 11 { 12 public class ExcelEX 13 { 14 15 ///16 /// 将DataTable数据导入到excel中 17 /// 18 /// 文件名 19 /// 要导入的数据 20 /// 要导入的excel的sheet的名称 21 /// 是否是追加模式 22 /// DataTable的列名是否要导入 23 ///导入数据行数(包含列名那一行) 24 public static int DataTableToExcel(string fileName, DataTable data, bool blnAppled = false, string sheetName = "sheet1", bool isColumnWritten = true) 25 { 26 int i = 0; 27 int j = 0; 28 int count = 0; 29 ISheet sheet = null; 30 IWorkbook workbook = null; 31 using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)) 32 { 33 if (!blnAppled) 34 { 35 if (fileName.IndexOf(".xlsx") > 0) // 2007版本 36 workbook = new XSSFWorkbook(); 37 else if (fileName.IndexOf(".xls") > 0) // 2003版本 38 workbook = new HSSFWorkbook(); 39 } 40 else 41 { 42 if (fileName.IndexOf(".xlsx") > 0) // 2007版本 43 workbook = new XSSFWorkbook(fs); 44 else if (fileName.IndexOf(".xls") > 0) // 2003版本 45 workbook = new HSSFWorkbook(fs); 46 } 47 48 try 49 { 50 if (!blnAppled && !string.IsNullOrEmpty(sheetName)) 51 { 52 if (workbook != null) 53 { 54 sheet = workbook.CreateSheet(sheetName); 55 } 56 else 57 { 58 return -1; 59 } 60 } 61 else 62 { 63 sheet = workbook.GetSheetAt(0); 64 } 65 66 if (!blnAppled) 67 { 68 if (isColumnWritten == true) //写入DataTable的列名 69 { 70 IRow row = sheet.CreateRow(0); 71 for (j = 0; j < data.Columns.Count; ++j) 72 { 73 row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName); 74 } 75 count = 1; 76 } 77 else 78 { 79 count = 0; 80 } 81 } 82 83 count = sheet.LastRowNum + 1; 84 85 for (i = 0; i < data.Rows.Count; ++i) 86 { 87 IRow row = sheet.CreateRow(count); 88 for (j = 0; j < data.Columns.Count; ++j) 89 { 90 row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString()); 91 } 92 ++count; 93 } 94 95 } 96 catch (Exception ex) 97 { 98 Console.WriteLine("Exception: " + ex.Message); 99 return -1;100 }101 }102 103 FileStream outFs = new FileStream(fileName, FileMode.Open);104 workbook.Write(outFs);105 outFs.Close(); 106 return count;107 }108 109 ///110 /// 将excel中的数据导入到DataTable中111 /// 112 /// excel工作薄sheet的名称113 /// 第一行是否是DataTable的列名114 ///返回的DataTable 115 public static DataTable ExcelToDataTable(string fileName, string sheetName = null, bool isFirstRowColumn = true)116 {117 ISheet sheet = null;118 DataTable data = new DataTable();119 int startRow = 0;120 IWorkbook workbook = null;121 try122 {123 FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);124 if (fileName.IndexOf(".xlsx") > 0) // 2007版本125 workbook = new XSSFWorkbook(fs);126 else if (fileName.IndexOf(".xls") > 0) // 2003版本127 workbook = new HSSFWorkbook(fs);128 129 if (sheetName != null)130 {131 sheet = workbook.GetSheet(sheetName);132 if (sheet == null) //如果没有找到指定的sheetName对应的sheet,则尝试获取第一个sheet133 {134 sheet = workbook.GetSheetAt(0);135 }136 }137 else138 {139 sheet = workbook.GetSheetAt(0);140 }141 if (sheet != null)142 {143 IRow firstRow = sheet.GetRow(0);144 int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数145 146 if (isFirstRowColumn)147 {148 for (int i = firstRow.FirstCellNum; i < cellCount; ++i)149 {150 ICell cell = firstRow.GetCell(i);151 if (cell != null)152 {153 string cellValue = cell.StringCellValue;154 if (cellValue != null)155 {156 DataColumn column = new DataColumn(cellValue);157 data.Columns.Add(column);158 }159 }160 }161 startRow = sheet.FirstRowNum + 1;162 }163 else164 {165 startRow = sheet.FirstRowNum;166 }167 168 //最后一列的标号169 int rowCount = sheet.LastRowNum;170 for (int i = startRow; i <= rowCount; ++i)171 {172 IRow row = sheet.GetRow(i);173 if (row == null) continue; //没有数据的行默认是null 174 175 DataRow dataRow = data.NewRow();176 for (int j = row.FirstCellNum; j < cellCount; ++j)177 {178 if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null179 dataRow[j] = row.GetCell(j).ToString();180 }181 data.Rows.Add(dataRow);182 }183 }184 185 return data;186 }187 catch (Exception ex)188 {189 Console.WriteLine("Exception: " + ex.Message);190 return null;191 }192 }193 194 195 }196 }
看测试
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Data; 6 using NPOIExcel; 7 8 namespace Test 9 {10 class Program11 {12 static void Main(string[] args)13 {14 DataTable dt = new DataTable();15 dt.Columns.Add("A", typeof(string));16 dt.Columns.Add("B", typeof(string));17 dt.Columns.Add("C", typeof(string));18 for (int i = 0; i < 50; i++)19 {20 DataRow dr = dt.NewRow();21 for (int j = 0; j < 3; j++)22 {23 dr[j] = "1_" + i.ToString() + "_" + j.ToString();24 }25 dt.Rows.Add(dr);26 }27 ExcelEX.DataTableToExcel("d:\\123.xlsx",dt);28 dt.Rows.Clear();29 30 for (int i = 0; i < 50; i++)31 {32 DataRow dr = dt.NewRow();33 for (int j = 0; j < 3; j++)34 {35 dr[j] = "2_" + i.ToString() + "_" + j.ToString();36 }37 dt.Rows.Add(dr);38 }39 40 ExcelEX.DataTableToExcel("d:\\123.xlsx", dt,true);41 Console.ReadKey();42 }43 }44 }
看结果
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月11日 03时53分15秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
android 集成weex
2019-03-09
【echarts】中国地图china.js 在线引用地址
2019-03-09
Flex 布局的自适应子项内容过长导致其被撑大问题
2019-03-09
PL/SQL 动态Sql拼接where条件
2019-03-09
Lua-table 一种更少访问的安全取值方式
2019-03-09
虚函数
2019-03-09
菱形继承
2019-03-09
RTL设计- 多时钟域按顺序复位释放
2019-03-09
斐波那契数列两种算法的时间复杂度
2019-03-09
int main(int argc,char* argv[])详解
2019-03-09
【Android踩过的坑】7.Android Studio 点击启动项目时进入调试模式
2019-03-09
【Android小技巧】1.快速查看SDK对应的API Level
2019-03-09
【自学Flutter】4.1 Material Design字体图标的使用(icon)
2019-03-09
C++清空队列(queue)方法
2019-03-09
【换行符】什么时候用cin.get()吃掉输入流中的换行符
2019-03-09
【二叉树】已知后序与中序求先序
2019-03-09
数组范围的动态扩容
2019-03-09
如何选择三种验证类型的https证书
2019-03-09