Bingo2018 发表于 2024-10-23 15:41

请教一个C#处理Excel工作表内容部分电脑会报错问题

本帖最后由 Bingo2018 于 2024-10-23 15:47 编辑

请教一下各位大佬,我把C#代码生成exe程序,用VBA调用exe里面的子程序,但是偶尔正常用,也会经常报错,部分电脑正常没问题,小部分电脑就报这个错误提示,时发生错误: 无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel.Application”。此 操作失败的原因是对 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。
代码头部分是这样的,有三个子程序,exe执行是用VBA来调取exe里面的三个子程序来处理不同的表格内容。后面不值找不到问题出在哪里,把每个子程序拆开调试又是正常的。请问我这样写是有问题吗
using Microsoft.Office.Interop.Excel;
using System;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;
using ExcelApp = Microsoft.Office.Interop.Excel.Application;
using Microsoft.Office.Core;

namespace VBAexe
{
    class Program
    {
      static void Main(string[] args)
      {

            try
            {
                ExcelAutomation automation = new ExcelAutomation();
                foreach (string arg in args)
                {
                  switch (arg.ToLower())
                  {
                        case "subtoolnc2":
                            automation.SubToolNc2();
                            break;
                        case "tpnc":
                            automation.EPnc();
                            break;
                        case "imagedebugging":
                            automation.ImageDebugging();
                            break;
                        case "imagedebugging2":
                            automation.ImageDebugging2();
                            break;
                  }
                }
            }
            catch (Exception)
            {
            }
            //Environment.Exit(0); // 在所有子程序执行完毕后退出程序
      }
    }

    public class ExcelAutomation
    {
      public void SubToolNc2()
      {后面是每个子程序的处理的代码。。。

flyer_2001 发表于 2024-10-23 16:55

regsvr32 那个可执行文件试试

Bingo2018 发表于 2024-10-23 17:24

flyer_2001 发表于 2024-10-23 16:55
regsvr32 那个可执行文件试试

执行就出现这个错误了

eenny820 发表于 2024-10-23 17:41

我知道了。打开[开始] - [运行],输入“regedit”,点击[确定]进入注册表编辑器。在注册表中查找 {00024500-0000-0000-C000-000000000046},找到后右键选择[导出]进行备份。32位系统路径:HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}64位系统路径:HKEY_CLASSES_ROOT\WOW6432node\CLSID\{00024500-0000-0000-C000-000000000046}注册表导出备份完成后,右键删除 {00024500-0000-0000-C000-000000000046} 注册表项。重启计算机,卸载本机上的 Office 程序并重新安装。优化建议:
重装 Office 前,请确保所有文档已备份并关闭,避免数据丢失。

Bingo2018 发表于 2024-10-23 18:51

eenny820 发表于 2024-10-23 17:41
我知道了。打开[开始] - [运行],输入“regedit”,点击[确定]进入注册表编辑器。在注册表中查找 {00024500 ...

我试试这个方法,但是试过卸载干净重装过几次都是不行的,包括用WPS也是这种偶尔出现这种情况,但是WPS切换成整合窗口就正常了

zazakgfh 发表于 2024-10-23 23:17

office 安装 版本以及安装勾选功能不一样,建议还是一样的

xinxin99 发表于 2024-10-23 23:42

参考一下这个

https://blog.csdn.net/zhengyuanting/article/details/2422294?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-3-2422294-blog-86609832.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-3-2422294-blog-86609832.235%5Ev43%5Epc_blog_bottom_relevance_base4

Bingo2018 发表于 2024-10-24 00:13

根据大家提供的参考试了,结果还是一样,找不到原因,重装这些都试过了,都是不行,换别的电脑上又是可以的,我原来开始是可以的,后面搞着搞着就报这个错误了,百度过这个问题还是很多人遇到过,但是暂时我也没找到有效解决方案

7R903 发表于 2024-10-24 08:38

换一个插件吧

tb612443 发表于 2024-10-24 09:29

部分电脑没问题,就证明是环境问题,这里涉及到操作系统版本,Excel版本等等各种情况,所以建议是,如果是常用的功能,既然已经由C#介入了,最好是换几个不依赖office组件的工具实现相关功能;再者,充分利用没有问题的电脑环境,做成服务的方式让其他环境使用?
页: [1] 2
查看完整版本: 请教一个C#处理Excel工作表内容部分电脑会报错问题