• NPOI读取Excel2003,2007


      1 using System;
      2 using System.Collections.Generic;
      3 using System.Data;
      4 using System.IO;
      5 using System.Linq;
      6 using System.Text;
      7 using NPOI.HSSF.UserModel;
      8 using NPOI.SS.UserModel;
      9 using NPOI.XSSF.UserModel;
     10 
     11 namespace DMEnterpriseAdministration
     12 {
     13     public class Excel
     14     {
     15         public static MemoryStream WriteDataToExcel(DataSet ds)
     16         {
     17             MemoryStream memoryStream = new MemoryStream();
     18 
     19             try
     20             {
     21                 IWorkbook workbook = new HSSFWorkbook();
     22 
     23                 foreach (DataTable table in ds.Tables)
     24                 {
     25                     ISheet sheet = workbook.CreateSheet(table.TableName);
     26                     IRow headerRow = sheet.CreateRow(0);
     27 
     28                     foreach (DataColumn column in table.Columns)
     29                     {
     30                         headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
     31                     }
     32 
     33                     int rowIndex = 1;
     34 
     35                     foreach (DataRow row in table.Rows)
     36                     {
     37                         IRow dataRow = sheet.CreateRow(rowIndex);
     38 
     39                         foreach (DataColumn column in table.Columns)
     40                         {
     41                             dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());
     42                         }
     43 
     44                         rowIndex++;
     45                     }
     46 
     47                     sheet = null;
     48                     headerRow = null;
     49                 }
     50 
     51                 workbook.Write(memoryStream);
     52 
     53                 workbook = null;
     54             }
     55             catch (Exception exception)
     56             {
     57                 throw exception;
     58             }
     59 
     60             return memoryStream;
     61         }
     62 
     63         public static DataSet ExcelToDataSet(string excelPath)
     64         {
     65             return ExcelToDataSet(excelPath, true);
     66         }
     67 
     68         public static DataSet ExcelToDataSet(string excelPath, bool firstRowAsHeader)
     69         {
     70             int sheetCount;
     71             return ExcelToDataSet(excelPath, firstRowAsHeader, out sheetCount);
     72         }
     73 
     74         public static DataSet ExcelToDataSet(string excelPath, bool firstRowAsHeader, out int sheetCount)
     75         {
     76             using (DataSet ds = new DataSet())
     77             {
     78                 using (FileStream fileStream = new FileStream(excelPath, FileMode.Open, FileAccess.Read))
     79                 {
     80                     IWorkbook workbook = new HSSFWorkbook(fileStream);
     81 
     82                     HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(workbook);
     83 
     84                     sheetCount = workbook.NumberOfSheets;
     85 
     86                     for (int i = 0; i < sheetCount; ++i)
     87                     {
     88                         ISheet sheet = workbook.GetSheetAt(i) as HSSFSheet;
     89                         DataTable dt = ExcelToDataTable(sheet, evaluator, firstRowAsHeader);
     90                         ds.Tables.Add(dt);
     91                     }
     92 
     93                     return ds;
     94                 }
     95             }
     96         }
     97 
     98         public static DataTable ExcelToDataTable(string excelPath, string sheetName)
     99         {
    100             return ExcelToDataTable(excelPath, sheetName, true);
    101         }
    102 
    103         public static DataTable ExcelToDataTable(string excelPath, string sheetName, bool firstRowAsHeader)
    104         {
    105             using (FileStream fileStream = new FileStream(excelPath, FileMode.Open, FileAccess.Read))
    106             {
    107                 IWorkbook workbook = null;
    108                 IFormulaEvaluator evaluator = null;
    109                 ISheet sheet  = null;
    110                 if (excelPath.EndsWith(".xls"))
    111                 {
    112                     workbook = new HSSFWorkbook(fileStream);
    113                     evaluator = new HSSFFormulaEvaluator(workbook);
    114                     sheet = workbook.GetSheet(sheetName) as HSSFSheet;
    115                     if (sheet == null)
    116                     {
    117                         sheet = workbook.GetSheetAt(0);
    118                     }
    119                 }
    120                 else
    121                 {
    122                     workbook = new XSSFWorkbook(fileStream);
    123                     evaluator = new XSSFFormulaEvaluator(workbook);
    124                     sheet = workbook.GetSheet(sheetName) as XSSFSheet;
    125                     if (sheet == null)
    126                     {
    127                         sheet = workbook.GetSheetAt(0);
    128                     }
    129                 }
    130 
    131                 return ExcelToDataTable(sheet, evaluator, firstRowAsHeader);
    132             }
    133         }
    134 
    135         private static DataTable ExcelToDataTable(ISheet sheet, IFormulaEvaluator evaluator, bool firstRowAsHeader)
    136         {
    137             if (firstRowAsHeader)
    138             {
    139                 return ExcelToDataTableFirstRowAsHeader(sheet, evaluator);
    140             }
    141             else
    142             {
    143                 return ExcelToDataTable(sheet, evaluator);
    144             }
    145         }
    146 
    147         private static DataTable ExcelToDataTableFirstRowAsHeader(ISheet sheet, IFormulaEvaluator evaluator)
    148         {
    149             using (DataTable dt = new DataTable())
    150             {
    151                 IRow firstRow = sheet.GetRow(0) as IRow;
    152                 int cellCount = GetCellCount(sheet);
    153 
    154                 for (int i = 0; i < cellCount; i++)
    155                 {
    156                     if (firstRow.GetCell(i) != null)
    157                     {
    158                         dt.Columns.Add(firstRow.GetCell(i).StringCellValue ?? string.Format("F{0}", i + 1), typeof(string));
    159                     }
    160                     else
    161                     {
    162                         dt.Columns.Add(string.Format("F{0}", i + 1), typeof(string));
    163                     }
    164                 }
    165 
    166                 for (int i = 1; i <= sheet.LastRowNum; i++)
    167                 {
    168                     IRow row = sheet.GetRow(i) as IRow;
    169                     DataRow dr = dt.NewRow();
    170                     FillDataRowByHSSFRow(row, evaluator, ref dr);
    171                     dt.Rows.Add(dr);
    172                 }
    173 
    174                 dt.TableName = sheet.SheetName;
    175                 return dt;
    176             }
    177         }
    178 
    179         private static DataTable ExcelToDataTable(ISheet sheet, IFormulaEvaluator evaluator)
    180         {
    181             using (DataTable dt = new DataTable())
    182             {
    183                 if (sheet.LastRowNum != 0)
    184                 {
    185                     int cellCount = GetCellCount(sheet);
    186 
    187                     for (int i = 0; i < cellCount; i++)
    188                     {
    189                         dt.Columns.Add(string.Format("F{0}", i), typeof(string));
    190                     }
    191 
    192                     for (int i = 0; i < sheet.FirstRowNum; ++i)
    193                     {
    194                         DataRow dr = dt.NewRow();
    195                         dt.Rows.Add(dr);
    196                     }
    197 
    198                     for (int i = sheet.FirstRowNum; i <= sheet.LastRowNum; i++)
    199                     {
    200                         IRow row = sheet.GetRow(i) as IRow;
    201                         DataRow dr = dt.NewRow();
    202                         FillDataRowByHSSFRow(row, evaluator, ref dr);
    203                         dt.Rows.Add(dr);
    204                     }
    205                 }
    206 
    207                 dt.TableName = sheet.SheetName;
    208                 return dt;
    209             }
    210         }
    211 
    212         private static void FillDataRowByHSSFRow(IRow row, IFormulaEvaluator evaluator, ref DataRow dr)
    213         {
    214             if (row != null)
    215             {
    216                 for (int j = 0; j < dr.Table.Columns.Count; j++)
    217                 {
    218                     ICell cell = row.GetCell(j) as ICell;
    219 
    220                     if (cell != null)
    221                     {
    222                         switch (cell.CellType)
    223                         {
    224                             case CellType.Blank:
    225                                 dr[j] = DBNull.Value;
    226                                 break;
    227                             case CellType.Boolean:
    228                                 dr[j] = cell.BooleanCellValue;
    229                                 break;
    230                             case CellType.Numeric:
    231                                 if (DateUtil.IsCellDateFormatted(cell))
    232                                 {
    233                                     dr[j] = cell.DateCellValue;
    234                                 }
    235                                 else
    236                                 {
    237                                     dr[j] = cell.NumericCellValue;
    238                                 }
    239                                 break;
    240                             case CellType.String:
    241                                 dr[j] = cell.StringCellValue;
    242                                 break;
    243                             case CellType.Error:
    244                                 dr[j] = cell.ErrorCellValue;
    245                                 break;
    246                             case CellType.Formula:
    247                                 cell = evaluator.EvaluateInCell(cell) as ICell;
    248                                 dr[j] = cell.ToString();
    249                                 break;
    250                             default:
    251                                 throw new NotSupportedException(string.Format("Catched unhandle CellType[{0}]", cell.CellType));
    252                         }
    253                     }
    254                 }
    255             }
    256         }
    257 
    258         private static int GetCellCount(ISheet sheet)
    259         {
    260             int firstRowNum = sheet.FirstRowNum;
    261 
    262             int cellCount = 0;
    263 
    264             for (int i = sheet.FirstRowNum; i <= sheet.LastRowNum; ++i)
    265             {
    266                 IRow row = sheet.GetRow(i) as IRow;
    267 
    268                 if (row != null && row.LastCellNum > cellCount)
    269                 {
    270                     cellCount = row.LastCellNum;
    271                 }
    272             }
    273 
    274             return cellCount;
    275         }
    276     }
    277 }
  • 相关阅读:
    《Python数据挖掘入门与实践》高清中文版PDF+英文版+源码下载
    discuz 论坛配置 QQ/163 网易邮箱
    Discuz! X3 去掉内容图片提示下载方法(去除图片提示下载附件)
    HTTPS的建立过程(SSL建立安全会话的过程)
    前端开发之走进Vue.js
    优雅统计代码耗时的4种方法!
    Maven配置多个远程仓库的实现方法
    idea maven 一直报错“Could not transfer artifact ......(系统找不到指定的路径。)”
    IntelliJ IDEA为类和方法自动添加注释
    maven “mvn clean package”和“mvn clean install”有什么不同?
  • 原文地址:https://www.cnblogs.com/plain-heart/p/3590122.html
Copyright © 2020-2023  润新知