gpt4 book ai didi

c# - 即使在释放资源后也无法关闭 excel

转载 作者:太空宇宙 更新时间:2023-11-03 12:32:11 24 4
gpt4 key购买 nike

我尝试了很多解决方案但都没有用请帮我解决这个问题。以下是 SSIS 脚本任务

中使用的代码
    using Excel = Microsoft.Office.Interop.Excel;        
Excel.Application xlApp = null;
Excel.Workbooks workbooks = null;
Excel.Workbook xlWorkbook = null;
Excel.Worksheet worksheet = null;
Excel.Range xlRange = null;
try
{

xlApp = new Excel.Application();
xlApp.DisplayAlerts = false;
xlApp.AskToUpdateLinks = false;
workbooks = xlApp.Workbooks;
xlWorkbook = workbooks.Open("sample.csv", 2, true);
xlWorksheet = xlWorkbook.Sheets[1];
xlRange = xlWorksheet.UsedRange;
int rowCount = xlRange.Rows.Count;
for (int row = 2; row <= rowCount; row++)
{
//some logic

}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally //releasing all resources
{
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.ReleaseComObject(xlRange);
Marshal.ReleaseComObject(xlWorksheet);
xlRange = null;
xlWorksheet = null;
xlWorkbook.Close();
Marshal.ReleaseComObject(xlWorkbook);
xlWorkbook = null;
workbooks = null;
xlApp.Quit();
Marshal.ReleaseComObject(xlApp);
xlApp=null;
}

释放资源后,仍然看到一个excel进程

最佳答案

看来您的方向是正确的。但是,您当前是 ExcelApplication,它是您将在任务监视器中看到的实际进程,它是 ExcelDocument,需要在 WordApplication 被终止之前关闭。

看看这个简单的例子:

public void Foo(string filePath)
{
var application = new Excel.Application();

// do your stuff here...
var document = application.Workbooks.Open(filePath, ReadOnly: true, Visible: false);

// this is the magic: clear 'application' and 'document',
// once the work is finished
if (document != null)
document.Close(SaveChanges: false);

if (application != null)
application.Quit(SaveChanges: false);

document = null;
application = null;
}

在这里您会看到我们实际上正确地Close() 工作簿(文档)和Quit() 应用程序。这有点类似于您在 finally 部分中所做的事情,但请记住变量已初始化您可以进入 try... 部分。

我的建议是:不要手动调用任何垃圾收集 (GC) 和 Marshal 东西。如果您不确定它的作用,它会在以后产生副作用伤害您。接下来,您可以通过在 ExcelApplication 和 ExcelWorkbook 周围添加一个漂亮的 using (...) 结构来进一步改进示例。

关于c# - 即使在释放资源后也无法关闭 excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42326636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com