zoukankan      html  css  js  c++  java
  • C#读写Excel学习笔记

    1.C#读写Excel的几种方法

    2.C#读写Excel-Microsoft.Office.Interop.Excel(前提是本机须安装office才能运行,且不同的office版本之间可能会有兼容问题,从Nuget下载 Microsoft.Office.Interop.Excel)

    3.NPOI方法(推荐、在不安装office的时候也是可以读写的,速度很快):

      1 using NPOI.HSSF.UserModel;
      2 using NPOI.XSSF.UserModel;
      3 using System;
      4 using System.Data;
      5 using System.IO;
      6 
      7 /// <summary>
      8 /// EXCEL操作类
      9 /// </summary>
     10 public class NPOIHelper
     11 {
     12     /// <summary>
     13     /// 读取指定路径的Excel文件到DataTable
     14     /// </summary>
     15     /// <param name="filePath"></param>
     16     /// <returns></returns>
     17     public static DataTable ReadExcel(string filePath)
     18     {
     19         NPOI.SS.UserModel.ISheet sheet;
     20         if (filePath.Contains(".xlsx"))  // 2007 xlsx
     21         {
     22             #region//初始化信息
     23             XSSFWorkbook hssfworkbook;
     24             try
     25             {
     26                 using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
     27                 {
     28                     hssfworkbook = new XSSFWorkbook(file);
     29                 }
     30             }
     31             catch (Exception e)
     32             {
     33                 throw e;
     34             }
     35             sheet = hssfworkbook.GetSheetAt(0);
     36             #endregion
     37             System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
     38             DataTable dt = new DataTable();
     39             for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)  // cell数
     40             {
     41                 dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());
     42             }
     43             while (rows.MoveNext())
     44             {
     45                 XSSFRow row = (XSSFRow)rows.Current;
     46                 DataRow dr = dt.NewRow();
     47                 for (int i = 0; i < row.LastCellNum; i++)
     48                 {
     49                     NPOI.SS.UserModel.ICell cell = row.GetCell(i);
     50                     if (cell == null)
     51                     {
     52                         dr[i] = null;
     53                     }
     54                     else
     55                     {
     56                         dr[i] = cell.ToString();
     57                     }
     58                 }
     59                 dt.Rows.Add(dr);
     60             }
     61             return dt;
     62         }
     63         else  // 2003 xls
     64         {
     65             HSSFWorkbook hssfworkbook;
     66             try
     67             {
     68                 using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
     69                 {
     70                     hssfworkbook = new HSSFWorkbook(file);
     71                 }
     72             }
     73             catch (Exception e)
     74             {
     75                 throw e;
     76             }
     77             sheet = hssfworkbook.GetSheetAt(0);
     78             System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
     79             DataTable dt = new DataTable();
     80             for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
     81             {
     82                 dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());
     83             }
     84             while (rows.MoveNext())
     85             {
     86                 HSSFRow row = (HSSFRow)rows.Current;
     87                 DataRow dr = dt.NewRow();
     88                 for (int i = 0; i < row.LastCellNum; i++)
     89                 {
     90                     NPOI.SS.UserModel.ICell cell = row.GetCell(i);
     91                     if (cell == null)
     92                     {
     93                         dr[i] = null;
     94                     }
     95                     else
     96                     {
     97                         dr[i] = cell.ToString();
     98                     }
     99                 }
    100                 dt.Rows.Add(dr);
    101             }
    102             return dt;
    103         }
    104     }
    105 
    106     /// <summary>
    107     /// 将DataTable数据写入到指定路径的Excel文件
    108     /// </summary>
    109     /// <param name="dt"></param>
    110     /// <param name="filePath"></param>
    111     public static void WriteExcel(DataTable dt, string filePath)
    112     {
    113         if (!string.IsNullOrEmpty(filePath) && null != dt && dt.Rows.Count > 0)
    114         {
    115             if (filePath.Contains(".xlsx"))  //  2007 xlsx
    116             {
    117                 XSSFWorkbook book = new XSSFWorkbook();
    118                 NPOI.SS.UserModel.ISheet sheet = book.CreateSheet(dt.TableName);
    119 
    120                 NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
    121                 for (int i = 0; i < dt.Columns.Count; i++)
    122                 {
    123                     row.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
    124                 }
    125                 for (int i = 0; i < dt.Rows.Count; i++)
    126                 {
    127                     NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(i + 1);
    128                     for (int j = 0; j < dt.Columns.Count; j++)
    129                     {
    130                         row2.CreateCell(j).SetCellValue(Convert.ToString(dt.Rows[i][j]));
    131                     }
    132                 }
    133                 // 写入到客户端  
    134                 using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
    135                 {
    136                     book.Write(ms);
    137                     using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
    138                     {
    139                         byte[] data = ms.ToArray();
    140                         fs.Write(data, 0, data.Length);
    141                         fs.Flush();
    142                     }
    143                     book = null;
    144                 }
    145             }
    146             else  // 2003 xls
    147             {
    148                 NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
    149                 NPOI.SS.UserModel.ISheet sheet = book.CreateSheet(dt.TableName);
    150 
    151                 NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
    152                 for (int i = 0; i < dt.Columns.Count; i++)
    153                 {
    154                     row.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
    155                 }
    156                 for (int i = 0; i < dt.Rows.Count; i++)
    157                 {
    158                     NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(i + 1);
    159                     for (int j = 0; j < dt.Columns.Count; j++)
    160                     {
    161                         row2.CreateCell(j).SetCellValue(Convert.ToString(dt.Rows[i][j]));
    162                     }
    163                 }
    164                 // 写入到客户端  
    165                 using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
    166                 {
    167                     book.Write(ms);
    168                     using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
    169                     {
    170                         byte[] data = ms.ToArray();
    171                         fs.Write(data, 0, data.Length);
    172                         fs.Flush();
    173                     }
    174                     book = null;
    175                 }
    176             }
    177         }
    178     }
    179 }

    附加:C# DataTable转化为自定义DataTable

    365个夜晚,我希望做到两天更一篇博客。加油,小白!
  • 相关阅读:
    React—ref 属性
    【支付宝SDK】沙箱调试,以及遇到的坑
    python 字符串相乘
    微信小程序授权获取手机号 出现-41003错误
    微信小程序 动态添加 view input picker
    PHP 获取当月的第一天和最后一天
    微信小程序 弹窗组件
    微信小程序 图片等比例 适应屏幕尺寸
    微信小程序图片预览
    div背景图占满
  • 原文地址:https://www.cnblogs.com/qq2806933146xiaobai/p/14191662.html
Copyright © 2011-2022 走看看