博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单操作excel类
阅读量:5082 次
发布时间:2019-06-13

本文共 6022 字,大约阅读时间需要 20 分钟。

1 class ExcelHelper : IDisposable  2     {  3         private string fileName = null; //文件名  4         private IWorkbook workbook = null;  5         private FileStream fs = null;  6         private bool disposed;  7   8         public ExcelHelper(string fileName)  9         { 10             this.fileName = fileName; 11             disposed = false; 12         } 13  14         ///  15         /// 将DataTable数据导入到excel中 16         ///  17         /// 要导入的数据 18         /// DataTable的列名是否要导入 19         /// 要导入的excel的sheet的名称 20         /// 
导入数据行数(包含列名那一行)
21 public int DataTableToExcel(DataTable data, string sheetName, bool isColumnWritten) 22 { 23 int i = 0; 24 int j = 0; 25 int count = 0; 26 ISheet sheet = null; 27 28 fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); 29 if (fileName.IndexOf(".xlsx") > 0) // 2007版本 30 workbook = new XSSFWorkbook(); 31 else if (fileName.IndexOf(".xls") > 0) // 2003版本 32 workbook = new HSSFWorkbook(); 33 34 try 35 { 36 if (workbook != null) 37 { 38 sheet = workbook.CreateSheet(sheetName); 39 } 40 else 41 { 42 return -1; 43 } 44 45 if (isColumnWritten == true) //写入DataTable的列名 46 { 47 IRow row = sheet.CreateRow(0); 48 for (j = 0; j < data.Columns.Count; ++j) 49 { 50 row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName); 51 } 52 count = 1; 53 } 54 else 55 { 56 count = 0; 57 } 58 59 for (i = 0; i < data.Rows.Count; ++i) 60 { 61 IRow row = sheet.CreateRow(count); 62 for (j = 0; j < data.Columns.Count; ++j) 63 { 64 row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString()); 65 } 66 ++count; 67 } 68 workbook.Write(fs); //写入到excel 69 return count; 70 } 71 catch (Exception ex) 72 { 73 Console.WriteLine("Exception: " + ex.Message); 74 return -1; 75 } 76 } 77 78 /// 79 /// 将excel中的数据导入到DataTable中 80 /// 81 /// excel工作薄sheet的名称 82 /// 第一行是否是DataTable的列名 83 ///
返回的DataTable
84 public DataTable ExcelToDataTable(string sheetName, bool isFirstRowColumn) 85 { 86 ISheet sheet = null; 87 DataTable data = new DataTable(); 88 int startRow = 0; 89 try 90 { 91 fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); 92 if (fileName.IndexOf(".xlsx") > 0) // 2007版本 93 workbook = new XSSFWorkbook(fs); 94 else if (fileName.IndexOf(".xls") > 0) // 2003版本 95 workbook = new HSSFWorkbook(fs); 96 97 if (sheetName != null) 98 { 99 sheet = workbook.GetSheet(sheetName);100 }101 else102 {103 sheet = workbook.GetSheetAt(0);104 }105 if (sheet != null)106 {107 IRow firstRow = sheet.GetRow(0);108 int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数109 110 if (isFirstRowColumn)111 {112 for (int i = firstRow.FirstCellNum; i < cellCount; ++i)113 {114 DataColumn column = new DataColumn(firstRow.GetCell(i).StringCellValue);115 data.Columns.Add(column);116 }117 startRow = sheet.FirstRowNum + 1;118 }119 else120 {121 startRow = sheet.FirstRowNum;122 }123 124 //最后一列的标号125 int rowCount = sheet.LastRowNum;126 for (int i = startRow; i <= rowCount; ++i)127 {128 IRow row = sheet.GetRow(i);129 if (row == null) continue; //没有数据的行默认是null       130 131 DataRow dataRow = data.NewRow();132 for (int j = row.FirstCellNum; j < cellCount; ++j)133 {134 if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null135 dataRow[j] = row.GetCell(j).ToString();136 }137 data.Rows.Add(dataRow);138 }139 }140 141 return data;142 }143 catch (Exception ex)144 {145 Console.WriteLine("Exception: " + ex.Message);146 return null;147 }148 }149 150 public void Dispose()151 {152 Dispose(true);153 GC.SuppressFinalize(this);154 }155 156 protected virtual void Dispose(bool disposing)157 {158 if (!this.disposed)159 {160 if (disposing)161 {162 if (fs != null)163 fs.Close();164 }165 166 fs = null;167 disposed = true;168 }169 }170 }
View Code

注意,一定要引用NPOI的dll。

转载于:https://www.cnblogs.com/zhenfeng/p/4093460.html

你可能感兴趣的文章
poj2752 Seek the Name, Seek the Fame
查看>>
软件开发和软件测试,我该如何选择?(蜗牛学院)
查看>>
基本封装方法
查看>>
bcb ole拖拽功能的实现
查看>>
生活大爆炸之何为光速
查看>>
bzoj 2456: mode【瞎搞】
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
[GraphQL] Reuse Query Fields with GraphQL Fragments
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
两种最常用的Sticky footer布局方式
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Java程序IP v6与IP v4的设置
查看>>
RUP(Rational Unified Process),统一软件开发过程
查看>>
数据库链路创建方法
查看>>
Enterprise Library - Data Access Application Block 6.0.1304
查看>>
重构代码 —— 函数即变量(Replace temp with Query)
查看>>