zoukankan      html  css  js  c++  java
  • 使用NPOI导出,读取EXCEL(可追加功能)

    使用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         /// <summary>
     16         /// 将DataTable数据导入到excel中
     17         /// </summary>
     18         /// <param name="fileName">文件名</param>
     19         /// <param name="data">要导入的数据</param>
     20         /// <param name="sheetName">要导入的excel的sheet的名称</param>
     21         /// <param name="blnAppled">是否是追加模式</param>
     22         /// <param name="isColumnWritten">DataTable的列名是否要导入</param>
     23         /// <returns>导入数据行数(包含列名那一行)</returns>
     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         /// <summary>
    110         /// 将excel中的数据导入到DataTable中
    111         /// </summary>
    112         /// <param name="sheetName">excel工作薄sheet的名称</param>
    113         /// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param>
    114         /// <returns>返回的DataTable</returns>
    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             try
    122             {
    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,则尝试获取第一个sheet
    133                     {
    134                         sheet = workbook.GetSheetAt(0);
    135                     }
    136                 }
    137                 else
    138                 {
    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                     else
    164                     {
    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) //同理,没有数据的单元格都默认是null
    179                                 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 }
    View Code

    看测试

     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 Program
    11     {
    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 }
    View Code

    看结果

  • 相关阅读:
    uva 550
    uva 10110
    uva 10014
    uva 10177
    uva 846
    Dear Project Manager, I Hate You
    创业型软件公司的心得
    架构设计的心得
    程序员常去的103个网站
    66个经典源码网站
  • 原文地址:https://www.cnblogs.com/bfyx/p/5995820.html
Copyright © 2011-2022 走看看