读取Excel 2010,oleDB方式, 怎么读啊

huaxialonger 2010-08-19 06:25:12
private DataSet importExcelToDataSet(string FilePath)
{
string strConn;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + FilePath + ";Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn);
DataSet myDataSet = new DataSet();
try
{
myCommand.Fill(myDataSet);
}
catch (Exception ex)
{
//throw new InvalidFormatException("该Excel文件的工作表的名字不正确," + ex.Message);
MessageBox.Show(ex.Message,"Error");
}
return myDataSet;
}


这是2003的,读excel2010时的时候显示"外部表不是预期的格式"
怎么改成2010的啊???
还有InvalidFormatException 要用哪个using啊,没有提示...
...全文
1363 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoma0816 2010-12-13
  • 打赏
  • 举报
回复

楼主 用12就行了吗?需要添加哪些dll
huaxialonger 2010-08-20
  • 打赏
  • 举报
回复
strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
@"Data Source=" + excelFilename + ";" +
"Extended Properties=\"Excel 12.0 Xml;HDR=No\"";
我把这个改成14.0,下载了AccessDatabaseEngine.exe,安装了,但为什么还提示,未找到Microsoft.ACE.oleDB.14.0提供程序啊...
huaxialonger 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 thoughter 的回复:]
引用 4 楼 huaxialonger 的回复:

引用 3 楼 zhengqian529 的回复:
office2007装完以后创建目录:C:\Program Files\Microsoft Office\Office12
所有连接字符串里面有12.0
2010安装完以后目录里面是多少? 应该可以替换吧

读取不同版本的Excel必须得用不同的驱动吗,不是可以向下兼容吗?

建……
[/Quote]

向低版本兼容...
不好意思,误解误解
zhengqian529 2010-08-20
  • 打赏
  • 举报
回复
兼容? 我看向前兼容还可以,怎么能够做到向后兼容?
你尝试一下吧 LZ。。。
thoughter 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 huaxialonger 的回复:]

strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
@"Data Source=" + excelFilename + ";" +
"Extended Properties=\"Excel 12.0 Xml;HDR=No\"";
我把这个改成14.……
[/Quote]
不用改14,就是12
thoughter 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huaxialonger 的回复:]

引用 3 楼 zhengqian529 的回复:
office2007装完以后创建目录:C:\Program Files\Microsoft Office\Office12
所有连接字符串里面有12.0
2010安装完以后目录里面是多少? 应该可以替换吧

读取不同版本的Excel必须得用不同的驱动吗,不是可以向下兼容吗?
[/Quote]
建立一个.udl文件,打开看一下就知道了,Microsoft Office 12.0 Access Database Engine OLE DB Provider是单独列开的

===================================================

刚才试了下,Microsoft.ACE.OLEDB.12.0连低版本似乎可以
但是我不知道你想说的是向下兼容还是向上兼容……
huaxialonger 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhengqian529 的回复:]
office2007装完以后创建目录:C:\Program Files\Microsoft Office\Office12
所有连接字符串里面有12.0
2010安装完以后目录里面是多少? 应该可以替换吧
[/Quote]
读取不同版本的Excel必须得用不同的驱动吗,不是可以向下兼容吗?
zhengqian529 2010-08-19
  • 打赏
  • 举报
回复
office2007装完以后创建目录:C:\Program Files\Microsoft Office\Office12
所有连接字符串里面有12.0
2010安装完以后目录里面是多少? 应该可以替换吧
zhengqian529 2010-08-19
  • 打赏
  • 举报
回复
我用以下方法创建2003和2007的连接字符串,还没有装2010,不知道是不是应该和2008一样

private string GetConnectString()
{
try
{
if (!File.Exists(txtSourceFile.Text))
return string.Empty;

string strConn;
string excelFilename = txtSourceFile.Text;
if (excelFilename.EndsWith("xls", StringComparison.InvariantCultureIgnoreCase))
{
strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data Source=" + excelFilename + ";" + "Extended Properties=\"Excel 8.0;HDR=No\"";
}
else if (excelFilename.EndsWith("xlsx", StringComparison.InvariantCultureIgnoreCase))
{
//strConn = @"Data Source=" + _strExcelFilename +
// ";Provider=Microsoft.ACE.OLEDB.12.0; Extended Properties=Excel 12.0;";
strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
@"Data Source=" + excelFilename + ";" +
"Extended Properties=\"Excel 12.0 Xml;HDR=No\"";
}
else
return string.Empty;
return strConn;
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.ToString());
return string.Empty;
}
}
huaxialonger 2010-08-19
  • 打赏
  • 举报
回复
下班,要走,先顶一个

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧