作者:不要破网名_329 | 来源:互联网 | 2023-05-17 20:39
C#ExcelOleDB分列+筛选我在以OleDB方式读取Excel(07版本)时,开发环境一切正常,测试环境却出现问题,只能读出一列数据,经过测试,发现是因为我在Exc
C#
Excel
OleDB
分列+筛选
我在以OleDB方式读取Excel(07版本)时,开发环境一切正常,测试环境却出现问题,只能读出一列数据,经过测试,发现是因为我在Excel中对一列数据同时设置了“分列”+“筛选”,结果就只读出了这一列数据,其他数据都不读取了,但是如果保存成97-03版本的Excel时,读取就正常了。
问题描述:
1、C# OleDB方式读取Excel
2、Excel版本2007以上
3、Excel中对同一列设置了“分列”+“筛选”
4、开发环境正常。测试环境只读设置了“分列”+“筛选”的这一列
5、Excel保存成97-2003版本时,测试环境读取正常
读取Excel代码:
//数据表
DataSet ds = new DataSet();
//获取文件扩展名
string strExtension = System.IO.Path.GetExtension(strExcelPath);
string strFileName = System.IO.Path.GetFileName(strExcelPath);
//Excel的连接
OleDbConnection objConn = null;
//HDR=Yes,这代表第一行是标题,不做为数据使用
//IMEX 0:写入 1:读取 2:读取 写入
switch (strExtension)
{
case ".xls":
objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\"");
break;
case ".xlsx":
objConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1;\"");
break;
default:
objConn = null;
break;
}
if (objConn == null)
{
return null;
}
objConn.Open();
//获取Excel中所有sheet表的信息
DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
//获取Excel的第一个Sheet表名
string tableName = schemaTable.Rows[0][2].ToString().Trim();
string strSql = "select * from [" + tableName + "]";
//获取Excel指定Sheet表中的信息
//OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn);
myData.Fill(ds, tableName);
objConn.Close();
1 个解决方案