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

如何终止Excel复制粘贴后遗留的C#后台进程?

Excel后台进程残留问题(.NET Core 6.0 + Windows 10)

之前没意识到在C#中复制粘贴Worksheet内容会导致Excel后台进程残留,但现在确实碰到了这个问题。我在Windows 10系统上使用.NET Core 6.0,执行复制数据的代码后,任务管理器里会留下无法正常终止的Excel进程;但只要注释掉复制相关代码,Excel就能正常释放对象并关闭。试过用Marshal.FinalReleaseComObject和GC.Collect也没用,猜测是某个COM对象没正确释放,但排查多次都没解决,求帮忙。

复现代码

using Reporting_WPF_Library;
using Microsoft.Office.Interop.Excel;
using Marshal = System.Runtime.InteropServices.Marshal;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.Outlook;
using Outlook = Microsoft.Office.Interop.Outlook;
using System.Windows.Navigation;
using System.Windows;
using ADODB;
using System.Diagnostics;

static void RevenueNotPosted()
{
    string SavePath = @"Z:\Reporting\Revenue Reports\XMonthly\Revenue Not Posted\";

    Excel.Application XLApp = XL.App(true);
    Outlook.Application OLApp = OL.App();

    Excel.Workbooks XLWB = XLApp.Workbooks;

    Excel.Workbook? Report = XL.FileRef(XLWB, SavePath, "Revenue Not Posted", CheckAge: -1)
        ?? throw new System.Exception("RevenueNotPosted failure: FileRef on Report");
    
    Excel.Workbook? Data = XL.FileRef(XLWB, SavePath, "Dataset", ".csv", CheckAge: -1)
        ?? throw new System.Exception("RevenueNotPosted failure: FileRef on Data");

    // 就是这行代码导致问题,注释掉就一切正常
    // 试过用复制粘贴的方式,问题依然存在
    Report.Worksheets["Report"].Columns["A:S"] = Data.Worksheets[1].Columns["A:S"].Value;

    XL.Rel(XLApp, ref Data, false);
    XL.Rel(XLApp, ref Report, false);

    Marshal.ReleaseComObject(XLWB);

    XLApp.Quit();

    Marshal.ReleaseComObject(OLApp);
    Marshal.ReleaseComObject(XLApp);

    XL.TryGettingAReservationAtDorsiaNow();
}

RevenueNotPosted();

释放工作簿的Rel函数

public static void Rel(Excel.Application XLApp, ref Workbook? WB, bool SaveBeforeClosing = true)
{
    if (WB == null) return;
    Properties(XLApp, true);
    if (SaveBeforeClosing == true) SaveBeforeClosing = !WB.Saved;
    WB.Close(SaveChanges: SaveBeforeClosing);
    Marshal.ReleaseComObject(WB);
    WB = null;
    return;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:47:40