我正在尝试通过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建议的那样,我尝试在底部添加Finally,但是在打开文件的第二次试用后我仍然会收到消息框。
答案 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.
您只想获取值,因此以只读方式打开它应该足够了。