用C#关闭打开的excel工作簿

本文关键字:excel 工作簿 | 更新日期: 2023-09-27 17:57:34

我一直有一个问题,我正在努力解决它,因为如果程序崩溃(excel文件在后台保持打开),或者用户已经打开了excel工作簿,程序将崩溃,因为它无法打开已经打开的工作簿。

试图通过使用以下问题中的方法来解决此问题:C#:如何打开和关闭Excel工作簿?

但令我沮丧的是没有成功。

有了这个设置,我在wb.Close(true)上得到一个错误,说我不能使用未分配的局部变量。对我来说,这有点道理,但我不明白这是怎么回事。这不像if语句,如果条件不满足,它就不会跳到循环中。try块将始终执行。

Excel.Workbook wb;
try
{
    wb = exApp.Workbooks.Open(@file);
}
catch (Exception)
{
    wb.Close(true);
}

我也尝试过这种方式:

Excel.Workbook wb = new Excel.Workbook();
try
{
    wb = exApp.Workbooks.Open(@file);
}
catch (Exception)
{
    wb.Close(true);
}

但这一次,在运行程序时,我在Excel.Workbook wb = new Excel.Workbook();线上得到了一个error: 80040154 Class not registered。再一次不知道为什么。

非常感谢您的帮助。

用C#关闭打开的excel工作簿

试试这个:

Excel.Workbook wb = null;
try
{
    wb = exApp.Workbooks.Open(@file);
}
catch (Exception)
{
    if (wb != null) wb.Close(true);
}

您需要finally而不是catch。无论是否出现异常,finally块都将始终执行。即使没有引发异常,您仍然希望关闭工作簿以清除资源。

像这样的东西应该是你需要的。

Excel.Workbook wb = new Excel.Workbook();
try {
    wb = exApp.Workbooks.Open(@file);
    //More code...
}
catch (Exception ex) {
    // Do any error handling you need/want to here.
}
finally {
    // If there's a way to determine if the workbook is open, try that first.
    wb.Close(true);
}