2016-08-31 47 views
0

我有一个winform应用程序,我试图在不显示保存提示的情况下关闭excel。在谷歌和stackoverflow寻找解决方案后,这是我想出了,但它不适合我。无法在不显示提示的情况下关闭excel

string filepath = string.Empty; 
       string reportname = lblreportname.Text; 
       filepath = Application.StartupPath + "\\StandardReports\\" + reportname + ".xls"; 

       Microsoft.Office.Interop.Excel.Application xlApp; 
       Microsoft.Office.Interop.Excel.Workbook xlWorkBook; 
       Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; 
       object misValue = System.Reflection.Missing.Value; 

       xlApp = new Microsoft.Office.Interop.Excel.Application(); 
       xlWorkBook = xlApp.Workbooks.Open(filepath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
       List<string> WorksheetList = new List<string>(); 

       xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(lsvSelectedQ.SelectedItem.ToString()); 

       Microsoft.Office.Interop.Excel.Range objRange = null; 

       objRange = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[1, 5]; 
       string intrvl = objRange.Value.ToString(); 

//more code 

xlApp.DisplayAlerts = false; 
       xlWorkBook.Save(); 
       xlWorkBook.Close(); 
       xlApp.DisplayAlerts = true; 
       xlApp.Quit(); 

随着xlApp.DisplayAlerts = false;我能够取消提示,但我也无法关闭Excel。我仍然可以在任务管理器中看到excel进程。

+0

[VBA workbooks.Close的可能的复制而不会被提示,如果用户想保存?](http://stackoverflow.com/questions/11220537/vba-workbooks-close-without-being-prompted-to-if-the-user-wantst o-save) –

+0

@AxelKemper我正在寻找一个C#解决方案。或者可以使用在线工具轻松转换为C#的Vb解决方案。你提到的帖子有vba解决方案。 – Arbaaz

+0

你有没有尝试删除第二个'DisplayAlerts'部分?我做了'DisplayAlerts = false','Save()','Close()'和'Quit()',它对我来说很好用 – uTeisT

回答

0

变化

xlWorkBook = xlApp.Workbooks.Open(filepath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 

xlWorkBook = xlApp.Workbooks.Open(filepath, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 

参数xlApp.Workbooks.Open()

Workbook Open(string Filename, object UpdateLinks, object ReadOnly, object Format, object Password, object WriteResPassword, object IgnoreReadOnlyRecommended, object Origin, object Delimiter, object Editable, object Notify, object Converter, object AddToMru, object Local, object CorruptLoad); 
+0

这段代码给了我一个错误,即excel无法保存,因为它处于只读模式,因此在打开excel时将false设置为只读。它不会给我任何错误,但它也不会关闭任务管理器中的excel进程。 – Arbaaz

+0

好吧,@Arbaaz因为你没有在你的第一个帖子中发布实际的异常,你应该有,我自己测试了它,正如你在上面的评论中提到的那样,这个异常是'附加信息:不能保存为这个名称。文档是以只读方式打开的,这在您以'只读模式打开()'Excel文档时非常有意义! '.Open()'文档时,首先将'true'改为'false'。我会相应地更新答案。 – uTeisT

+0

我不是因为缺少只读部分而责怪你。正如我在评论中已经提到的那样,我发现我需要将readonly设置为false,然后我才做到。但它仍然没有从taskmanager中删除excel进程。然而,我发现了另一种解决我的问题的方法。但我感谢你的努力。 – Arbaaz

相关问题