外部读取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 ...
随机推荐
- 16.Generator函数的语法
1.简介 Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同. 执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机 ...
- eclipse自定义代码注释
效果如下: 自定义注释的方法:
- C#(winform)设置窗体的启动位置
只需要设置窗体的StartPosition属性: registerForm.StartPosition = FormStartPosition.CenterScreen; FormStartPosit ...
- springboot整合mybatis分页插件PageHelper
1 pom文件引入依赖 (注意:pagehelper版本不能太高,楼主之前用的5.0以上的版本,然后分页没有效果,浪费了两个小时才发现这个原因) <!-- mybatis的分页插件 --> ...
- @Scheduled执行定时任务与cron表达式
1 配置文件形式执行定时任务 1 1.X 版本与spring结合使用实例 1.1 常用maven管理 pom.xml文件 <project xmlns="http://maven.ap ...
- c之指针与数组(2)Dynamic Data Structures: Malloc and Free--转载
http://www.howstuffworks.com/c29.htm http://computer.howstuffworks.com/c.htm Dynamic Data Structures ...
- (三)JNI常用示例
针对我之前文章的练习:JNI方法总结 1. 字符串 JAVA层: test.testString("HELLOWORLD"); JNI层: JNIEXPORT jstring JN ...
- C#、OC递归锁
做ios也有1年了,C#的东西有些都忘记了,最近几天也打算重温一下,不能学了ios把C#给抛弃了,两者都要抓,一精多专.目前C#只是重温,重点是web这块.今天主要是想起了之前做过的面试题,虽然题比较 ...
- 第4章 scrapy爬取知名技术文章网站(2)
4-8~9 编写spider爬取jobbole的所有文章 # -*- coding: utf-8 -*- import re import scrapy import datetime from sc ...
- java:模拟队列操作
import java.util.LinkedList; public class Myqueue { private LinkedList<Object> linkedList; pub ...