无法从c#应用程序打开excel文件

时间:2013-09-03 11:53:29

标签: c# visual-studio-2012

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

enter image description here

这是我写的代码,知道它出错的地方

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建议的那样,我尝试在底部添加Finally,但是在打开文件的第二次试用后我仍然会收到消息框。

3 个答案:

答案 0 :(得分: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文件。此外,如果用户未选择任何文件并关闭文件对话框,则关闭应用程序和工作簿会抛出 unhandeled NullReferenceException 。所以我改进了块,它现在看起来像

finally
{
    Marshal.ReleaseComObject(excelApp);
}

只有一个问题,一个新文件和所选文件一起打开,这不是现在的问题,但我正在努力关闭新打开的文件。谢谢你的回复@pankaj和@Csaba。 :)

答案 1 :(得分:0)

你应该关闭你的文件并在完成后退出excel,所以在代码的最后添加这个东西

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);  
}

第一次出现此错误,下次读取文件时会出现此错误。

答案 2 :(得分: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.

您只想获取值,因此以只读方式打开它应该足够了。