答案一:
因为没有安装64位的Jet40驱动。可以到
下载。但是前提你必须安装了64位的Office。如果你安装的是32位Office,则下载32位驱动。但同时你必须将你的应用程序将原有的AnyCPU更改为CPU x86.如果是Web端程序,可以通过IIS的进行配置。将【启用32位应用程序】启用即可。
答案二:
项目中要把数据导出到 Excel 文件的功能。 如果使用 Excel.Application/Excel.Workbook/Excel.Worksheet 那个体系去处理的话。 我就是要输出一个无格式的 Excel 数据文件,花费时间太长。 代码写起来也复杂。
于是就使用 String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";Extended Properties=Excel 8.0;"; OleDbConnection cn = new OleDbConnection(sConnectionString); string sqlCreate = @"CREATE TABLE [Sheet名] ([列1] VarChar, [列2] VarChar, [列3] VarChar, [列4] Int)"; OleDbCommand cmd = new OleDbCommand(sqlCreate, cn); //创建Excel文件 cn.Open(); //创建表 cmd.ExecuteNonQuery();
String queryString = String.Format("INSERT INTO [Sheet名] ([列1], [列2], [列3], [列4]) VALUES ('{0}', '{1}', '{2}', {3})", "Test1", "Test2", "Test3", 4); // 插入. icmd.CommandText = queryString; icmd.ExecuteNonQuery();
这种简单的方式处理。
但是自己机器上运行正常,但是跑到别人电脑上面运行,就出错了。 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序。
首先是考虑到,我的机器是Office 2007,目标机器上的是 Office 2010. 会不会是 Microsoft.Jet.OLEDB.4.0 太老了? 新版本的不支持。
于是修改一下 String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";Extended Properties=Excel 8.0;"; 修改为 String sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";Extended Properties=Excel 8.0;";
然后依然是本机能够正常运作,目标机器不行。
再去仔细了解一下,发现目标机器是 64位系统的。
看帖子显示,Microsoft.ACE.OLEDB.12.0 是不能再x64上使用的。 于是再回到 开发工具那里,在项目的 “属性”那里, 目标平台由原有的“Any CPU” 修改为 “x86” 重新编译完毕后,再放回目标机器上面测试,终于正常运行了。
再回头去看看 在 x86 的情况下, 使用 Jet 或者 ACE ,都能在 64位的操作系统,安装了 Office 2010的机器上,正常的创建 Excel 报表。
2011年4月13日 追加
使用 Microsoft.Jet.OLEDB.4.0; 如果 Excel 文件名 的扩展名为 xlsx
那么代码运行过程中,会报 “不能更新。数据库或对象为只读。” 的错误。
如果使用 Microsoft.ACE.OLEDB.12.0,扩展名为 xlsx 的时候则不产生错误。
因此,C#产生报表的时候,优先使用 Microsoft.ACE.OLEDB.12.0 驱动, 当目标机器无法启用 Microsoft.ACE.OLEDB.12.0 的时候,才使用 Microsoft.Jet.OLEDB.4.0 驱动 。
2011年6月8日追加
上面的驱动,能够成功的创建 xlsx 文件,但是用 Excel 打开的时候,会提示错误信息。
驱动需要修改为:
sConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";
注意
修改的地方 Extended Properties=\"Excel 12.0 Xml;HDR=YES\"
与以前的 Extended Properties=Excel 8.0
仅仅当扩展名为 xlsx 的时候, 才使用上面那个驱动的写法。
如果扩展名还是 xls 那么还是继续使用 原有的写法,也就是那个 Extended Properties=Excel 8.0 的
[转载:]