繁体   English   中英

无法从C#应用程序打开Excel文件

[英]unable to open excel file from c# application

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

在此处输入图片说明

这是我编写的代码,我知道哪里出了问题

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所建议的那样,我尝试在底部添加“最终”,但在第二次打开文件的尝试后仍收到消息框。

好吧,代码中缺少的一行是-: 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。 :)

完成此操作后,您应该关闭文件并退出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);  
}

第一次,该错误不存在,下次读取文件时将出现此错误。

尝试提供true作为Workbooks.Open的第三个参数。 MSDN: http : //msdn.microsoft.com/zh-CN/library/office/microsoft.office.interop.excel.workbooks.open.aspx

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM