C# 读取Excel和DBF文件
//获excel中多个sheet中的数据 /// <summary>
/// 读取导入Excel文件内容
/// </summary>
/// <param name="fileName">文件路径(上传后)</param>
/// <param name="columnString">Excel中的列 名</param>
/// <param name="isReadAllExcelSheet">是否读取多个Sheet</param>
/// <param name="message">(out)消息提示</param>
/// <returns></returns>
public DataTable ReadDataFromExcel(string fileName, string columnString, bool isReadAllExcelSheet, out string message)
{
message = "";
try
{
string strCon = ""; string fileExt = Path.GetExtension(fileName).ToLower(); if (fileExt == ".xls")
{
strCon = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + fileName + ";Extended Properties=" + (char) + "Excel 8.0;HDR=Yes;IMEX=1;" + (char);
}
else if (fileExt == ".xlsx")
{
strCon = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + fileName + ";Extended Properties=" + (char) + "Excel 12.0;HDR=Yes;IMEX=1;" + (char);
}
else
{
message = "读取失败,非excel文件格式。";
return null;
} OleDbConnection excelConnection = new OleDbConnection(strCon); excelConnection.Open(); #region 获取所有sheet表名称 DataTable excelData = new DataTable(); DataTable getTableNameData = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); //获取excel中的第一个sheet中的数据
//ReadEachExcelSheetData(excelConnection, ((String)getTableNameData.Rows[0]["TABLE_NAME"]).ToString(), columnString, ref excelData); //获取excel中有多个sheet中的数据
foreach (DataRow row in getTableNameData.Rows)
{ excelData = ReadEachExcelSheetData2(excelConnection, ((String)row["TABLE_NAME"]).ToString(), columnString); if (excelData.Rows.Count <= )
{
break;
}
}
getTableNameData = null; #endregion return excelData;
}
catch (Exception ex)
{
message = "数据文件或者内容格式有严重错误(" + ex.Message + "),请检查!";
return null;
}
} public void ReadEachExcelSheetData(OleDbConnection excelConnection, string tableName, string columnString, ref DataTable excelData)
{
try
{
tableName = "[" + tableName + "]";
string sql = ""; string queryFieldText = string.Empty; if (string.IsNullOrEmpty(queryFieldText))
{
queryFieldText = "*";
}
else
{
foreach (string column in columnString.Split(','))
{
queryFieldText += "[" + column + "],";
}
queryFieldText = queryFieldText.Trim(','); }
sql = @"
SELECT
{0}
FROM
{1}
";
sql = string.Format(sql, queryFieldText, tableName); DataSet ds = new DataSet();
OleDbDataAdapter myAdp = new OleDbDataAdapter(sql, excelConnection);
myAdp.Fill(ds, tableName); if (ds != null && ds.Tables.Count > && ds.Tables[].Rows.Count > )
{
excelData.Merge(ds.Tables[]);
}
}
catch (Exception ex)
{
throw ex;
} } //获取excel中第一个sheet中的数据 /// <summary>
/// 读取导入Excel文件内容
/// </summary>
/// <param name="fileName">文件路径(上传后)</param>
/// <param name="columnString">Excel中的列 名</param>
/// <param name="isReadAllExcelSheet">是否读取多个Sheet</param>
/// <param name="message">(out)消息提示</param>
/// <returns></returns>
public DataTable ReadDataFromExcel(string fileName, string columnString, bool isReadAllExcelSheet, out string message)
{
message = "";
try
{
string strCon = ""; string fileExt = Path.GetExtension(fileName).ToLower(); if (fileExt == ".xls")
{
strCon = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + fileName + ";Extended Properties=" + (char) + "Excel 8.0;HDR=Yes;IMEX=1;" + (char);
}
else if (fileExt == ".xlsx")
{
strCon = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + fileName + ";Extended Properties=" + (char) + "Excel 12.0;HDR=Yes;IMEX=1;" + (char);
}
else
{
message = "读取失败,非excel文件格式。";
return null;
} OleDbConnection excelConnection = new OleDbConnection(strCon); excelConnection.Open(); #region 获取所有sheet表名称 DataTable excelData = new DataTable(); DataTable getTableNameData = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); //获取excel中的第一个sheet中的数据
ReadEachExcelSheetData(excelConnection, ((String)getTableNameData.Rows[]["TABLE_NAME"]).ToString(), columnString, ref excelData); //获取excel中有多个sheet中的数据
//foreach (DataRow row in getTableNameData.Rows)
//{ // excelData = ReadEachExcelSheetData2(excelConnection, ((String)row["TABLE_NAME"]).ToString(), columnString); // if (excelData.Rows.Count <= 0)
// {
// break;
// }
//}
getTableNameData = null; #endregion return excelData;
}
catch (Exception ex)
{
message = "数据文件或者内容格式有严重错误(" + ex.Message + "),请检查!";
return null;
}
} public DataTable ReadEachExcelSheetData2(OleDbConnection excelConnection, string tableName, string columnString)
{
DataTable excelData = new DataTable();
try
{
tableName = "[" + tableName + "]";
string sql = ""; string queryFieldText = string.Empty; if (string.IsNullOrEmpty(queryFieldText))
{
queryFieldText = "*";
}
else
{
foreach (string column in columnString.Split(','))
{
queryFieldText += "[" + column + "],";
}
queryFieldText = queryFieldText.Trim(','); }
sql = @"
SELECT
{0}
FROM
{1}
";
sql = string.Format(sql, queryFieldText, tableName); DataSet ds = new DataSet();
OleDbDataAdapter myAdp = new OleDbDataAdapter(sql, excelConnection);
myAdp.Fill(ds, tableName); if (ds != null && ds.Tables.Count > && ds.Tables[].Rows.Count > )
{
excelData.Merge(ds.Tables[]);
}
}
catch (Exception ex)
{
throw ex;
} return excelData; }
C# 读取Excel和DBF文件的更多相关文章
- Java读取Level-1行情dbf文件极致优化(3)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- Java读取Level-1行情dbf文件极致优化(2)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- 使用OLEDB读取excel和csv文件
这是我第一次在博客上写东西,简单的为大家分享一个oledb读取文件的功能吧,这两天在做一个文件导入数据库的小demo,就想着导入前先在页面上展示一下,之前调用Microsoft.Office.Inte ...
- 用PHP读取Excel、CSV文件
PHP读取excel.csv文件的库有很多,但用的比较多的有: PHPOffice/PHPExcel.PHPOffice/PhpSpreadsheet,现在PHPExcel已经不再维护了,最新的一次提 ...
- 使用OLEDB方式 读取excel和csv文件
/// <summary> /// 使用OLEDB读取excel和csv文件 /// </summary> /// <param name="path" ...
- Java读取Level-1行情dbf文件极致优化(1)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- 深入理解pandas读取excel,txt,csv文件等命令
pandas读取文件官方提供的文档 在使用pandas读取文件之前,必备的内容,必然属于官方文档,官方文档查阅地址 http://pandas.pydata.org/pandas-docs/versi ...
- java 读取excel 2007 .xlsx文件 poi实现
工作需要读取excel里面的行内容,使用java实现较为简单. 在最开始,尝试使用 jxl-2.6.12 来实现读取excel 的行内容.但是按照网上的方法,程序根本无法正确处理文件流.经过谷姐的一番 ...
- PHP读取Excel里的文件
下载phpExcelReader http://sourceforge.net/projects/phpexcelreader 解压后得到以下这些文件 jxlrwtest.xls这个excel文件有 ...
随机推荐
- 使用ssh config配置文件来管理ssh连接
我本人其实及其烦使用配置文件这种东西,有时候看到巨大又复杂的配置文件,甚至复杂过代码的时候,总感觉设计配置文件的人有些本末倒置. 但是ssh这个配置文件真的非常简单好用,让我稍微体验了一次配置文件使用 ...
- jdk1.8 HashMap红黑树操作详解-putTreeVal()
以前也看过hashMap源码不过是看的jdk1.7的,由于时间问题看的也不是太深入,只是大概的了解了一下他的基本原理:这几天通过假期的时间就对jdk1.8的hashMap深入了解了下,相信大家都是对红 ...
- 网络流Dinic模板
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #d ...
- MT【206】证明整数数列
已知方程$x^3-x^2-x+1=0$,的三根根为$a,b,c$,若$k_n=\dfrac{a^n-b^n}{a-b}+\dfrac{b^n-c^n}{b-c}+\dfrac{c^n-a^n}{c-a ...
- gcc编译器命令使用详解
1.gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c++程序就用g++编译 ...
- Ubuntu/Unity中更改窗口修饰键Alt为Super
在Ubuntu中的Unity桌面环境里,可以使用Alt配合鼠标左键拖动窗口,这一方便的设定有许多不方便的地方.和很多的软件有热键上的冲突,比如Visual Stdio Code的多光标控制功能. 注意 ...
- 和我一起使用postcss+gulp进行vw单位的移动端的适配
随着iphoneX的出现,新的一轮适配大法应该又出现了吧?不论是使用flex布局或者媒体查询,好似都不能完全解决新加的刘海带来的适配问题. 但是有一个单位vw就神奇的解决了这个问题.vw和vh是相对于 ...
- Java中FTPClient上传中文目录、中文文件名乱码问题解决方法【好用】
转: Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录 ...
- hdu 1756(判断点是否在多边形中)
传送门 题解: 射线法判定点是否在多边形内部: AC代码: #include<iostream> #include<cstdio> #include<cmath> ...
- bind&currying
1. bind 基本用法 bind()是ECMAScript5中新增的方法,这个方法主要作用是将函数绑定至某个对象.当在函数f()上调用bind()方法并传入一个对象o作为参数,这个方法将返回一个新函 ...