NPOI 导入导出excel 支持 03 07

因为微软的office成本太高了,所以开发项目的时候电脑上没安装office,而是安装了wps。但开发语言用的是C#,所以直接调用微软的office组件是很方便的,但一方面慢,一方面成本高,所以从网上找到了NPOI这个开源的项目。http://npoi.codeplex.com/,引用的dll下载目录 http://npoi.codeplex.com/downloads/get/1476595

并且封装了通用的处理EXCEL 跟DataSet,DataTable的方法。方便调用

以上是代码 (当前项目是.net 2.0 下的,如果需要.net 4.0则到NPOI官网下载相应的dll就可以了)

  1 using NPOI.SS.UserModel;
  2 using System;
  3 using System.Collections.Generic;
  4 using System.Data;
  5 using System.IO;
  6 using System.Text;
  7
  8 namespace MrLiu.Tools
  9 {
 10     public sealed class ExcelHelper
 11     {
 12         #region Excel导入
 13         /// <summary>
 14         /// Excel 转换为DataTable
 15         /// </summary>
 16         /// <param name="file">文件路径</param>
 17         /// <param name="sheetName">Sheet名称,如果只有一个sheet可以传 null</param>
 18         /// <returns></returns>
 19         public static DataTable ExcelToDataTable(string file, string sheetName)
 20         {
 21             try
 22             {
 23                 DataTable dt = new DataTable();
 24                 using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
 25                 {
 26                     var workbook = NPOI.SS.UserModel.WorkbookFactory.Create(fs);
 27                     ISheet sheet = null;
 28                     if (sheetName == null)
 29                     {
 30                         sheet = workbook.GetSheetAt(0);
 31                     }
 32                     else
 33                     {
 34                         sheet = workbook.GetSheet(sheetName);
 35                     }
 36                     //列名
 37                     IRow rowHead = sheet.GetRow(sheet.FirstRowNum);
 38                     for (int i = 0; i < rowHead.LastCellNum; i++)
 39                     {
 40                         string fildName = rowHead.GetCell(i).StringCellValue;
 41                         dt.Columns.Add(fildName, typeof(String));
 42                     }
 43
 44                     //数据
 45                     for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
 46                     {
 47                         IRow row = sheet.GetRow(i);
 48                         DataRow dr = dt.NewRow();
 49                         for (int j = row.FirstCellNum; j < row.LastCellNum; j++)
 50                         {
 51                             var cell = row.GetCell(j);
 52                             dr[j] = GetValueTypeForICell(cell);
 53                             if (dr[j] == null)
 54                             {
 55                                 dr[j] = string.Empty;
 56                             }
 57                         }
 58                         dt.Rows.Add(dr);
 59                     }
 60                 }
 61                 return dt;
 62             }
 63             catch (Exception ex)
 64             {
 65                 throw new Exception(ex.Message);
 66             }
 67         }
 68         /// <summary>
 69         /// Excel 导入为DataTable
 70         /// </summary>
 71         /// <param name="file">文件路径</param>
 72         /// <param name="extension">后续名 XLS XLSX</param>
 73         /// <returns></returns>
 74         public static DataTable ExcelToDataTable(string file)
 75         {
 76             try
 77             {
 78                 DataTable dt = new DataTable();
 79                 string extension = Path.GetExtension(file);
 80                 if (extension.ToUpper() == ".XLS")
 81                 {
 82                     dt = ExcelToTableForXLS(file);
 83                 }
 84                 else if (extension.ToUpper() == ".XLS")
 85                 {
 86                     dt = ExcelToTableForXLSX(file);
 87                 }
 88                 else
 89                 {
 90                     throw new Exception("文件格式不正确");
 91                 }
 92                 return dt;
 93             }
 94             catch (Exception ex)
 95             {
 96                 throw new Exception(ex.Message);
 97             }
 98         }
 99         /// <summary>
100         /// 读取xls格式的Excel
101         /// </summary>
102         /// <param name="file">文件全路径</param>
103         /// <returns>返回DaTaTable</returns>
104         public static DataTable ExcelToTableForXLS(string file)
105         {
106             try
107             {
108                 DataTable dt = new DataTable();
109                 using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
110                 {
111                     var hssfworkbook = new NPOI.HSSF.UserModel.HSSFWorkbook(fs);
112                     ISheet sheet = hssfworkbook.GetSheetAt(0);
113
114                     //列名
115                     IRow rowHead = sheet.GetRow(sheet.FirstRowNum);
116                     for (int i = 0; i < rowHead.LastCellNum; i++)
117                     {
118                         string fildName = rowHead.GetCell(i).StringCellValue;
119                         dt.Columns.Add(fildName, typeof(String));
120                     }
121
122                     //数据
123                     for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
124                     {
125                         IRow row = sheet.GetRow(i);
126                         DataRow dr = dt.NewRow();
127                         for (int j = row.FirstCellNum; j < row.LastCellNum; j++)
128                         {
129                             NPOI.HSSF.UserModel.HSSFCell cell = row.GetCell(j) as NPOI.HSSF.UserModel.HSSFCell;
130                             dr[j] = GetValueTypeForXLS(cell);
131                             if (dr[j] == null)
132                             {
133                                 break;
134                             }
135                         }
136                         dt.Rows.Add(dr);
137                     }
138                 }
139                 return dt;
140             }
141             catch (Exception ex)
142             {
143                 throw new Exception(ex.Message);
144             }
145         }
146
147         /// <summary>
148         /// 获取单元格类型
149         /// </summary>
150         /// <param name="cell"></param>
151         /// <returns></returns>
152         private static object GetValueTypeForXLS(NPOI.HSSF.UserModel.HSSFCell cell)
153         {
154             try
155             {
156                 if (cell == null)
157                 {
158                     return null;
159                 }
160                 switch (cell.CellType)
161                 {
162                     case CellType.Blank: //BLANK:
163                         return null;
164                     case CellType.Boolean: //BOOLEAN:
165                         return cell.BooleanCellValue;
166                     case CellType.Numeric: //NUMERIC:
167                         return cell.NumericCellValue;
168                     case CellType.String: //STRING:
169                         return cell.StringCellValue;
170                     case CellType.Error: //ERROR:
171                         return cell.ErrorCellValue;
172                     case CellType.Formula: //FORMULA:
173                     default:
174                         return "=" + cell.CellFormula;
175                 }
176             }
177             catch (Exception ex)
178             {
179                 throw new Exception(ex.Message);
180             }
181         }
182
183         /// <summary>
184         /// 读取xlsx格式的Excel
185         /// </summary>
186         /// <param name="file">文件全路径</param>
187         /// <returns>返回DaTaTable</returns>
188         public static DataTable ExcelToTableForXLSX(string file)
189         {
190             try
191             {
192                 DataTable dt = new DataTable();
193                 using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
194                 {
195                     var hssfworkbook = new NPOI.XSSF.UserModel.XSSFWorkbook(fs);
196                     ISheet sheet = hssfworkbook.GetSheetAt(0);
197
198                     //列名
199                     IRow rowHead = sheet.GetRow(sheet.FirstRowNum);
200                     for (int i = 0; i < rowHead.LastCellNum; i++)
201                     {
202                         string fildName = rowHead.GetCell(i).StringCellValue;
203                         dt.Columns.Add(fildName, typeof(String));
204                     }
205
206                     //数据
207                     for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
208                     {
209                         IRow row = sheet.GetRow(i);
210                         DataRow dr = dt.NewRow();
211                         for (int j = row.FirstCellNum; j < row.LastCellNum; j++)
212                         {
213                             NPOI.HSSF.UserModel.HSSFCell cell = row.GetCell(j) as NPOI.HSSF.UserModel.HSSFCell;
214                             dr[j] = GetValueTypeForXLS(cell);
215                             if (dr[j] == null)
216                             {
217                                 break;
218                             }
219                         }
220                         dt.Rows.Add(dr);
221                     }
222                 }
223                 return dt;
224             }
225             catch (Exception ex)
226             {
227                 throw new Exception(ex.Message);
228             }
229         }
230         /// <summary>
231         /// 获取单元格类型(xlsx)
232         /// </summary>
233         /// <param name="cell"></param>
234         /// <returns></returns>
235         private static object GetValueTypeForXLSX(NPOI.XSSF.UserModel.XSSFCell cell)
236         {
237             try
238             {
239                 if (cell == null)
240                 {
241                     return null;
242                 }
243                 switch (cell.CellType)
244                 {
245                     case CellType.Blank: //BLANK:
246                         return null;
247                     case CellType.Boolean: //BOOLEAN:
248                         return cell.BooleanCellValue;
249                     case CellType.Numeric: //NUMERIC:
250                         return cell.NumericCellValue;
251                     case CellType.String: //STRING:
252                         return cell.StringCellValue;
253                     case CellType.Error: //ERROR:
254                         return cell.ErrorCellValue;
255                     case CellType.Formula: //FORMULA:
256                     default:
257                         return "=" + cell.CellFormula;
258                 }
259             }
260             catch (Exception ex)
261             {
262                 throw new Exception(ex.Message);
263             }
264         }
265
266         /// <summary>
267         /// 获取单元格类型不定
268         /// </summary>
269         /// <param name="cell"></param>
270         /// <returns></returns>
271         private static object GetValueTypeForICell(ICell cell)
272         {
273             try
274             {
275                 if (cell == null)
276                 {
277                     return null;
278                 }
279                 switch (cell.CellType)
280                 {
281                     case CellType.Blank: //BLANK:
282                         return null;
283                     case CellType.Boolean: //BOOLEAN:
284                         return cell.BooleanCellValue;
285                     case CellType.Numeric: //NUMERIC:
286                         return cell.NumericCellValue;
287                     case CellType.String: //STRING:
288                         return cell.StringCellValue;
289                     case CellType.Error: //ERROR:
290                         return cell.ErrorCellValue;
291                     case CellType.Formula: //FORMULA:
292                     default:
293                         return "=" + cell.CellFormula;
294                 }
295             }
296             catch (Exception ex)
297             {
298                 throw new Exception(ex.Message);
299             }
300         }
301
302         /// <summary>
303         /// Excel 转换为DataSet
304         /// </summary>
305         /// <param name="fileName">文件名</param>
306         /// <returns>DataSet</returns>
307         public static DataSet ExcelToDataSet(string fileName)
308         {
309             try
310             {
311                 if (!File.Exists(fileName))
312                 {
313                     throw new Exception("文件不存在");
314                 }
315                 else
316                 {
317                     DataSet ds = new DataSet();
318                     using (FileStream reader = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
319                     {
320                         IWorkbook book = WorkbookFactory.Create(reader);
321                         int cnt = book.NumberOfSheets;
322                         if (cnt <= 0)
323                         {
324                             throw new Exception("文件不是Excel文件");
325                         }
326
327                         for (int i = 0; i < cnt; i++)
328                         {
329                             ISheet sheet = book.GetSheetAt(i);
330                             DataTable dt = new DataTable(sheet.SheetName);
331                             IRow rowHead = sheet.GetRow(sheet.FirstRowNum);
332                             for (int j = rowHead.FirstCellNum; j < rowHead.LastCellNum; j++)
333                             {
334                                 ICell cell = rowHead.GetCell(j);
335                                 dt.Columns.Add(cell.StringCellValue);
336                             }
337                             for (int j = sheet.FirstRowNum + 1; j <= sheet.LastRowNum; j++)
338                             {
339                                 DataRow dr = dt.NewRow();
340                                 IRow row = sheet.GetRow(j);
341                                 for (int k = rowHead.FirstCellNum; k < rowHead.LastCellNum; k++)
342                                 {
343                                     dr[k] = row.GetCell(k).StringCellValue;
344                                 }
345                                 dt.Rows.Add(dr);
346                             }
347                             ds.Tables.Add(dt);
348                         }
349                     }
350                     return ds;
351                 }
352             }
353             catch (Exception ex)
354             {
355                 throw new Exception(ex.Message);
356             }
357         }
358         #endregion Excel导出
359
360         #region Excel导出
361
362         /// <summary>
363         /// Excel导出
364         /// </summary>
365         /// <param name="dt">虚拟表</param>
366         /// <param name="fileName">文件路径</param>
367         /// <param name="sheetName">Sheet路径为空请传null</param>
368         /// <returns></returns>
369         public static bool DataTableToXLS(DataTable dt, string fileName, string sheetName)
370         {
371             try
372             {
373                 if (dt == null)
374                 {
375                     return false;
376                 }
377                 if (String.IsNullOrEmpty(sheetName))
378                 {
379                     sheetName = Path.GetFileName(fileName);
380                 }
381                 var book = new NPOI.HSSF.UserModel.HSSFWorkbook();
382                 book.CreateSheet();
383                 var sheet = book.CreateSheet(sheetName);
384
385                 IRow rowHead = sheet.CreateRow(0);
386                 for (int i = 0; i < dt.Columns.Count; i++)
387                 {
388                     ICell cell = rowHead.CreateCell(i);
389                     cell.SetCellValue(dt.Columns[i].ColumnName);
390                 }
391                 for (int i = 0; i < dt.Rows.Count; i++)
392                 {
393                     IRow row = sheet.CreateRow(i + 1);
394                     for (int j = 0; j < dt.Columns.Count; j++)
395                     {
396                         ICell cell = row.CreateCell(j);
397                         cell.SetCellValue(dt.Rows[i][j].ToString());
398                     }
399                 }
400
401                 using (FileStream fsWriter = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.Write))
402                 {
403                     book.Write(fsWriter);
404                     return true;
405                 }
406             }
407             catch (Exception ex)
408             {
409                 throw new Exception(ex.Message);
410             }
411         }
412
413
414         /// <summary>
415         /// DataSet 导出 到Excel
416         /// </summary>
417         /// <param name="ds">DataSet 表名默认为sheet名</param>
418         /// <param name="fileName">文件路径</param>
419         public static bool DataSetToExcel(DataSet ds, string fileName)
420         {
421             try
422             {
423                 String extension = Path.GetExtension(fileName).ToUpper();
424                 IWorkbook book = null;
425                 if (extension == ".XLS")
426                 {
427                     book = DataSetToHSSFWordbook(ds);
428                 }
429                 else if (extension == ".XLSX")
430                 {
431                     book = DataSetToXSSFWorkbook(ds);
432                 }
433                 else
434                 {
435                     throw new Exception("导入格式必须为xls或者xlsx");
436                 }
437
438                 using (FileStream fsWriter = new FileStream(fileName, FileMode.CreateNew, FileAccess.Write, FileShare.ReadWrite))
439                 {
440                     book.Write(fsWriter);
441                     return true;
442                 }
443             }
444             catch (Exception ex)
445             {
446                 throw new Exception(ex.Message);
447             }
448         }
449         /// <summary>
450         /// DataSet 转换为 XSSFWorkbook 07
451         /// </summary>
452         /// <param name="ds"></param>
453         /// <returns></returns>
454         private static NPOI.XSSF.UserModel.XSSFWorkbook DataSetToXSSFWorkbook(DataSet ds)
455         {
456             try
457             {
458                 var book = new NPOI.XSSF.UserModel.XSSFWorkbook();
459                 foreach (DataTable dt in ds.Tables)
460                 {
461                     ISheet sheet = book.CreateSheet(dt.TableName);
462                     IRow rowHead = sheet.CreateRow(0);
463                     ICellStyle style = book.CreateCellStyle();
464                     style.BorderBottom = BorderStyle.Thin;
465                     style.BorderTop = BorderStyle.Thin;
466                     style.BorderLeft = BorderStyle.Thin;
467                     style.BorderRight = BorderStyle.Thin;
468                     IFont font = book.CreateFont();
469                     font.FontHeightInPoints = 12;
470                     font.IsBold = true;
471                     style.SetFont(font);
472                     for (int i = 0; i < dt.Columns.Count; i++)
473                     {
474                         ICell cell = rowHead.CreateCell(i);
475                         cell.CellStyle = style;
476                         cell.SetCellValue(dt.Columns[i].ColumnName);
477                     }
478                     font.IsBold = false;
479                     style.SetFont(font);
480                     for (int i = 0; i < dt.Rows.Count; i++)
481                     {
482                         IRow row = sheet.CreateRow(i + 1);
483                         DataRow dr = dt.Rows[i];
484                         for (int j = 0; j < dt.Columns.Count; j++)
485                         {
486                             ICell cell = row.CreateCell(j);
487                             cell.CellStyle = style;
488                             cell.SetCellValue(dr[j].ToString());
489                         }
490                     }
491                 }
492                 return book;
493             }
494             catch (Exception ex)
495             {
496                 throw new Exception(ex.Message);
497             }
498         }
499
500         /// <summary>
501         /// DataSet 转换为 HSSFWorkbook 03
502         /// </summary>
503         /// <param name="ds"></param>
504         /// <returns></returns>
505         private static NPOI.HSSF.UserModel.HSSFWorkbook DataSetToHSSFWordbook(DataSet ds)
506         {
507             try
508             {
509                 var book = new NPOI.HSSF.UserModel.HSSFWorkbook();
510                 var dsi = NPOI.HPSF.PropertySetFactory.CreateDocumentSummaryInformation();
511                 dsi.Company = "上海金仕达卫宁软件股份有限公司";
512                 var si = NPOI.HPSF.PropertySetFactory.CreateSummaryInformation();
513                 si.Subject = "区域HIS系统自动导出";
514                 book.DocumentSummaryInformation = dsi;
515                 book.SummaryInformation = si;
516
517                 foreach (DataTable dt in ds.Tables)
518                 {
519                     ISheet sheet = book.CreateSheet(dt.TableName);
520                     IRow rowHead = sheet.CreateRow(0);
521                     ICellStyle style = book.CreateCellStyle();
522                     style.BorderBottom = BorderStyle.Thin;
523                     style.BorderTop = BorderStyle.Thin;
524                     style.BorderLeft = BorderStyle.Thin;
525                     style.BorderRight = BorderStyle.Thin;
526                     IFont font = book.CreateFont();
527                     font.FontHeightInPoints = 12;
528                     font.IsBold = true;
529                     style.SetFont(font);
530                     for (int i = 0; i < dt.Columns.Count; i++)
531                     {
532                         ICell cell = rowHead.CreateCell(i);
533                         cell.CellStyle = style;
534                         cell.SetCellValue(dt.Columns[i].ColumnName);
535                     }
536                     font.IsBold = false;
537                     style.SetFont(font);
538                     for (int i = 0; i < dt.Rows.Count; i++)
539                     {
540                         IRow row = sheet.CreateRow(i + 1);
541                         DataRow dr = dt.Rows[i];
542                         for (int j = 0; j < dt.Columns.Count; j++)
543                         {
544                             ICell cell = row.CreateCell(j);
545                             cell.CellStyle = style;
546                             cell.SetCellValue(dr[j].ToString());
547                         }
548                     }
549                 }
550                 return book;
551             }
552             catch (Exception ex)
553             {
554                 throw new Exception(ex.Message);
555             }
556         }
557
558         #endregion
559     }
560 }
时间: 2024-10-06 20:38:32

NPOI 导入导出excel 支持 03 07的相关文章

NPOI导入导出Excel

.net mvc利用NPOI导入导出excel 1.导出Excel :首先引用NPOI包,从这里下载>download(Action一定要用FileResult) /// <summary> /// 批量导出需要导出的列表 /// </summary> /// <returns></returns> public FileResult ExportStu2() { //获取list数据 var checkList = (from oc in db.Or

Excel操作--使用NPOI导入导出Excel为DataTable

1.ExcelHelper封装 1 namespace NPOI操作Excel 2 { 3 public class ExcelHelper 4 { 5 /// <summary> 6 /// DataTable转成Excel,返回一个文件流 7 /// </summary> 8 /// <param name="dataTable"></param> 9 /// <returns></returns> 10 pu

npoi导入导出excel (泛型)

最近新项目开始了,万能的excel又要上台工作.对于导出代码网上的确很多,合适的没有找到. 我们这边使用的ef + dapper 两套orm框架,他们有一个共同点,都是操作实体对象的.所以导出不能用万能的DataTable了.后面花了一些时间,集合众仙所长,写了一套单excel导入导出的方式.数据源为List<T> public class Excel { /// <summary> /// 导出到sheet中 /// </summary> /// <typepa

.net mvc利用NPOI导入导出excel

1.导出Excel : 首先引用NPOI包,从这里下载>download (Action一定要用FileResult) /// <summary> /// 批量导出需要导出的列表 /// </summary> /// <returns></returns> public FileResult ExportStu2() { //获取list数据 var checkList = (from oc in db.OrganizeCustoms join o i

winfrom 使用NPOI导入导出Excel(xls/xlsx)数据到DataTable中

1.通过NUGET管理器下载nopi,在引入命令空间 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.IO; 5 using NPOI.SS.UserModel; //NPOI 6 using NPOI.HSSF.Util; //NPOI 7 using NPOI.HSSF.UserModel; //NPOI 8 using NPOI.XSSF.UserModel; /

ASP.Net MVC利用NPOI导入导出Excel

因近期项目遇到所以记录一下: 1.导出Excel 首先引用NPOI包 (NPOI自行搜索下载) (Action一定要用FileResult) 1 [Localization] 2 /// <summary> 3 /// 导出Table的数据 4 /// </summary> 5 /// <returns></returns> 6 public FileResult ExportExcel() 7 { 8 //string schoolname = "

&lt;转&gt;Npoi导入导出Excel操作&lt;载&gt;

1 //Datatable导出Excel 2 private static void GridToExcelByNPOI(DataTable dt, string strExcelFileName) 3 { 4 try 5 { 6 HSSFWorkbook workbook = new HSSFWorkbook(); 7 ISheet sheet = workbook.CreateSheet("Sheet1"); 8 9 ICellStyle HeadercellStyle = wor

简单回顾NPOI导入导出excel文件

当前环境.net4.0 去官方下下载:  NOPI官网 关于NOPI的详细,这里就不再介绍. 在项目中,我们只需引入  NPOI.dll  就可以了. 接下来................................................................ 上代码......... .......................................................... /// <summary> /// 导出 /// </sum

NPOI导入导出Excel (2)

简单演示一下创建一个Workbook对象,添加一个工作表,在工作表中添加一行一列: using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.IO;using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using Sys