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文件有 ...
随机推荐
- 关于utf8mb4的学习了解笔记
占位下班写 据说可以存储emoji ..妈蛋今天大神又秀我一脸 大概意思是,我们整个后端数据库,最近都升级了编码格式.从以前久的utf-8整个升级到了utf8mb4的格式 该格式支持emoji表情. ...
- Nginx CONTENT阶段 static模块
L63-65 alias指令 syntax: alias path;# 静态文件路径 alias不会将请求路径后的路径添加到 path中 context : location; root指令 sy ...
- Nginx ACCESS阶段 如何限制IP访问
192.168.1.0/24(最大32位的子网掩码) 每个ip是8位 那么 24/8 = 3 也就是前三个二进制 是 11111111 11111111 11111111 是指子网掩码的位数.写的是多 ...
- Linux环境变量PATH
查看PATH:echo $PATH以添加mongodb server为列修改方法一:export PATH=/usr/local/mongodb/bin:$PATH//配置完后可以通过echo $PA ...
- BZOJ1299[LLH邀请赛]巧克力棒——Nim游戏+搜索
题目描述 TBL和X用巧克力棒玩游戏.每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度.TBL先手两人轮流,无法操作的人输. 他们以最佳策略一共进行了10轮(每次一盒). ...
- ef 仓储模式
构建一个仓储模式. Model 大家自己创建就行了,上个图,就不多说了(我是code first) IDAL namespace IDAL { public interface IBaseReposi ...
- hdu 4348 To the moon (主席树 区间更新)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4348 题意: 4种操作: C l r c 区间[l,r]加c,时间+1 Q l r 询问当前时 ...
- Spring Cloud(三) --- hystrix
Hystrix 说到Hystrix就得先说一下产生的背景等等,那就是雪崩效应. 在微服务中肯定存在多个服务层之间的调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服 ...
- CodeChef题目选讲
https://wenku.baidu.com/view/2445a0322f60ddccda38a023.html 关键点:不超过7条 根据咕咕原理,所以答案最少是N/7;(N小于49就暴力) 随机 ...
- NOIP2018普及组模拟赛
向老师给的模拟赛,还没普及组难... 题目在洛谷团队里. 第一试三道水题,我46分钟就打完了,然后就AK了. 第二试一看,除了第二题要思考一段时间之外,还是比较水的,但是我得了Rank倒1,115分. ...