无法从c#应用程序打开excel文件
我试图通过无法从c#应用程序打开excel文件,c#,visual-studio-2012,C#,Visual Studio 2012,我试图通过打开文件对话框打开excel文件,但出现以下错误 这是我写的代码,让我知道哪里出错了 Excel.Application excelApp = new Excel.Application(); Excel.Workbook newWorkbook = excelApp.Workbooks.Add(); Excel.Workbook excelWorkbook = null; OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter
打开文件对话框
打开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,但在第二次尝试打开文件后,我仍然会收到消息框。一旦完成,您应该关闭文件并退出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);
}
这是第一次,此错误不存在,下次读取文件时会出现此错误。您应该关闭文件并在完成此操作后退出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作为第三个参数。打开。MSDN:
您只想获取值,因此以只读方式打开它就足够了。尝试为工作簿提供true作为第三个参数。打开。MSDN:
您只想获取值,因此以只读方式打开它就足够了。好吧,代码中缺少一行-: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.:) 嗯,代码中缺少一行-: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中打开了同一个文件?没有,我没有打开该文件虽然没有解决当前的问题,但我想我会给出一个提示,我一直认为使用Excel更容易。你有没有可能已经在Excel中打开了同一个文件?没有,我没有打开该文件虽然没有解决当前的问题,但我想我会给出一个提示,我一直认为使用Excel比使用Excel更容易。不起作用,仍然是相同的错误,“执行点”位于try
块时会显示错误消息框,因此我认为添加finally不会有帮助。请从任务管理器中删除所有“Excel”进程,然后再试一次,它应该可以工作,Excel对于终止其进程非常固执。我刚试过,效果很好。嗯,试过了,但运气不好,我的文件根本打不开。。excelApp.Workbooks.Open是否有问题(路径,0,false,5,“,”,false,Excel.XlPlatform.xlWindows,“,true,false,0,true,false,false)@Vin,这是正确的,如果是错误的,文件在第一次迭代中不会打开,问题是它没有正确关闭。您是否尝试添加此封送处理。ReleaseComObject(excelApp);不起作用,仍然是同一个错误,当“执行点”在try
块中时会显示错误消息框,因此我认为添加finally不会有帮助。从任务管理器中删除所有“Excel”进程,然后再试一次,它应该会起作用,Excel对于终止其进程非常固执。我刚试过,效果很好。嗯,试过了,但运气不好,我的文件根本打不开。。excelApp.Workbooks.Open是否有问题(路径,0,false,5,“,”,false,Excel.XlPlatform.xlWindows,“,true,false,0,true,false,false)@Vin,这是正确的,如果是错误的,文件在第一次迭代中不会打开,问题是它没有正确关闭。您是否尝试添加此封送处理。ReleaseComObject(excelApp)@维姆,如果你认为我的答案有用,请把我们的答案投上一票,这就是说谢谢的方法@是的,如果我认为你的答案有用,我一定会这么做的!:)这甚至是我表达感谢的方式……)@维姆,如果你认为我的答案有用,请把我们的答案投上一票,这就是说谢谢的方法@是的,如果我认为你的答案有用,我一定会这么做的!:)这甚至是我表达感谢的方式……)