//获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文件的更多相关文章

  1. Java读取Level-1行情dbf文件极致优化(3)

    最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...

  2. Java读取Level-1行情dbf文件极致优化(2)

    最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...

  3. 使用OLEDB读取excel和csv文件

    这是我第一次在博客上写东西,简单的为大家分享一个oledb读取文件的功能吧,这两天在做一个文件导入数据库的小demo,就想着导入前先在页面上展示一下,之前调用Microsoft.Office.Inte ...

  4. 用PHP读取Excel、CSV文件

    PHP读取excel.csv文件的库有很多,但用的比较多的有: PHPOffice/PHPExcel.PHPOffice/PhpSpreadsheet,现在PHPExcel已经不再维护了,最新的一次提 ...

  5. 使用OLEDB方式 读取excel和csv文件

    /// <summary> /// 使用OLEDB读取excel和csv文件 /// </summary> /// <param name="path" ...

  6. Java读取Level-1行情dbf文件极致优化(1)

    最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...

  7. 深入理解pandas读取excel,txt,csv文件等命令

    pandas读取文件官方提供的文档 在使用pandas读取文件之前,必备的内容,必然属于官方文档,官方文档查阅地址 http://pandas.pydata.org/pandas-docs/versi ...

  8. java 读取excel 2007 .xlsx文件 poi实现

    工作需要读取excel里面的行内容,使用java实现较为简单. 在最开始,尝试使用 jxl-2.6.12 来实现读取excel 的行内容.但是按照网上的方法,程序根本无法正确处理文件流.经过谷姐的一番 ...

  9. PHP读取Excel里的文件

    下载phpExcelReader  http://sourceforge.net/projects/phpexcelreader 解压后得到以下这些文件 jxlrwtest.xls这个excel文件有 ...

随机推荐

  1. python模块_re模块

    正则表达式笔记'''#re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none.#re.search 扫描整个字符串并返回第一个成功的匹配#fi ...

  2. Delphi之Exception获得错误信息(简单好理解)

    Delphi之Exception获得错误信息 相关资料: http://www.cnblogs.com/hackpig/archive/2010/02/15/1668547.html 实例代码: 1 ...

  3. js日期

    常用函數: 創建一個日期對象 var ss =new Date(): 獲取一周的天數: ss.getDay(); 獲取1970年1月1日到現在的毫秒數: getTime(): 設置具體的日期: set ...

  4. 图片上传到七牛云/阿里云的OSS

    1.准备 七牛云/阿里云OSS https://github.com/pfinal/storage 2.composer安装包 安装 composer require pfinal/storage 本 ...

  5. ACG图片站\python爬虫\LAMP环境

    最近突然对web很感兴趣,碰巧看到阿里云服务器学生价十块钱一个月,果断买了一个自己搭建了一个网站. 网址 这里 LAMP环境就搭建了好久,linux+apache2+mysql+php,都是开源的软件 ...

  6. Code First NotMapped

    转载:http://www.cnblogs.com/libingql/p/3352058.html 不需要映射的字段,添加 NotMapped 6.非数据库字段属性 在类中,如果有一些属性不需要映射到 ...

  7. Django实现websocket完成实时通讯,聊天室,在线客服等

    一 什么是Websocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebS ...

  8. 类加载过程&对象的创建过程

    类加载过程 1.JVM发现要使用一个类,首先要到方法区中找:如果找到了,就直接使用,如果没有找到,才会去找这个类的class文件,然后加载: (在找class文件时,是根据classpath配置的地址 ...

  9. 2.9 C++使用默认参数的构造函数

    总结: 默认参数的构造函数,其默认参数必须置于参数列表的结尾. 设计类的构造函数的时候最好不要同时是用构造函数的重载和带参数的构造函数. 我们可以想象一个这样的场景:某一天书店整理库存,发现了一些非常 ...

  10. Leetcode 190.颠倒二进制位 By Python

    颠倒给定的 32 位无符号整数的二进制位. 示例: 输入: 43261596 输出: 964176192 解释: 43261596 的二进制表示形式为 000000101001010000011110 ...