您的位置:首页 > 编程语言 > C#

在没有安装office2010的64位系统上C#读取excel内容出现 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the loca

2015-06-17 20:26 716 查看
在没有安装office2010的64位系统上C#读取excel内容出现 'Microsoft.Jet.OLEDB.4.0'
provider is not registered on the local machine.错误
分享到:
0
标签:
exceljetace发表时间:2013-01-22 23:44阅读人次:3592评论(0)推荐(0)

若要在C#程序中读取Excel内容,大家就会想到 把 Excel作为数据源 用连接字符串读取内容,我也是这样做的,其实还有两种方法是用NPOI和ExcelRead 具体使用可以Google一下。
在这里我用的是连接字符串读取Excel,它的原理是用连接字符串指定Excel的驱动程序来读取内容的。
读取Excel内容的代码如下:

c#代码

view sourceprint?

01
/// <summary>
02
/// 返回Excel数据源
03
/// </summary>
04
/// <param name="filename">文件路径
05
/// <returns></returns>
06
public

static
DataSet ExcelToDataSet(
string

filePath,
string

Suffix)
07
{
08
try
09
{
10
string

strConn =
""
;
11
if

(Suffix ==
"xls"
)
12
{
13
strConn =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

+ filePath +
";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"
;
//HDR=Yes表示有列名 返回的时候不包括第一行数据  要想返回可设置成No ,IMEX是指: 0 ---输出模式;
1---输入模式; 2----链接模式(完全更新能力)
view sourceprint?

01
}
02
else

if
(Suffix ==

"xlsx"
)
03
{
04
strConn =
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source="

+ filePath +
";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'"
;
05
}
06
OleDbConnection OleConn =
new
OleDbConnection(strConn);
07
OleConn.Open();
08
String sql =
"SELECT * FROM  [Sheet1$]"
;
//可是更改Sheet名称,比如sheet2,等等
09
10
OleDbDataAdapter OleDaExcel =
new
OleDbDataAdapter(sql, OleConn);
11
DataSet OleDsExcle =
new
DataSet();
12
OleDaExcel.Fill(OleDsExcle,
"Sheet1"
);
13
OleConn.Close();
14
return

OleDsExcle;
15
}
16
catch

(Exception err)
17
{
18
System.Windows.Forms.MessageBox.Show(
"数据绑定Excel失败!失败原因:"

+ err.Message);
19
}
20
return

null
;
21
}
在这里excel2003与2007 2010的连接字符串不一样 原因是其保存格式不一样,所以驱动程序不一样,所以要判断是哪个版本的文件,然后相应的连接字符串,如果打开2003版本的Excel用
Microsoft.ACE.OLEDB.12.0或者打开2007 2010的Excel用Microsoft.Jet.OLEDB.4.0 均会报错“外部表不是预期的格式”。在这里如果在64位的系统上运行该段代码,如果该系统没有安装office2010就会报错,错误为“ 'Microsoft.Jet.OLEDB.4.0' provider is not
registered on the local machine.”或者“

Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.”Google了半天才明白 64位上是不支持Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0两个驱动的,除非安装了64位的office2010 ,所以在没有安装64位0ffice2010的系统上执行上段代码就会出现这样的错误。
解决方法有两个:
1.安装64位office2010;2.把程序的目标平台改为x86而不是Any Cpu,因为x86的程序可以同时在32位和64位上运行,而x64的程序只能在64位的程序上运行。修改如下:



这样编译一下(shift+ctrl+b)就不会错误了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: