zoukankan      html  css  js  c++  java
  • NPOI

    通过Nuget安装NPOI类库

      1   public class ExcelOperator
      2     {
      3         /// <summary>
      4         /// Init Workbook
      5         /// </summary>
      6         /// <param name="path">excel file path</param>
      7         /// <returns></returns>
      8         private IWorkbook InitializeWorkbook(string path)
      9         {
     10             string extension = Path.GetExtension(path);
     11             if (string.IsNullOrEmpty(extension) ||
     12                 (
     13                  !".xlsx".Equals(extension.ToLower()) &&
     14                  !".xls".Equals(extension.ToLower())
     15                 )
     16                )
     17             {
     18                 throw new InvalidOperationException("this is not a excel file");
     19             }
     20 
     21             IWorkbook workbook;
     22 
     23             if (".xlsx".Equals(extension.ToLower()))
     24             {
     25                 workbook = new XSSFWorkbook();
     26             }
     27             else
     28             {
     29                 workbook = new HSSFWorkbook();
     30             }
     31 
     32             return workbook;
     33         }
     34 
     35         /// <summary>
     36         /// Init Workbook
     37         /// </summary>
     38         /// <param name="path">excel file path</param>
     39         /// <param name="fileStream"></param>
     40         /// <returns></returns>
     41         private IWorkbook InitializeWorkbook(string path, out FileStream fileStream)
     42         {
     43             string extension = Path.GetExtension(path);
     44             if (string.IsNullOrEmpty(extension) ||
     45                 (
     46                  !".xlsx".Equals(extension.ToLower()) &&
     47                  !".xls".Equals(extension.ToLower())
     48                 )
     49                )
     50             {
     51                 throw new InvalidOperationException("this is not a excel file");
     52             }
     53 
     54             IWorkbook workbook;
     55             fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite);
     56 
     57             if (".xlsx".Equals(extension.ToLower()))
     58             {
     59                 workbook = new XSSFWorkbook(fileStream);
     60             }
     61             else
     62             {
     63                 workbook = new HSSFWorkbook(fileStream);
     64             }
     65 
     66             return workbook;
     67         }
     68 
     69         /// <summary>
     70         /// 将excel中的数据导入到DataTable中
     71         /// </summary>
     72         /// <param name="path">excel路径</param>
     73         /// <param name="sheetName">excel工作薄sheet的名称</param>
     74         /// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param>
     75         /// <returns>返回的DataTable</returns>
     76         public DataTable ExcelToDataTable(string path, string sheetName, bool isFirstRowColumn)
     77         {
     78             FileStream fileStream = null;
     79 
     80             try
     81             {
     82                 DataTable data = new DataTable();
     83 
     84                 IWorkbook workbook = InitializeWorkbook(path, out fileStream);
     85 
     86                 //如果不指定sheet,则获取第一个sheet
     87                 ISheet sheet = sheetName != null ? workbook.GetSheet(sheetName) : workbook.GetSheetAt(0);
     88 
     89                 //check sheet是否存在
     90                 if (sheet == null)
     91                 {
     92                     throw new InvalidOperationException("Sheet does not exist");
     93                 }
     94 
     95                 IRow firstRow = sheet.GetRow(0);
     96                 int firstCellNum = firstRow.FirstCellNum;
     97                 int lastCellNum = firstRow.LastCellNum;
     98 
     99                 int startRow = 0;
    100                 if (isFirstRowColumn)
    101                 {
    102                     //添加列
    103                     for (int i = firstCellNum; i < lastCellNum; i++)
    104                     {
    105                         ICell cell = firstRow.GetCell(i);
    106                         if (cell != null)
    107                         {
    108                             string cellValue = cell.StringCellValue;
    109                             if (cellValue != null)
    110                             {
    111                                 var column = new DataColumn(cellValue);
    112                                 data.Columns.Add(column);
    113                             }
    114                         }
    115                     }
    116                     startRow = sheet.FirstRowNum + 1;
    117                 }
    118                 else
    119                 {
    120                     startRow = sheet.FirstRowNum;
    121                 }
    122 
    123                 //最后一列的标号
    124                 int rowCount = sheet.LastRowNum;
    125                 for (int i = startRow; i <= rowCount; i++)
    126                 {
    127                     IRow row = sheet.GetRow(i);
    128                     if (row == null) continue;
    129 
    130                     DataRow dataRow = data.NewRow();
    131                     for (int j = firstCellNum; j < lastCellNum; j++)
    132                     {
    133                         if (row.GetCell(j) != null)
    134                             dataRow[j] = row.GetCell(j).ToString();
    135                     }
    136                     data.Rows.Add(dataRow);
    137                 }
    138 
    139                 return data;
    140             }
    141             catch (Exception)
    142             {
    143                 throw;
    144             }
    145             finally
    146             {
    147                 if (fileStream != null) fileStream.Close();
    148             }
    149         }
    150 
    151         /// <summary>
    152         /// 将DataTable数据导入到excel中
    153         /// </summary>
    154         /// <param name="data">要导入的数据</param>
    155         /// <param name="sheetName">要导入的excel的sheet的名称</param>
    156         /// <param name="isColumnWritten">DataTable的列名是否要导入</param>
    157         /// <param name="path">要导入数据的excel路径</param>
    158         /// <returns>导入数据行数(包含列名那一行)</returns>
    159         public int DataTableToExcel(DataTable data, string sheetName, bool isColumnWritten, string path)
    160         {
    161             int count;
    162 
    163             IWorkbook workbook = InitializeWorkbook(path);
    164 
    165             if (string.IsNullOrEmpty(sheetName))
    166             {
    167                 sheetName = "Sheet1";
    168             }
    169 
    170             ISheet sheet = workbook.CreateSheet(sheetName);
    171             //写入DataTable的列名
    172             if (isColumnWritten)
    173             {
    174                 IRow row = sheet.CreateRow(0);
    175                 for (int j = 0; j < data.Columns.Count; ++j)
    176                 {
    177                     row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName);
    178                 }
    179                 count = 1;
    180             }
    181             else
    182             {
    183                 count = 0;
    184             }
    185 
    186             //写入行数据
    187             for (int i = 0; i < data.Rows.Count; ++i)
    188             {
    189                 IRow row = sheet.CreateRow(count);
    190                 for (int j = 0; j < data.Columns.Count; ++j)
    191                 {
    192                     row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString());
    193                 }
    194                 count++;
    195             }
    196 
    197             using (var fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
    198             {
    199                 workbook.Write(fileStream);
    200             }
    201 
    202             return count;
    203         }
    204 
    205     }
  • 相关阅读:
    Bye sent_keys
    快速获取Jenkins上build
    快速搞定selenium grid分布式
    python 图形界面开发
    [分享] 自动化测试与持续集成方案-- UI 检查
    hua ge ju hao
    暴力 C++
    简单排序(java)
    记codeforces两题
    hdu 1874, dijkstra
  • 原文地址:https://www.cnblogs.com/JustYong/p/4432715.html
Copyright © 2011-2022 走看看