wpf 读取EXCEL 2013 , 一直报错“从Excel文件中获取数据时发错
wpf吧
全部回复
仅看楼主
level 1
爆发点free 楼主
wpf 读取EXCEL 2013 , 一直报错“"从Excel文件中获取数据时发生错误!可能是Excel版本问题,可以考虑降低版本或者修改连接字符串值"
路径应该没问题,因为sheet名称都拿到了。2013 的参数问题?
private System.Data.DataTable LoadExcel(string pPath)
{
//
string connString = "Driver={Driver do Microsoft Excel(*.xls)};DriverId=790;SafeTransactions=0;ReadOnly=1;MaxScanRows=16;Threads=3;MaxBufferSize=2024;UserCommitSync=Yes;FIL=excel 8.0;PageTimeout=5;"; //连接字符串
//简单解释下这个连续字符串,Driver={Driver do Microsoft Excel(*.xls)} 这种连接写法不需要创建一个数据源DSN,DRIVERID表示驱动ID,Excel2003后都使用790,
//FIL表示Excel文件类型,Excel2007用excel 8.0,MaxBufferSize表示缓存大小, 如果你的文件是2010版本的,也许会报错,所以要找到合适版本的参数设置。
connString += "DBQ=" + pPath; //DBQ表示读取Excel的文件名(全路径)
OdbcConnection conn = new OdbcConnection(connString);
OdbcCommand cmd = new OdbcCommand();
cmd.Connection = conn;
//获取Excel中第一个Sheet名称,作为查询时的表名
string sheetName = this.GetExcelSheetName(pPath);
string sql = "select * from [" + sheetName.Replace('.', '#') + "$]";
cmd.CommandText = sql;
OdbcDataAdapter da = new OdbcDataAdapter(cmd);
DataSet ds = new DataSet();
try
{
da.Fill(ds);
return ds.Tables[0]; //返回Excel数据中的内容,保存在DataTable中
}
catch (Exception x)
{
ds = null;
throw new Exception("从Excel文件中获取数据时发生错误!可能是Excel版本问题,可以考虑降低版本或者修改连接字符串值");
}
finally
{
cmd.Dispose();
cmd = null;
da.Dispose();
da = null;
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
conn = null;
}
}
2014年12月14日 09点12分 1
level 1
爆发点free 楼主
求大神帮忙 [泪] 在线等
2014年12月14日 09点12分 2
level 1
爆发点free 楼主
[泪]
2014年12月14日 09点12分 3
level 1
爆发点free 楼主
“System.Data.Odbc.OdbcException”类型的未经处理的异常在 System.Data.dll 中发生
其他信息: ERROR [HY000] [Microsoft][ODBC Excel 驱动程序] 外部表不是预期的格式。
ERROR [01000] [Microsoft][ODBC Excel 驱动程序]常规警告 不能打开注册表关键字 'Temporary (volatile) Jet DSN for process 0x2180 Thread 0x16d8 DBC 0x67ae42c Excel'。
ERROR [IM006] [Microsoft][ODBC 驱动程序管理器] 驱动程序的 SQLSetConnectAttr 失败
ERROR [01000] [Microsoft][ODBC Excel 驱动程序]常规警告 不能打开注册表关键字 'Temporary (volatile) Jet DSN for process 0x2180 Thread 0x16d8 DBC 0x67ae42c Excel'。
ERROR [HY000] [Microsoft][ODBC Excel 驱动程序] 外部表不是预期的格式。
2014年12月14日 10点12分 4
level 1
请问你这个问题解决没有啊?求教!遇到相同问题了
2015年01月28日 11点01分 5
解决了[吐舌]
2015年02月04日 10点02分
回复
������free
:怎么解决的,求指导
2015年02月09日 06点02分
回复
�ᰲ��
:贴在下面了
2015年02月27日 08点02分
level 1
爆发点free 楼主
// 获取工作表名称
public string GetExcelSheetName(string pPath)
{
//打开一个Excel应用
Microsoft.Office.Interop.Excel.Application excelApp;
Workbook excelWB;//创建工作簿(WorkBook:即Excel文件主体本身)
Workbooks excelWBs;
Worksheet excelWS;//创建工作表(即Excel里的子表sheet)
Sheets excelSts;
excelApp = new Microsoft.Office.Interop.Excel.Application();
if (excelApp == null)
{
throw new Exception("打开Excel应用时发生错误!");
}
excelWBs = excelApp.Workbooks;
//打开一个现有的工作薄
excelWB = excelWBs.Add(pPath);
excelSts = excelWB.Sheets;
//选择第一个Sheet页
excelWS = excelSts.get_Item(1);
string sheetName = excelWS.Name;
ReleaseCOM(excelWS);
ReleaseCOM(excelSts);
ReleaseCOM(excelWB);
ReleaseCOM(excelWBs);
excelApp.DisplayAlerts = false;
excelApp.Quit();
ReleaseCOM(excelApp);
return sheetName;
}
// 释放资源
private void ReleaseCOM(object pObj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(pObj);
}
catch
{
throw new Exception("释放资源时发生错误!");
}
finally
{
pObj = null;
}
}
//读取EXCEL
private System.Data.DataTable readExcel(string path)
{
string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1;\"";
//string strCon = " Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source = " + path + ";Extended Properties=Excel 12.0;HDR=Yes;IMEX=1";
//string strCon = " Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1";
OleDbConnection myConn = new OleDbConnection(strCon);
myConn.Open();
string strTableName = GetExcelSheetName(path);
string strCom = " SELECT * FROM [" + strTableName + "$] ";
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
System.Data.DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet, strTableName);
myConn.Close();
myConn.Dispose();
return myDataSet.Tables[0];
}
2015年02月27日 08点02分 6
level 1
我的代码和你一样,还是有点错误,可以请教一下吗?
2017年05月14日 06点05分 7
需要你安装驱动,百度一下答案很多。
2017年05月14日 09点05分
推荐使用NPOI,不需要安装任何东西
2017年05月15日 01点05分
1