You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用Excel Interop出现ResolveComReference报错及DTSLib缺失如何解决

问题解决方案

第一步:清除无效DTSLib引用

你看到的4条DTSLib相关警告,是因为项目中误添加了不需要的SQL Server DTS服务依赖,操作Excel完全不需要这个库,直接删除即可:

  • 右键你的项目→选择「管理NuGet程序包」/或者直接展开「引用」节点
  • 在引用列表中找到DTSLib,右键删除
  • 重新生成项目,这4条警告会直接消失

第二步:修复ResolveComReference报错

这个报错是Excel COM组件引用解析失败导致的,按以下顺序排查:

  1. 确认Interop引用正确
    要么直接通过NuGet安装官方的Microsoft.Office.Interop.Excel包,要么引用本地安装的Office对应的COM组件,不要引用其他机器拷贝的非对应版本dll。
  2. 匹配平台位数
    确认你本地安装的Excel位数:打开Excel→文件→账户→关于Excel,查看是32位还是64位
    然后右键项目→属性→生成→将「目标平台」修改为和Excel一致的位数(32位选x86,64位选x64),不要使用Any CPU。
  3. 重新注册COM组件(可选)
    如果以上操作后还是报错,打开管理员权限的命令提示符:
    • 32位Office执行:
      C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /codebase "你的Excel Interop dll完整路径"
    • 64位Office执行:
      C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /codebase "你的Excel Interop dll完整路径"

第三步:优化业务代码

你现有代码存在路径错误、资源泄漏的问题,修改后可直接实现读取工作表名加载到组合框的需求,参考代码如下:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

namespace OpenDataSheet
{
    public partial class FrmOpenDataSheet : Form
    {
        public FrmOpenDataSheet()
        {
            InitializeComponent();
            LoadSheetNamesToCombo();
        }

        private void LoadSheetNamesToCombo()
        {
            Excel.Application app = null;
            Excel.Workbook foodPantryWorkbook = null;
            try
            {
                app = new Excel.Application();
                // 建议替换为文件的绝对路径,避免相对路径找不到文件
                string excelPath = @"C:\完整路径\Food Pantry Registry.xlsm";
                foodPantryWorkbook = app.Workbooks.Open(excelPath, 0, true, 5, "", "", true, 
                    Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
                
                // 遍历所有工作表,把名称添加到组合框,你的组合框假设名字是cbSheetNames
                cbSheetNames.Items.Clear();
                foreach (Excel.Worksheet sheet in foodPantryWorkbook.Sheets)
                {
                    cbSheetNames.Items.Add(sheet.Name);
                    Marshal.ReleaseComObject(sheet);
                }
                // 默认选中第一个
                if (cbSheetNames.Items.Count > 0)
                    cbSheetNames.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                MessageBox.Show("读取Excel失败:" + ex.Message);
            }
            finally
            {
                // 释放COM资源,避免Excel进程残留
                if (foodPantryWorkbook != null)
                {
                    foodPantryWorkbook.Close(false);
                    Marshal.ReleaseComObject(foodPantryWorkbook);
                }
                if (app != null)
                {
                    app.Quit();
                    Marshal.ReleaseComObject(app);
                }
            }
        }

        private void CmdCancel_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start("Food Pantry.exe");
            Application.Exit();
        }

        private void CmdSelectSheet_Click(object sender, EventArgs e)
        {
            // 选中工作表后的逻辑在这里写
            if (cbSheetNames.SelectedItem != null)
            {
                string selectedSheet = cbSheetNames.SelectedItem.ToString();
                // 后续处理逻辑
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者PaulaJoann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:24:02