Excel导入导出/交互
使用Access中创建Excel对象自动化出错的解决办法集锦
2018-02-03 17:25:29

真实开发过程中的经验分享:

在一些电脑使用Access中创建Excel对象出错的解决办法

今天在一个客户电脑运用我写的Access做的管理软件,代码使用 CreateObject(“Excel.Application”),但在这一句,总是提示出错,或是拒绝权限,或是 错误号-2147024894   Automation自动化错误

总这一直无法通过 ,具体错误提示如下:

代码在CreateObject(“Excel.Application”) 出错

错误号-2147024894  

Automation自动化错误

Dcom权限设置为Everyone后重启也不行

对我有效的解决办法:

经过一天多次测试后  CreateObject("Word.Application")和CreateObject("Access.Application")都正常 只是Excel不行,所以分析 可能是 Excel这个Automation ,或Regserver 有问题,或权限出错

后来逐个检查Windows的注册表,发现 原来是因为原来安装了WPS,它修改了Excel的一些注册项目导致的。

Windows Registry Editor Version 5.00  原来错为kingsoft wps的et.exe,要手工修改

错误的注册表内容如下:

[HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\LocalServer32]

@="C:\\Users\\ADMINI~1\\AppData\\Local\\Kingsoft\\WPSOFF~1\\1010~1.545\\office6\\et.exe /Automation"

".ksobak"=""

"LocalServer32"=hex(7):43,00,3a,00,5c,00,55,00,73,00,65,00,72,00,73,00,5c,00,\

  41,00,44,00,4d,00,49,00,4e,00,49,00,7e,00,31,00,5c,00,41,00,70,00,70,00,44,\

  00,61,00,74,00,61,00,5c,00,4c,00,6f,00,63,00,61,00,6c,00,5c,00,4b,00,69,00,\

  6e,00,67,00,73,00,6f,00,66,00,74,00,5c,00,57,00,50,00,53,00,4f,00,46,00,46,\

  00,7e,00,31,00,5c,00,31,00,30,00,31,00,30,00,7e,00,31,00,2e,00,35,00,34,00,\

  35,00,5c,00,6f,00,66,00,66,00,69,00,63,00,65,00,36,00,5c,00,65,00,74,00,2e,\

  00,65,00,78,00,65,00,20,00,2f,00,41,00,75,00,74,00,6f,00,6d,00,61,00,74,00,\

  69,00,6f,00,6e,00,00,00,00,00

要手工修改为以下内容,即修正Wps的为Excel的正确路确才可以(但重装 整个Excel或Office都不会自动修正这个设置)

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\LocalServer32]

@="C:\\PROGRA~1\\MICROS~2\\Office12\\EXCEL.EXE /automation"

".ksobak"=""

"LocalServer32"=hex(7):43,00,3a,00,5c,00,50,00,52,00,4f,00,47,00,52,00,41,00,\

  7e,00,31,00,5c,00,4d,00,49,00,43,00,52,00,4f,00,53,00,7e,00,32,00,5c,00,4f,\

  00,66,00,66,00,69,00,63,00,65,00,31,00,32,00,5c,00,45,00,58,00,43,00,45,00,\

  4c,00,2e,00,45,00,58,00,45,00,20,00,2f,00,61,00,75,00,74,00,6f,00,6d,00,61,\

  00,74,00,69,00,6f,00,6e,00,00,00,00,00

另特别注意:注册表修改之后 有些电脑就可以了,但有些电脑当时改完也不行,必须 要重启才会生效

其它可能对您有效的解决方法一:

 

说明:没有正确设置权限。设置方法:在命令行键入“DCOMCNFG”,则进入COM组件配置界面,选择MicrosoftExcel后点击属性按钮,将三个单选项一律选择自定义,编辑中将Everyone加入所有权限。保存完毕后重新启动服务器

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

http://support.microsoft.com/kb/828550

检查自动化服务器

发生 CreateObject 或 New 相关错误的最常见原因是服务器应用程序有问题。通常,应用程序的配置或安装会引起该问题。要解决问题,请使用以下过程:

验证您要自动执行的 Office 应用程序安装在本地计算机上。确保可以运行该应用程序。要这样做,依次单击“开始”和“运行”,然后尝试运行该应用程序。如果无法手动运行该应用程序,则该应用程序将不能以自动化方式工作。

重新注册该应用程序,如下所示:

单击“开始”,然后单击“运行”。

在“运行”对话框中键入服务器路径,然后将 /RegServer 添加到行尾。

单击“确定”。

应用程序以静默方式运行。应用程序作为 COM 服务器重新注册。

如果是因为缺少某个注册表项而发生问题,则以上步骤通常能纠正问题。

在 CLSID 下检查要自动执行的应用程序的 LocalServer32 项。确保 LocalServer32 项指向该应用程序的正确位置。确保路径名称为短路径 (DOS 8.3) 格式。您不必通过使用短路径名称来注册服务器。但是,在一些系统上,包含嵌入空格的长路径名称可能导致问题。

要检查为服务器存储的路径项,请如下所示启动 Windows 注册表编辑器:

单击“开始”,然后单击“运行”。

键入 regedit,然后单击“确定”。

移到 HKEY_CLASSES_ROOT\CLSID 项。

系统上注册的自动化服务器的 CLSID 位于此项下。

使用 CLSID 项的下列值查找代表要自动执行的 Office 应用程序的项。检查 CLSID 项的 LocalServer32 项中的路径。       

Office 服务器CLSID 项

Access.Application{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}

Excel.Application{00024500-0000-0000-C000-000000000046}

FrontPage.Application{04DF1015-7007-11D1-83BC-006097ABE675}

Outlook.Application{0006F03A-0000-0000-C000-000000000046}

owerPoint.Application{91493441-5A91-11CF-8700-00AA0060263B}

Word.Application{000209FF-0000-0000-C000-000000000046}

确保路径匹配文件的实际位置。

注意:短路径名称可能看起来正确,而实际上并不正确。例如,Office 和 Microsoft Internet Explorer(如果它们安装在其默认位置)的短路径均类似于 C:\PROGRA~1\MICROS~X\(其中 X 是数字)。此名称初看起来不像是短路径名称。

要确定路径是否正确,请执行下列步骤:

单击“开始”,然后单击“运行”。

从注册表中复制值,然后在“运行”对话框中粘贴值。

注意:在运行应用程序之前删除 /automation 开关。

单击“确定”。

验证应用程序运行正常。

如果在单击“确定”后应用程序能够运行,则正确注册了服务器。如果在单击“确定”后应用程序不运行,则用正确的路径替换 LocalServer32 项的值。如果可以,请使用短路径名称。

测试 Normal.dot 模板或 Excel.xlb 资源文件是否可能损坏。如果 Word 中的 Normal.dot 模板或 Excel 中的 Excel.xlb 资源文件损坏,则在自动执行 Microsoft Word 或 Microsoft Excel 时可能出现问题。要测试这些文件,搜索本地硬盘驱动器以查找 Normal.dot 或 Excel.xlb 的所有实例。

注意:对于运行 Microsoft Windows 2000 或 Microsoft Windows XP 的系统,可能会找到这些文件的多个副本。对于这些文件中的每一个,都有一个副本对应于系统上安装的每个用户配置文件。

临时重命名 Normal.dot 文件或 Excel.xlb 文件,然后重新运行自动化测试。如果 Word 和 Excel 无法找到这些文件,它们会创建这些文件。验证代码是否工作。如果创建新的 Normal.dot 文件时代码工作,则删除重命名的文件。这些文件已损坏。如果代码不工作,则必须将这些文件重命名为其原始文件名,以保存这些文件中保存的任何自定义设置。

如果系统运行 Windows 2000,则在管理员帐户下运行应用程序。Office 服务器需要注册表和磁盘驱动器的读/写访问权。如果当前安全设置拒绝读/写访问权,Office 服务器可能无法正确加载。

检查系统

系统配置也可能会导致进程外 COM 服务器创建问题。要解决问题,请在发生错误的系统上使用以下过程:

确定问题是否出现在任何进程外服务器上。如果您有使用特定 COM 服务器的应用程序(例如 Word),请测试其他进程外服务器,以确保问题不是出在 COM 层本身上。如果无法在计算机上创建进程外 COM 服务器,则按照本文中的“重新安装 Microsoft Office”一节所述重新安装 OLE 系统文件,或者重新安装操作系统以解决问题。

检查管理自动化的 OLE 系统文件的版本号。这些文件通常作为集合安装。这些文件必须匹配内部版本号。不正确配置的安装实用程序可能会错误地分别安装这些文件。这会导致文件不匹配。为避免出现自动化问题,请检查文件以确保文件内部版本匹配。

自动化文件位于 Windows\System32 目录或 Winnt\System32 目录中。检查以下文件。       

文件名版本修改日期

Asycfilt.dll3.50.50142002 年 9 月 04 日

Oleaut32.dll3.50.50162002 年 9 月 04 日

Olepro32.dll5.0.50142002 年 9 月 04 日

Stdole2.tlb3.0.50142002 年 9 月 04 日 要检查文件版本,请在 Windows 资源管理器中右键单击文件,然后单击“属性”。注意文件版本的最后四位数(内部版本号)和文件的上次修改日期。确保这些值对于所有自动化文件均相同。

注意:较早的版本号和较早的日期是从安装了 Office 2003 的 Windows Server 2003 计算机中检索的。这些编号和日期只用作示例。您的值可能不同。

如果文件不匹配内部版本号或修改日期,请下载更新自动化文件的自解压实用程序。 

有关如何访问运行时文件的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

235420 VBRun60sp4.exe 安装 Visual Basic 6.0 SP4 运行时文件

对于可能限制在 Office 应用程序中运行代码的第三方应用程序,使用系统配置实用程序 (Msconfig.exe) 来检查服务和系统的启动。 有关 Msconfig.exe 的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

310560 如何在 Windows XP 中使用系统配置实用程序来排除故障

例如,Outlook 自动化应用程序可能因为您正在运行具有“脚本阻止程序”功能的防病毒程序而失败。

注意:请仅在未连接到网络的测试系统上暂时禁用防病毒程序。

或者,在 Outlook 中执行下列步骤以禁用第三方加载项:

在“工具”菜单上,单击“选项”。

在“其他”选项卡上,单击“高级选项”。

在“高级选项”对话框中,单击“加载项管理器”。

单击任何第三方加载项的复选框以清除它。

重新启动 Outlook。

如果此方法解决问题,请与第三方防病毒供应商联系,了解有关更新防病毒程序的更多信息。

重新安装 Office

如果前面任何过程均未能解决问题,则删除 Office,然后重新安装 Office。Microsoft 建议您首先删除现有的版本,然后通过使用原始安装盘重新安装 Office。

另一种解决办法:

最近一段时间,用CreateObject(Excel.Application)发生自动化错误,  提示对象库未注册,找了许多资料均未能解决。

    甚至重装了Officer007,Office2003均未能解决问题,将找到的方法归纳如下:

方法一:

    添加访问注册表HKCR的全部权限

      运行regsvr32 scrrun.dll 和regsvr32 vbscript.dll

运行dcomcnfg   找到DCOM项,增加Excel.Application的访问权限。

  没有正确设置权限。设置方法:在命令行键入“DCOMCNFG”,则进入COM组件配置界面,选择MicrosoftExcel后点击属性按钮,将三个单选项一律选择自定义,编辑中将Everyone加入所有权限。保存完毕后重新启动服务器

运行注册表regedit  将有关Excel.Application的项目检查了一篇,删除了一些不适当的项,给予的访问权限

上述方法均试了一篇,可惜无效

方法二:

检查自动化服务器,参考http://support.microsoft.com/kb/828550

将其仔细看了一遍。

试着各运行了一次:EXCEL.EXE  /RegServer 和  EXCEL.EXE /automation

第三种可能的解决办法:

最近编程序时,想把Excel表里的数据导入到VB的MSHFlexgrid插件中,但不管怎么弄都提示CreateObject("Excel.Application")时提示自动化错误,在网上也查了很多资料,也没有有用的。

因为我的系统是Win7+Office 2007,我感觉可能是Office 2007不支持,但用CreateObject("Word.Application")和CreateObject("Access.Application")都正常,看网上说可能是Excel安装的问题,我重新安装了一遍还有老样子,但多了一个错误提示,是来自Excel的说是ExcelMenu.dll错误。这个文件是Excel2007的Office2003工具栏插件,我把这个插件禁用后,程序就正常了!大家如果也有类似的问题,可以在Excel里的插件找找问题!

第四种可能的解决办法:

<%Set xlApplication = Server.CreateObject("Excel.Application") '调用excel对象%>

一般没有经过设置的IIS服务器在执行这一句时都会出现错误,返回的错误信息如下:

错误类型:Server 对象, ASP 0178 (0x80070005)检查权限时,对 Server.CreateObject 的调用失败。拒绝对此对象的访问。

英文版的错误信息如下:

Error Type:Server object, ASP 0178 (0x80070005)The call to Server.CreateObject failed while checking permissions. Access is denied to this object.

这是IIS中没有注册使用MS Excel的组件,所有在调用时会出错。

解决办法如下:

     开始->运行->dcomcnfg (打开组件服务)

   在DCOM配置中找到"Microsoft Excel 应用程序"(这个名称取决于你调用的Object是什么),

然后右键->属性->安全 在“启动和激活权限”框中点击“编辑”把三个权限都给everyone(window 2000系统) 即可。其实第一个Launch & activate就行了。

因为我用的是XP系统,找不到Everyone,所以我添加了IIS默设用户:IUSER/your user,即 如果找不到该用户可点击“添加”->“高级”,用“立即查找”找到相应的用户。在XP中是在权限选择框中把“本地启动”和“本地激活”允许权限打√。 

第五种可能解决的方法:

出现“Microsoft Visual Basic 自动化(Automation)错误发生意外。”的对话框,如下图所示:

关于Microsoft Office Excel遇到问题需要关闭的信息倒有点类似于之前遇到的由于Normal.dot损坏导致Word打开出现的对话框,于是顺着上次的思路进行手动的修复。

可以先阅读前面的"解决Word遇到问题需要关闭和“安全模式”启动问题”那篇文章,部分准备步骤与那篇文章描述一致,就不累述了。

一、关闭所有Excel文档,打开“任务管理器”,结束残余的Excel.exe进程。

二、打开隐藏文件开关。

三、开始运行输入%APPDATA%\Microsoft\Excel以便于打开配置文件夹,分别删除%APPDATA%\Microsoft\Excel和%APPDATA%\Microsoft\Excel\XLSTART下所有文件,这一步我找到了问题的所在,在XLSTART目录下存在一个带毒的k4.xls文档,这个目录下的Excel文档所包含的程序将会在打开Excel时自动加载,这样k4.xls中所包含的恶意代码就可以执行并感染正常Excel了,所以我们立即删除它。

四、找到Office的安装路径,比如我的Office 2003装在D盘Program Files,那么路径就是D:\Program Files\Microsoft Office\Office11,这里Office11对应着Office 2003,同样的Office12对应Office 2007,Office 14对应着Office 2010,好了,找到XLSTART文件夹,删除这个文件夹内的所有文件。

通过以上步骤后,及时升级更新你的杀毒软件,全盘查杀病毒,完成后Excel就可以正常打开了。

当然你也可以尝试我编写的批处理来快速解决这个问题,下载下面的批处理文件(*.bat),双击运行即可修复Excel,如果是Vista、Win7或者更高版本请右击以管理员身份运行,运行前请保存你的所有Excel工作簿并且关闭Excel程序,因为本批处理会强制结束未关闭的Excel运行以保证清理效果。

双击bat后出现Microsoft Office Excel Recovery complete:-)则表明修复完成。

需要的朋友可以直接下载现成的清理XLSTART文件夹修复Excel,解压后双击运行即可