正在终止excel进程

本文关键字:进程 excel 终止 | 更新日期: 2023-09-27 18:29:40

在这里读了很多关于在引用excel.com对象时不使用双点的线程后,我决定实现它。

它一直在起作用,直到我开始做我的循环。

这是我的循环。请注意,如果我对此进行评论,它是有效的:

        for (int i = 1; i < dgv.Columns.Count + 1; i++)
        {
            excelWorkbook.Cells[1, i] = dgv.Columns[i - 1].HeaderText;
            var cell = excelWorkbook.Cells[1, i];
            var fontSetter = cell.Font;
            fontSetter.Bold = true; //Bolds the header row
            // Garbage collecting
            GC.Collect();
            GC.WaitForPendingFinalizers();
            Marshal.FinalReleaseComObject(fontSetter);
            Marshal.FinalReleaseComObject(cell);
        }

我的代码不应该正确地处理它们的变量吗?

这是我的完整代码:

[Code removed]

我正在尝试按照中的步骤进行操作。如何正确清理Excel互操作对象?(第二个答案)

正在终止excel进程

要做到这一点并不容易。但我感到惊讶的是,以下内容甚至被编译了:

excelWorkbook.Cells[1, i] = dgv.Columns[i - 1].HeaderText; 
var cell = excelWorkbook.Cells[1, i]; 

也许你的意思是:

excelWorkbook.Cells[1, i].Value = dgv.Columns[i - 1].HeaderText; 
var cell = excelWorkbook.Cells[1, i]; 

应替换为:

var cell = excelWorkbook.Cells[1, i]; 
cell.Value = dgv.Columns[i - 1].HeaderText; 

我看不出您的GC.CollectGC.WaitForPendingFinalizers调用有什么意义,因为它们是在cellfontSetter超出范围之前进行的。

最后,对Marshal.FinalReleaseComObject的调用可能应该在Finally块中,这样即使抛出异常,它们也会被执行。

我是按照"如何正确清理Excel互操作对象?"中夜编码器指定的方法完成的?。

你不需要引用任何东西,而且是所有东西中最不杂乱的,它通过ID来结束过程。希望这能帮助进来寻找的人。