C# Excel 读取为Datatable
最近项目用到的读取Excel 为DataTable 兼容2003、2007、2010。记录一下,以后会用到
引用 NPOI.dll 和 EPPlus.dll
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using OfficeOpenXml;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.HSSF.Util;
using NPOI.HSSF.UserModel; public class ExcelUtil
{
/// <summary>
/// Excel 转 DataTable 约定 Excel第一行为列名,即为转换后的Datatable中的DataColumn列
/// </summary>
/// <param name="file">Excel文件路径</param>
/// <param name="sheet">sheet名称</param>
/// <returns></returns>
public static DataTable ExcelSheet2DataTable(string file, string sheet)
{
DataTable dt = null;
FileInfo existingFile = new FileInfo(file);
try
{
ExcelPackage package = new ExcelPackage(existingFile);
int vSheetCount = package.Workbook.Worksheets.Count; //获取总Sheet页 ExcelWorksheet worksheet = package.Workbook.Worksheets[sheet];//选定 指定页 int maxColumnNum = worksheet.Dimension.End.Column;//最大列
int minColumnNum = worksheet.Dimension.Start.Column;//最小列 int maxRowNum = worksheet.Dimension.End.Row;//最小行
int minRowNum = worksheet.Dimension.Start.Row;//最大行 DataTable vTable = new DataTable();
DataColumn vC;
for (int j = ; j <= maxColumnNum; j++)
{
string colname = worksheet.Cells[, j].Text;
if (vTable.Columns.Contains(colname))
{
colname += "";//对于可能的重名列的处理
}
vC = new DataColumn(colname, typeof(string)); vTable.Columns.Add(vC);
} for (int n = ; n <= maxRowNum; n++)
{
DataRow vRow = vTable.NewRow();
for (int m = ; m <= maxColumnNum; m++)
{
vRow[m - ] = worksheet.Cells[n, m].Value;
}
vTable.Rows.Add(vRow);
}
dt = vTable;
worksheet = null;
sheet = null;
}
catch (Exception vErr)
{
try
{
using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
{
using (HSSFWorkbook workbook = new HSSFWorkbook(fs)) //根据EXCEL文件流初始化工作簿
{
//var sheet1 = workbook.GetSheetAt(0); //获取第一个sheet
var sheet1 = workbook.GetSheet(sheet); //获取sheet
DataTable table = new DataTable();//
var row1 = sheet1.GetRow();//获取第一行即标头 int cellCount = row1.LastCellNum; //第一行的列数
int rowCount = sheet1.LastRowNum; //总行数 //把第一行的数据添加到datatable的列名
for (int i = row1.FirstCellNum; i < cellCount; i++)
{
string colname = string.Empty;
if (row1.GetCell(i).CellType == NPOI.SS.UserModel.CellType.STRING)
{
colname = row1.GetCell(i).StringCellValue;
}
else
{
colname = row1.GetCell(i).ToString();
}
if (table.Columns.Contains(colname))
{
colname += "";
}
DataColumn column = new DataColumn(colname);
table.Columns.Add(column);
}
//把每行数据添加到datatable中
for (int i = (sheet1.FirstRowNum + ); i < sheet1.LastRowNum; i++)
{
HSSFRow row = sheet1.GetRow(i) as HSSFRow;
DataRow dataRow = table.NewRow(); for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
dataRow[j] = row.GetCell(j).ToString();
} table.Rows.Add(dataRow);
}
dt = table;
}
}
}
catch
{ }
}
return dt;
}
}
C# Excel 读取为Datatable的更多相关文章
- excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)
将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...
- Excel日期格式单元格写成yyyy.MM.dd格式将无法读取到DataTable
最近在改公司的订单系统,遇到了一个奇怪的问题.C#程序需要从Excel文件中将数据全部读取到DataTable,其中Excel文件的第一列是日期格式yyyy/MM/dd,而这一列中大部分的单元格都是按 ...
- 使用OpenXML将Excel内容读取到DataTable中
前言:前面的几篇文章简单的介绍了如何使用OpenXML创建Excel文档.由于在平时的工作中需要经常使用到Excel的读写操作,简单的介绍下使用 OpenXML读取Excel中得数据.当然使用Open ...
- .NET小笔记-NPOI读取excel内容到DataTable
下载比较新的NPOI组件支持excel2007以上的,把.dll添加引用 引入命名空间 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using ...
- 怎么使用Aspose.Cells读取excel 转化为Datatable
说明:vs2012 asp.net mvc4 c# 使用Aspose.Cells 读取Excel 转化为Datatable 1.HTML前端代码 <%@ Page Language=" ...
- 读取Excel数据到DataTable
读取Excel数据到DataTable 代码 /// <summary> /// 获取指定路径.指定工作簿名称的Excel数据:取第一个sheet的数据 /// </summary& ...
- C#导入Excel|读取Excel方法
OleDbConnection读取 /// <summary> /// 返回Excel数据源 /// </summary> /// < ...
- C#连接Excel读取与写入数据库SQL ( 上 )
第一次写C#与sql的东西,主要任务是从Excel读取数据,再存到SQL server中. 先上读取Excel文件的code如下. public bool GetFiles(string equipN ...
- java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)
使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...
随机推荐
- CentOS6.5 PHP基础环境搭建 [个人整理-亲测可用]
** * CentOS6.5 搭建基础PHP环境(yum安装) * http://www.aiplaypc.com/160.html ** #安装需要的包,有依赖关系,自动帮你解决 yum ins ...
- [BZOJ3561] DZY Loves Math VI
(14.10.28改) 本来只想写BZOJ3739:DZY Loves Math VIII的,不过因为和VI有关系,而且也没别人写过VI的题解,那么写下. 不过我还不会插公式…… http://www ...
- mysql与java数据类型对应关系
- Typecho中文验证码Captcha插件
前言实在是受不了每天都要删除掉上百条的垃圾评论,干脆自己做了个验证码插件,顺带做的完善了些,分享给大家. 本插件是在评论验证码插件基础上完善而来.所不同的是,采用了最新的securimage 3.0. ...
- Python新手学习基础之条件语句——if/else语句
if/else语句 条件语句实际在前面的文章里我们已经使用过几次了,在这里我们需要再次隆重的来介绍一下它,条件语句是通过对一条或多条语句判断的返回结果(True或False)来选择执行下一步命令的,比 ...
- C程序设计语言练习题1-7
练习1-7 编写一个打印EOF的值的程序. #include <stdio.h> // 包含标准库的信息. int main() // 定义名为main的函数,它不接受参数值. { // ...
- Linux平台Makefile文件的编写基础篇(转)
目的: 基本掌握了 make 的用法,能在Linux系统上编程.环境: Linux系统,或者有一台Linux服务器,通过终端连接.一句话:有Linux编译环境.准备: ...
- hdu2460-Network:边的双连通分量
题目大意:给出一个无向图以及Q次询问,每次询问增加一条无向边,要求输出增加这条边后剩余的桥的数目. 算法:类似于求割点的方法,先做一次dfs求出所有的桥,并且维护这棵dfs树,当一次询问加入一条边(a ...
- HDU 4274 Spy's Work (树 DFS)
给定N个点,每个点都有一个唯一的前驱结点(点1为大boss),每个点的实际权值是子节点的求和值.现在给出某些点的权值的估算(> , = , < ),问这些估算是否会有冲突,现在保证每个点的 ...
- shell输出加颜色
shell输出加颜色 #cat a.sh #!/bin/sh blue=`tput setaf 4` reset=`tput sgr0` echo "${blue}[INFORMATION] ...