C#实现EXCEL表格转DataTable
C#代码实现把Excel文件转化为DataTable,根据Excel的文件后缀名不同,用不同的方法来进行实现,下面通过根据Excel文件的两种后缀名(*.xlsx和*.xls)分别来实现。获取文件后缀名的方法是:Path.GetExtension(fileName)方法,通过引用:using System.IO;实现代码如下:(其中以下代码中出现的filename都是带盘符的绝对路径)
根据Excel文件的后缀名不同调用的主方法
private DataTable FileToDataTable(string fileName)
{
DataTable dt = new DataTable();
string extendName = Path.GetExtension(fileName);//获取文件的后缀名
switch (extendName.ToLower())
{
case ".xls":
dt = XlsToDataTable(fileName);
break;
case ".xlsx":
dt = XlsxToDataTable(fileName);
break;
default:
break;
}
return dt;
}XlsToDataTable()
private DataTable XlsToDataTable(string fileName)
{
DataTable dataTable = new DataTable();
Stream stream = null;
try
{
stream = File.OpenRead(fileName);
HSSFWorkbook hssfworkbook = new HSSFWorkbook(stream);
HSSFSheet hssfsheet = (HSSFSheet)hssfworkbook.GetSheetAt(hssfworkbook.ActiveSheetIndex);
HSSFRow hssfrow = (HSSFRow)hssfsheet.GetRow();
int lastCellNum = (int)hssfrow.LastCellNum;
for (int i = (int)hssfrow.FirstCellNum; i < lastCellNum; i++)
{
DataColumn column = new DataColumn(hssfrow.GetCell(i).StringCellValue);
dataTable.Columns.Add(column);
}
dataTable.TableName = hssfsheet.SheetName;
int lastRowNum = hssfsheet.LastRowNum;
//列名后,从TABLE第二行开始进行填充数据
for (int i = hssfsheet.FirstRowNum + ; i < hssfsheet.LastRowNum; i++)//
{
HSSFRow hssfrow2 = (HSSFRow)hssfsheet.GetRow(i);
DataRow dataRow = dataTable.NewRow();
for (int j = (int)hssfrow2.FirstCellNum; j < lastCellNum; j++)//
{
dataRow[j] = hssfrow2.GetCell(j);//
}
dataTable.Rows.Add(dataRow);
}
stream.Close();
}
catch (Exception ex)
{
ScriptManager.RegisterStartupScript(Page, GetType(), "alertForm", "alert(' Xls to DataTable: " + ex.Message + "');", true);
}
finally
{
if (stream != null)
{
stream.Close();
}
}
return dataTable;
}- XlsxToDataTable()
public DataTable XlsxToDataTable(string vFilePath)
{
DataTable dataTable = new DataTable();
try
{
SLDocument sldocument = new SLDocument(vFilePath);
dataTable.TableName = sldocument.GetSheetNames()[];
SLWorksheetStatistics worksheetStatistics = sldocument.GetWorksheetStatistics();
int startColumnIndex = worksheetStatistics.StartColumnIndex;
int endColumnIndex = worksheetStatistics.EndColumnIndex;
int startRowIndex = worksheetStatistics.StartRowIndex;
int endRowIndex = worksheetStatistics.EndRowIndex;
for (int i = startColumnIndex; i <= endColumnIndex; i++)
{
SLRstType cellValueAsRstType = sldocument.GetCellValueAsRstType(, i);
dataTable.Columns.Add(new DataColumn(cellValueAsRstType.GetText(), typeof(string)));
}
for (int j = startRowIndex + ; j <= endRowIndex; j++)
{
DataRow dataRow = dataTable.NewRow();
for (int i = startColumnIndex; i <= endColumnIndex; i++)
{
dataRow[i - ] = sldocument.GetCellValueAsString(j, i);
}
dataTable.Rows.Add(dataRow);
}
}
catch (Exception ex)
{
throw new Exception("Xlsx to DataTable: \n" + ex.Message);
}
return dataTable;
}
C#实现EXCEL表格转DataTable的更多相关文章
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...
- DataTable数据与Excel表格的相互转换
using Excel = Microsoft.Office.Interop.Excel; private static Excel.Application m_xlApp = null; /// & ...
- C#读取Excel表格中数据并返回datatable
在软件开发的过程中,经常用到从excel表格中读取数据作为数据源,以下整理了一个有效的读取excel表格的方法. DataTable GetDataTable(string tableName,str ...
- 将Excel表格数据转换成Datatable
/// <summary> /// 将Excel表格数据转换成Datatable /// </summary> /// <param name="fileUrl ...
- .NET环境下导出Excel表格的两种方式和导入两种类型的Excel表格
一.导出Excel表格的两种方式,其中两种方式指的是导出XML数据类型的Excel(即保存的时候可以只需要修改扩展名为.xls)和真正的Excel这两种. using System; using Sy ...
- asp.net数据导出到excel表格,并设置表格样式
1.首先在项目中添加引用
- 【c#操作office】--OleDbDataAdapter 与OleDbDataReader方式读取excel,并转换为datatable
OleDbDataAdapter方式: /// <summary> /// 读取excel的表格放到DataTable中 ---OleDbDataAdapter /// </summ ...
- 用NPOI、C#操作Excel表格生成班级成绩单
在C#中利用NPOI操作Excel表格非常方便,几乎上支持所有的Excel表格本身所有的功能,如字体设置.颜色设置.单元格合并.数值计算.页眉页脚等等. 这里准备使用NPOI生成一个班级成绩单Exce ...
- C#程序从Excel表格中读取数据并进行处理
今天做了一个Excel表格数据处理的事情,因为数据量表较大(接近7000条)所以处理起来有点麻烦,于是写了一个程序, 先将程序记下以便将来查找. using System; using System. ...
随机推荐
- vector容器、
一. vector 向量容器1. 创建 vector 对象(1)不指定容器大小vector<int> V;(2)指定容器大小vector<int> V(10);(3) ...
- HDU 5974"A Simple Math Problem"(GCD(a,b) = GCD(a+b,ab) = 1)
传送门 •题意 已知 $a,b$,求满足 $x+y=a\ ,\ LCM(x,y)=b$ 条件的 $x,y$: 其中,$a,b$ 为正整数,$x,y$ 为整数: •题解 关键式子:设 $a,b$ 为正整 ...
- CodeForces 1204E"Natasha, Sasha and the Prefix Sums"(动态规划 or 组合数学--卡特兰数的应用)
传送门 •参考资料 [1]:CF1204E Natasha, Sasha and the Prefix Sums(动态规划+组合数) •题意 由 n 个 1 和 m 个 -1 组成的 $C_{n+m} ...
- 如何查看 Python 全部内置变量和内置函数?
https://jingyan.baidu.com/article/7082dc1c071649e40a89bdb8.html Python 解释器内置了一些常量和函数,叫做内置常量(Built-in ...
- P1053 第K小的取法
题目描述 给定一个含n个数的数组.现在从中取出一些数.并把这些数相加得出一个和,如果有多种取法的和相同,则视为多种取法.求所有取法对应的和中第K小的和. 输入格式 第一行包括两个正整数n(n<= ...
- LR性能测试自动化集成JENKINS
LR11不支持JENKINS集成,解决方案可以使用BAT代替执行,JENKINS定时调用BAT执行性能测试用例. 1. 先随便录制l一个LR脚本,保存为 D:\TEST\test01 2. 打开 ...
- 深入理解CSS盒模型(转)
转自:https://www.cnblogs.com/chengzp/p/cssbox.html 基本概念 盒模型的组成大家肯定都懂,由里向外content,padding,border,margin ...
- 【t066】致命的珠宝
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 门上有着N个宝珠,每个宝珠都有一个数字.Mini询问老者后,得知要想打开这扇门,就得找出两颗珠宝,使这 ...
- js实现new
function New(fn,...args){ let obj={} obj.__proto__=fn.prototype let result=fn.apply(obj,args) if(typ ...
- dotnet 获取用户设备安装了哪些 .NET Framework 框架
从注册表可以拿到当前用户安装的 .NET Framework 版本,本文告诉大家如何解析这些信息 在注册表的当前设备的 SOFTWARE\Microsoft\NET Framework Setup\N ...