C# 读取Excle数据报错,多种解决办法尝试都未能解决,急求帮助
private static DataSet ExcelToDataSet(string excelFile, params string[] excelSheets)
{
DataSet ds = new DataSet();
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFile + ";Extended Properties=\"Excel 12.0;HDR=YES\";";
using (OleDbConnection conn = new OleDbConnection(strConn))
{
conn.Open();
if (excelSheets == null) excelSheets = new string[1] { "Sheet1" };
foreach (string sheet in excelSheets)
{
string strExcel = string.Format("select * from [{0}$]", string.IsNullOrEmpty(sheet) ? "Sheet1" : sheet);
using (OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn))
{
myCommand.Fill(ds, sheet);
}
}
}
return ds;
}
服务器环境:Windows 2003 R2 Enterprise x64 Edition Service Pack 2
开发工具:VS2010
Office:Microsoft Office Enterprise 2007
报错信息:The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.
已尝试办法一:安装AccessDatabaseEngine.exe
http://www.cnblogs.com/insus/articles/2008941.html
结果:无任何效果
已尝试办法二:IIS6.0启用32位框架
http://blog.csdn.net/playwarcraft/article/details/4835442
1.用命令启用IIS6.0 32位框架,重启IIS
2.注册.net 4.0框架,重启IIS,启用IIS扩展程序.net 4.0(32bit)
结果:程序不能正常运行
不知道是我找到的办法漏掉了一些细节还是什么问题,本以为第二种办法应该相当靠谱的。
求大神帮忙看看
--------------------编程问答-------------------- 这种方式确实会遇到好多类似的问题。
很头疼的。你这又是 64位系统。
试一试 NPOI 吧 --------------------编程问答-------------------- 已尝试办法三:VS改目标框架为x86
结果:程序不能正常运行(因为项目下调用其他项目和dll插件比较多,很难全部改为x86)
还搜集到其他办法:
1.换第三方插件读取
2.升级服务器到Win2008 64bit
不过这两种都比较耗时,咱不做考虑 --------------------编程问答--------------------
谢谢,换一下比较费时间,所有想等实在没办法了再做考虑 --------------------编程问答--------------------
暂不做考虑,实在没有其他办法估计就这能这样了 --------------------编程问答-------------------- 提示很明确,还是有什么组件没装,上网多查查看。
--------------------编程问答-------------------- 以前读取都是用 NPOI ,楼主百度试试 。 --------------------编程问答--------------------
主要是office是2007 2007只有32位的
从2010开始office才有64位,但win2003 64bit安装不了office 2010 64bit
从这个思路去搜答案,网上搜到很多都是说安装AccessDatabaseEngine.exe(12.0.4518.1014)
但是我安装之后没有什么效果,是缺少什么配置吗?有没有用过这种办法的 --------------------编程问答-------------------- 我用WIN8 64位,没发现问题,呵呵。 --------------------编程问答-------------------- 先用个WINFORM测试下, 不是操作系统的关系就是OFFICE的问题,先从这方便考虑。 --------------------编程问答-------------------- 解决了,最终还是花了时间用了第三方插件 aspose
贴子先挂几天再结,看看有没有更好的办法 --------------------编程问答-------------------- 你在抄一个 Microsoft.ACE.OLEDB.12.0 之前应该大概了解一下这是什么。 --------------------编程问答-------------------- 缺少(古老的) MS 数据库引擎组件,你就应该去网上搜一下、或者上微软官网上下载安装包。你去整什么IIS、.net framework那些都是不沾边的。 --------------------编程问答-------------------- --------------------编程问答-------------------- 我一直都用AccessDatabaseEngine 读取03 07的都正常..只不过 我是用SQL的openrowset读取的 --------------------编程问答--------------------
你做那么多做什么哟,
直接用NPOI是最好的,用微软慢慢的你回发现很多问题 --------------------编程问答-------------------- aspose挺好用的,支持。 --------------------编程问答--------------------
首先恭喜你解决了。
Web 对于Excel 和 Word 的操作最好别使用 office组件。
问题多多。。
其实还有一种方式,就是输出XML。。
有 OpenXml 可以看看(对office2003支持不好)或者自己分析下excel2003的xml 输出。
--------------------编程问答-------------------- 是的 office组件真的不好用,
首先是对于没有默认参数的c#,要多写很多
其次是很多参数或返回值是object,经常要类型转化
最后我最痛恨的一点不管怎么关闭文档,进程里的excel都不退出 --------------------编程问答-------------------- 要学会使用工具啊 --------------------编程问答-------------------- excel 数据读取,
http://www.e-iceblue.com/Introduce/excel-for-net-introduce.html
Workbook workbook = new Workbook();
workbook.LoadFromFile(@"..\..\..\..\..\..\Data\DataTableSample.xls");
//Initialize worksheet
Worksheet sheet = workbook.Worksheets[0];
this.dataGrid1.DataSource = sheet.ExportDataTable();
word文档数据读取
http://www.e-iceblue.com/Introduce/word-for-net-introduce.html --------------------编程问答--------------------
你在抄一个 Microsoft.ACE.OLEDB.12.0 之前应该大概了解一下这是什么。
这个我需要说明下,代码是同事写的,估计是为了节省时间,直接从公司很久之前的系统里拿的封装好的类
我是在客户现场调试发现这个问题的,我也是开发人员,所以就由我负责处理了
我事后也认识到我的过失,因为需求是我负责的,我没有很明确的告知同事客户那边的环境,没有跟进了解同事做出的解决方案 --------------------编程问答--------------------
缺少(古老的) MS 数据库引擎组件,你就应该去网上搜一下、或者上微软官网上下载安装包。你去整什么IIS、.net framework那些都是不沾边的。
我尝试的第一个办法就是安装数据库引擎(AccessDatabaseEngine.exe),我也问题里也提到了,不知道是不是有什么细节遗漏的原因,我安装好没有任何效果。 --------------------编程问答--------------------
解决了,最终还是花了时间用了第三方插件 aspose
贴子先挂几天再结,看看有没有更好的办法
你做那么多做什么哟,
直接用NPOI是最好的,用微软慢慢的你回发现很多问题
aspose刚好公司另外一个项目用过,所以当时选择了aspose
如果是以后做项目,个人也觉得NOPI好一点,不会有版权问题
补充:.NET技术 , C#