外部读取Excel的两种方法
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的两种方法的更多相关文章
- ant中调用外部ant任务的两种方法
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 使用 EasyExcel 读取Excel(两种方式)
引入 jar 包 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel&l ...
- Springboot读取配置文件的两种方法
第一种: application.yml配置中的参数: zip: Hello Springboot 方法读取: @RestController public class ControllerTest ...
- table导出到excel的两种方法
1. 用table2excel 的js文件,这种方法没有IE兼容性 需要在文件中导入 <script type="text/javascript" src="< ...
- C#将DataTable数据导出到EXCEL的两种方法
1.在非服务器控件的页面导出数据,需要借助一张temp空页面post回后台的数据. 前台:window.location.href = "../Temp.aspx"; 后台: tr ...
- spring 读取properties的两种方法
一:直接使用context命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi= ...
- delphi 读取excel 两种方法
http://www.cnblogs.com/ywangzi/archive/2012/09/27/2705894.html 两种方法,一是用ADO连接,问题是Excel文件内容要规则,二是用OLE打 ...
- python excel操作单元格复制和读取的两种方法
操作单元格 新建一个sheet, 单元格赋值(两种方法) 单元格A1赋值为’xiaxiaoxu’ 单元格A2赋值为‘xufengchai’ 打印A1和A2单元格的值(两种方法) #coding=utf ...
- spring 配置文件 引入外部的property文件的两种方法
spring 的配置文件 引入外部的property文件的两种方法 <!-- 引入jdbc配置文件 方法一 --> <bean id="propertyConfig ...
随机推荐
- javac的访问者模式
这一篇重点来总结下javac的访问者模式,其定义的访问者接口为JCTree.Visitor,具体如下: /** A generic visitor class for trees. */ public ...
- Nginx 反向代理(http转htpps,并支持80端口继续提交post请求)
项目是一个web server + 多个client的形式,client由用户安装在自己的电脑上 由http升级为https后,我们通过在Nginx做了80端口重定向443的配置,使用户通过访问htt ...
- HDU 6187 Destroy Walls
Destroy Walls Long times ago, there are beautiful historic walls in the city. These walls divide the ...
- IntelliJ IDEA 转移 C盘.IntelliJIdea 索引目录
IntelliJ IDEA 索引目录默认路径是 C:\Users\用户\.IntelliJIdea 转移步骤 1. 将 C:\Users\用户\.IntelliJIdea 索引目录剪切到要移动到的 ...
- 学生信息管理系统(C语言版本)
这是我个人写的一个学生管理系统,这是我仅仅用来练手的代码,要知道链表可是你在面试过程中最大机率会考到的,我是陆续从单向链表入门,然后采用双向链表写的代码!如有BUG,请指正,让我们共同进步! 1 #i ...
- 【转】让Entity Framework不再私闯sys.databases
这里的“私闯sys.databases”是指Entity Framework默认发起的查询:SELECT Count(*) FROM sys.databases WHERE [name]=N'数据库名 ...
- 打乱数组——shuffle
在学习vue移动端音乐项目时,看到一个打乱数组函数,感觉很有意思就记录一下(意外发现:slice是个有趣的知识点) 原理:遍历数组,(let i = 0; i < _arr.length; i+ ...
- [译]用R语言做挖掘数据《四》
回归 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. ...
- Cheatsheet: 2018 01.01 ~ 02.28
JAVA How to Improve the Performance of a Java Application Java Memory Management Writing Java Micros ...
- memcached 细究(三)
今天研究ecshop的cls_mysql类库, 涉及到mysql 和memcache 的整合 category.php 商品属性帅选时使用memcache缓存 mysql public functio ...