正在终止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互操作对象?(第二个答案)
要做到这一点并不容易。但我感到惊讶的是,以下内容甚至被编译了:
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.Collect
和GC.WaitForPendingFinalizers
调用有什么意义,因为它们是在cell
和fontSetter
超出范围之前进行的。
最后,对Marshal.FinalReleaseComObject
的调用可能应该在Finally块中,这样即使抛出异常,它们也会被执行。
我是按照"如何正确清理Excel互操作对象?"中夜编码器指定的方法完成的?。
你不需要引用任何东西,而且是所有东西中最不杂乱的,它通过ID来结束过程。希望这能帮助进来寻找的人。