1

我正在尝试通过打开一个 excel 文件,open file dialog但出现以下错误

在此处输入图像描述

这是我写的代码,让我知道哪里出错了

Excel.Application excelApp = new Excel.Application();
Excel.Workbook newWorkbook = excelApp.Workbooks.Add();  
Excel.Workbook excelWorkbook = null;
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Excel Files |*.xlsx";
ofd.InitialDirectory = @"C:\";
if (ofd.ShowDialog() == DialogResult.OK)
{
    string path = System.IO.Path.GetFullPath(ofd.FileName);
    try
    {
        excelWorkbook = excelApp.Workbooks.Open(path,
        0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
        true, false, 0, true, false, false);
    }
    catch (Exception theException)
    {
        String errorMessage;
        errorMessage = "Error: ";
        errorMessage = String.Concat(errorMessage, theException.Message);
        errorMessage = String.Concat(errorMessage, " Line: ");
        errorMessage = String.Concat(errorMessage, theException.Source);
        MessageBox.Show(errorMessage, "Error");
    }
}

我这样做是因为我需要从 excel 表中获取值。如果您需要更多详细信息,请告诉我。

编辑-:当我仔细观察时,我了解到第一次尝试打开文件时没有提示消息框,但是文件没有打开,然后在每次连续尝试打开文件时都会出现消息框。正如@Pankaj 所建议的,我尝试在底部添加最后,但在第二次尝试打开文件后我仍然收到消息框。

4

3 回答 3

1

好吧,代码中缺少的一行是-:excelApp.Visible = true;

代码现在看起来像-:

excelWorkbook = excelApp.Workbooks.Open(path,
            0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
            true, false, 0, true, false, false);
// do the operations on file
.
.
// open the file here 
excelApp.Visible = true;

正如@Pankaj 所建议的,我申请了

finally
{
    excelWorkbook.Close();
    excelApp.Application.Quit();
    Marshal.ReleaseComObject(excelApp);
}

但这样做的问题是,当我们关闭工作簿和 excel 应用程序时,文件会立即关闭,我不希望文件关闭,因为我会执行操作,然后用户会查看 excel 文件。此外,如果用户未选择任何文件并关闭文件对话框,则关闭应用程序和工作簿会引发未处理的NullReferenceException 。所以我改进了块,现在看起来像

finally
{
    Marshal.ReleaseComObject(excelApp);
}

虽然只有一个问题,一个新文件和选定的文件一起打开,它现在不是问题,但我正在努力关闭新打开的文件。感谢您的回答@pankaj 和@Csaba。:)

于 2013-09-04T04:57:49.177 回答
0

完成后,您应该关闭文件并退出 excel,因此在代码末尾添加这个 finally

try
{
    excelWorkbook = excelApp.Workbooks.Open(path,
    0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
    true, false, 0, true, false, false);
    // ... Do all your processing with excel file here
}
catch (Exception theException)
{
    String errorMessage;
    errorMessage = "Error: ";
    errorMessage = String.Concat(errorMessage, theException.Message);
    errorMessage = String.Concat(errorMessage, " Line: ");
    errorMessage = String.Concat(errorMessage, theException.Source);
    MessageBox.Show(errorMessage, "Error");
}
finally
{
   excelWorkbook.Close();
   excelApp.Application.Quit();
   Marshal.ReleaseComObject(excelApp);  
}

第一次没有这个错误,下次读取文件时会出现这个错误。

于 2013-09-03T12:28:13.300 回答
0

尝试提供 true 作为Workbooks.Open. MSDN:http: //msdn.microsoft.com/en-us/library/office/microsoft.office.interop.excel.workbooks.open.aspx

ReadOnly
    Type: System.Object
    Optional Object. True to open the workbook in read-only mode.

您只想获取值,因此以只读方式打开它对您来说就足够了。

于 2013-09-03T17:10:05.063 回答