上次工作遇到oledb导入Excel 客户环境不支持,用过一个博客的文档,使用起来很方便推荐分享,原文 点击打开链接
/// <summary>
    /// Excel的辅助类
    /// </summary>
    public class ExcelHelper
    {
        /// <summary>
        /// 读取excel到datatable中
        /// </summary>
        /// <param name="excelPath">excel地址</param>
        /// <param name="sheetIndex">sheet索引</param>
        /// <returns>成功返回datatable,失败返回null</returns>
        public static DataTable ImportExcel(string excelPath, int sheetIndex)
        {

IWorkbook workbook = null;//全局workbook
            ISheet sheet;//sheet
            DataTable table = null;
            try
            {
                FileInfo fileInfo = new FileInfo(excelPath);//判断文件是否存在
                if (fileInfo.Exists)
                {
                    FileStream fileStream = fileInfo.OpenRead();//打开文件,得到文件流
                    switch (fileInfo.Extension)
                    {
                        //xls是03,用HSSFWorkbook打开,.xlsx是07或者10用XSSFWorkbook打开
                        case ".xls": workbook = new HSSFWorkbook(fileStream); break;
                        case ".xlsx": workbook = new XSSFWorkbook(fileStream); break;
                        default: break;
                    }
                    fileStream.Close();//关闭文件流
                }
                if (workbook != null)
                {
                    sheet = workbook.GetSheetAt(sheetIndex);//读取到指定的sheet
                    table = new DataTable();//初始化一个table

IRow headerRow = sheet.GetRow(0);//获取第一行,一般为表头
                    int cellCount = headerRow.LastCellNum;//得到列数

for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                    {
                        DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);//初始化table的列
                        table.Columns.Add(column);
                    }
                    //遍历读取cell
                    for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
                    {
                        NPOI.SS.UserModel.IRow row = sheet.GetRow(i);//得到一行
                        DataRow dataRow = table.NewRow();//新建一个行

for (int j = row.FirstCellNum; j < cellCount; j++)
                        {
                            ICell cell = row.GetCell(j);//得到cell
                            if (cell == null)//如果cell为null,则赋值为空
                            {
                                dataRow[j] = "";
                            }
                            else
                            {
                                dataRow[j] = row.GetCell(j).ToString();//否则赋值
                            }
                        }

table.Rows.Add(dataRow);//把行 加入到table中

}
                }
                return table;

}
            catch (Exception e)
            {
                return table;
            }
            finally
            {
                //释放资源
                if (table != null) { table.Dispose(); }
                workbook = null;
                sheet = null;
            }
        }

}

添加引用如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Collections;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;

后来改动了下成全索引表格导入,不过表头这个问题,没有细致处理,从第一个表之后,后面的表头会一并导入 不怎么用 有网友需要可以自行改动

/// <summary>
    /// Excel的辅助类
    /// </summary>
    public class ExcelHelper
    {
        /// <summary>
        /// 读取excel到datatable中
        /// </summary>
        /// <param name="excelPath">excel地址</param>
        /// <param name="sheetIndex">sheet索引</param>
        /// <returns>成功返回datatable,失败返回null</returns>
        public static DataTable ImportExcel(string excelPath, int sheetIndex)
        {
           
            
            IWorkbook workbook = null;//全局workbook
            ISheet sheet;//sheet
            DataTable table = null;
            try
            {
                FileInfo fileInfo = new FileInfo(excelPath);//判断文件是否存在
                if (fileInfo.Exists)
                {
                    FileStream fileStream = fileInfo.OpenRead();//打开文件,得到文件流
                    switch (fileInfo.Extension)
                    {
                        //xls是03,用HSSFWorkbook打开,.xlsx是07或者10用XSSFWorkbook打开
                        case ".xls": workbook = new HSSFWorkbook(fileStream); break;
                        case ".xlsx": workbook = new XSSFWorkbook(fileStream); break;
                        default: break;
                    }
                    fileStream.Close();//关闭文件流
                }
                if (workbook != null)
                {
                    table = new DataTable();//初始化一个table

sheetIndex = workbook.NumberOfSheets;//MX2017-05-02 11:01:39
                    for (int k = 0; k < sheetIndex; k++)
                    {
                        if (k!=0)
                        {
                           // table = null;

sheet = null;
                           
                        }
                        sheet = workbook.GetSheetAt(k);//读取到指定的sheet

IRow headerRow ;
                            if (k==0)
                            {
                                headerRow = sheet.GetRow(0);//获取第一行,一般为表头
                            }
                            else
                            {
                                headerRow = sheet.GetRow(1);
                            }

int cellCount = headerRow.LastCellNum;//得到列数

if (k==0)
                        {
                            for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                            {
                                DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);//初始化table的列
                                table.Columns.Add(column);
                            }
                        }

else
                        {
                            for (int i = headerRow.FirstCellNum; i < cellCount; i++)

{
                               // DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue);//初始化table的列
                            //    table.Columns.Add(column);
                            }
                        }
                        
                        //遍历读取cell
                        for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
                        {
                            NPOI.SS.UserModel.IRow row = sheet.GetRow(i);//得到一行
                            DataRow dataRow = table.NewRow();//新建一个行

for (int j = row.FirstCellNum; j < cellCount; j++)
                            {
                                ICell cell = row.GetCell(j);//得到cell
                                if (cell == null)//如果cell为null,则赋值为空
                                {
                                    dataRow[j] = "";
                                }
                                else
                                {
                                    dataRow[j] = row.GetCell(j).ToString();//否则赋值
                                }
                            }

table.Rows.Add(dataRow);//把行 加入到table中

}
                    }
               
                }
                return table;

}
            catch (Exception e)
            {
                return table;
            }
            finally
            {
                //释放资源
                if (table != null) { table.Dispose(); }
                workbook = null;
                sheet = null;
            }
        }

}

C# NOPI读取Excel相关推荐

  1. Unity中利用NOPI读取Excel

    Unity中利用NOPI读取Excel ---0v0--- 前言 ---0_0--- NPOI的相关.dll网盘下载链接 一.解析Excel的类 二.测试代码 -0v0- 前言 最近工作遇到解析.xl ...

  2. NOPI读取Excel

    NOPI读取Excel string filePath = "C:/Users/29939/Desktop/当前项目文件/图像资源/test/Result/result_2021072716 ...

  3. NOPI 读取EXCEL数据时报错“未将对象引用设置到对象的实例”的变相解决方案

    row = sheet1.GetRow(i); ICell cell1 = row.GetCell(1); ICell cell2 = row.GetCell(1); ICell cell6 = ro ...

  4. 当前主流读取Excel技术对比

    笔者主要在一家金融公司从事开发工作,需要长期与数据打交道,因此,经常逃不掉关于Excel的操作.在此,笔者想对比下当前主流的读取Excel的技术.笔者认为当前比较主流的读取Excel技术包括COM组件 ...

  5. C#读取excel文件时,报“外部表不是预期的格式”

    记录 读取Excel文件时报错 比较全面的问题汇总:转自https://blog.csdn.net/question00/article/details/51445663 最后发现我的excel文件的 ...

  6. NOPI操作Excel

    //自定义颜色 ,将颜色转换成NOPI的颜色 private static short GetXLColour(HSSFWorkbook workbook, System.Drawing.Color ...

  7. Python xlrd 读取excel表格 常用用法整理

    xlrd 的使用 #!/usr/bin/python# # -*- coding: utf-8 -*- import xlrd import sys reload(sys) sys.setdefaul ...

  8. python 读取excel 内的中文显示为unicode 编码

    测试的excel 显示如下 读取excel 打印的效果如下 现在想显示为中文 处理代码如下 #!/usr/bin/python# # -*- coding: utf-8 -*- import xlrd ...

  9. php把excel变成数组,PHP excel读取excel文件转换为数组

    /* 备注:先去下载PHP EXCEL--http://download-codeplex.sec.s-msft.com/Download/Release?ProjectName=phpexcel&a ...

  10. php生成表格和读取,phpexcelreader读取excel自动生成表跟字段

    phpexcelreader读取excel自动生成表和字段 这个主要是采用phpexcelreader的功能实现,根据excel的文件名和excel第一行生成表名及字段,数据从第二行开始依次导入. p ...

最新文章

  1. android activity之间传值
  2. python中文字符编码问题
  3. arduino串口监视器显示nan_Arduino小白的学习记录:双色LED灯实验
  4. setdefault_Java语言环境setDefault()方法及示例
  5. JAVA判定参数类型进行赋值_java – 为什么泛型方法在赋值中更改了参数化类型?...
  6. c罗图片带字经典语言,c罗与马塞洛表情包带字
  7. ZOJ-2008-Invitation Cards(dijkstra)
  8. 数据库的基本概念(三大范式,数据)
  9. python面试必考知识点_python编程面试中必考的知识点,数据类型全解,笔记超全面...
  10. 多尺度:传统高斯金字塔,拉普拉斯金字塔及SIFT算法多尺度金字塔
  11. android qq输入法表情,QQ输入法-问题反馈
  12. android投屏到电脑
  13. ICM-20602 IMU ACCEL/GYRO/TEMP I2C/SPI LGA
  14. python中什么是继承_Python中的继承是什么意思?
  15. Google mediapipe 人脸识别应用
  16. Matlab 棋盘制作
  17. 张朝阳对话俞敏洪:谈宇宙、谈焦虑、谈创业、谈退休、谈人生
  18. 聊一聊为什么在浏览器输入http://localhos8080会出现tomcat后台服务器的界面
  19. 时间格式转换,转时间戳,转UTC,转中国标准时间
  20. 基于STM32将E18-D80NK和舵机一起联动

热门文章

  1. jeb安装教程_《教我兄弟学Android逆向番外02 jeb工具的使用》
  2. DEA_Malmquist指数模型学习笔记
  3. Java项目:SSM校园共享自行车出租管理系统
  4. 【测试报告】模板:迭代测试报告
  5. 牛逼,我的单片机固件被人破解了
  6. STC单片机 Keil4安装, 第一个程序
  7. 如何通过企业微信做精细化社群运营
  8. 光环PMP 常考流程
  9. 调试和运行matlab代码(源程序)的技巧和教程
  10. win8/10 bcdboot引导修复命令的原理和使用方法