在没有安装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?
view sourceprint?
在这里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)就不会错误了。
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----链接模式(完全更新能力) |
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 | } |
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)就不会错误了。
相关文章推荐
- C#关于XML文件的操作问题
- C#关于手机和固定电话的简单判断
- C# 之 未能映射路径
- C#获取硬件信息
- ISAPI实现静态页面后并用c#实现分页
- C#中使用OpenSSL的公钥加密/私钥解密
- C# 中的委托和事件
- C# 读取文件的修改时间、访问时间、创建时间
- C#之WCF入门1—简单的wcf例子
- C#实现对二维数组排序的方法
- C# 判断图形文件(GIF,JPG,PNG)的图片格式的方法
- Encoding 常用編碼代號(C# Encoding.GetEncoding)
- c#代码发送邮件,还可以实现群发
- C# 获取两个矩形相减部分的GraphicsPath
- C#实现图片自由变换 任意扭曲的算法
- csharp:Conversion Between DataTable and List
- C#获取USB盘符
- C#加密解密
- C#中的数组操作练习
- c#常见stream操作