1、使用Epplus读取

下载地址为https://epplus.codeplex.com/,下载文件后引用Epplus.dll文件。

这个类库读取Excel方便快捷,但是它只能读取.xlsx类型的文件,不支持.xls,具体代码如下:

 static void Main(string[] args)
{
//获取excel文件
var file = new FileInfo(@"D:\a.xlsx");
DataTable dt = null;
using (var package = new ExcelPackage(file))
{
//获取workbook
ExcelWorkbook workbook = package.Workbook;
if (workbook != null)
{
if (workbook.Worksheets.Count > )
{
//获取workbook的第一个worksheet
ExcelWorksheet worksheet = workbook.Worksheets.First();
//将worksheet转成datatable
dt = WorksheetToTable(worksheet);
}
}
} if (dt != null)
{
Console.WriteLine(dt.Rows.Count);
Console.WriteLine(dt.Columns.Count);
}
Console.ReadLine();
} /// <summary>
/// 将worksheet转成datatable
/// </summary>
/// <param name="worksheet">待处理的worksheet</param>
/// <returns>返回处理后的datatable</returns>
private static DataTable WorksheetToTable(ExcelWorksheet worksheet)
{
//获取worksheet的行数
int rows = worksheet.Dimension.End.Row;
//获取worksheet的列数
int cols = worksheet.Dimension.End.Column; DataTable dt = new DataTable(worksheet.Name);
DataRow dr = null;
for (int i = ; i <= rows; i++)
{
if (i > )
{
dr = dt.Rows.Add();
} for (int j = ; j <= cols; j++)
{
//默认将第一行设置为datatable的标题
if (i == )
{
dt.Columns.Add(worksheet.Cells[i, j].Value.ToString());
}
//剩下的写入datatable
else
{
dr[j - ] = worksheet.Cells[i, j].Value.ToString();
}
}
}
return dt;
}

2、使用NPOI读取

下载地址为https://github.com/tonyqus/npoi,下载文件后引用

这个可以读取.xlsx文件,也能读取.xls文件,具体代码如下:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.Data;
using System.IO; namespace NpoiReadExcel
{
class ExceHelper
{
public static DataTable ExcelToTable(string fileName)
{
DataTable dt = new DataTable(); //将文件转换成stream
using (FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate))
{
//根据不同版本创建不同的workbook
IWorkbook workbook;
if (fileName.Contains(".xlsx"))
{
//针对07及以上(.xlsx文件)
workbook = new XSSFWorkbook(fileStream);
}
else
{
//针对03(.xls文件)
workbook = new HSSFWorkbook(fileStream);
} //获取第一个sheet
ISheet sheet = workbook.GetSheetAt();
//获取sheet的第一行
IRow firstRow = sheet.GetRow();
//获取sheet的列数
int cellCount = firstRow.LastCellNum;
//第一行作为标题加到datatable中
for (int i = firstRow.FirstCellNum; i < cellCount; i++)
{
DataColumn column = new DataColumn(firstRow.GetCell(i).StringCellValue);
dt.Columns.Add(column);
} //sheet的行数(这里获取的行数是去除首行的行数)
int rowCount = sheet.LastRowNum;
for (int i = (sheet.FirstRowNum + ); i <= rowCount; i++)
{
//获取sheet的行数据
IRow row = sheet.GetRow(i);
//因为没有数据的行默认是null,去除空数据
if (row == null)
{
continue;
} DataRow dataRow = dt.NewRow();
for (int j = row.FirstCellNum; j < cellCount; j++)
{
//没有数据的单元格默认是null,去除
if (row.GetCell(j) != null)
{
dataRow[j] = row.GetCell(j).ToString();
}
}
dt.Rows.Add(dataRow);
}
}
return dt;
}
}
}

外部读取Excel的两种方法的更多相关文章

  1. ant中调用外部ant任务的两种方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  2. 使用 EasyExcel 读取Excel(两种方式)

    引入 jar 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...

  3. Springboot读取配置文件的两种方法

    第一种: application.yml配置中的参数: zip: Hello Springboot 方法读取: @RestController public class ControllerTest ...

  4. table导出到excel的两种方法

    1. 用table2excel 的js文件,这种方法没有IE兼容性 需要在文件中导入 <script type="text/javascript" src="< ...

  5. C#将DataTable数据导出到EXCEL的两种方法

    1.在非服务器控件的页面导出数据,需要借助一张temp空页面post回后台的数据. 前台:window.location.href = "../Temp.aspx"; 后台: tr ...

  6. spring 读取properties的两种方法

    一:直接使用context命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi= ...

  7. delphi 读取excel 两种方法

    http://www.cnblogs.com/ywangzi/archive/2012/09/27/2705894.html 两种方法,一是用ADO连接,问题是Excel文件内容要规则,二是用OLE打 ...

  8. python excel操作单元格复制和读取的两种方法

    操作单元格 新建一个sheet, 单元格赋值(两种方法) 单元格A1赋值为’xiaxiaoxu’ 单元格A2赋值为‘xufengchai’ 打印A1和A2单元格的值(两种方法) #coding=utf ...

  9. spring 配置文件 引入外部的property文件的两种方法

    spring  的配置文件 引入外部的property文件的两种方法 <!-- 引入jdbc配置文件    方法一 --> <bean id="propertyConfig ...

随机推荐

  1. javac的访问者模式

    这一篇重点来总结下javac的访问者模式,其定义的访问者接口为JCTree.Visitor,具体如下: /** A generic visitor class for trees. */ public ...

  2. Nginx 反向代理(http转htpps,并支持80端口继续提交post请求)

    项目是一个web server + 多个client的形式,client由用户安装在自己的电脑上 由http升级为https后,我们通过在Nginx做了80端口重定向443的配置,使用户通过访问htt ...

  3. HDU 6187 Destroy Walls

    Destroy Walls Long times ago, there are beautiful historic walls in the city. These walls divide the ...

  4. IntelliJ IDEA 转移 C盘.IntelliJIdea 索引目录

    IntelliJ IDEA 索引目录默认路径是  C:\Users\用户\.IntelliJIdea 转移步骤 1. 将  C:\Users\用户\.IntelliJIdea 索引目录剪切到要移动到的 ...

  5. 学生信息管理系统(C语言版本)

    这是我个人写的一个学生管理系统,这是我仅仅用来练手的代码,要知道链表可是你在面试过程中最大机率会考到的,我是陆续从单向链表入门,然后采用双向链表写的代码!如有BUG,请指正,让我们共同进步! 1 #i ...

  6. 【转】让Entity Framework不再私闯sys.databases

    这里的“私闯sys.databases”是指Entity Framework默认发起的查询:SELECT Count(*) FROM sys.databases WHERE [name]=N'数据库名 ...

  7. 打乱数组——shuffle

    在学习vue移动端音乐项目时,看到一个打乱数组函数,感觉很有意思就记录一下(意外发现:slice是个有趣的知识点) 原理:遍历数组,(let i = 0; i < _arr.length; i+ ...

  8. [译]用R语言做挖掘数据《四》

    回归 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. ...

  9. Cheatsheet: 2018 01.01 ~ 02.28

    JAVA How to Improve the Performance of a Java Application Java Memory Management Writing Java Micros ...

  10. memcached 细究(三)

    今天研究ecshop的cls_mysql类库, 涉及到mysql 和memcache 的整合 category.php 商品属性帅选时使用memcache缓存 mysql public functio ...