2016-08-31 5 views
0

У меня есть приложение winform, и я пытаюсь закрыть excel, не показывая подсказку сохранения. После поиска решений в google и 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 в диспетчере задач.

+0

Возможный дубликат [VBA workbooks.Close без запроса к пользователю, если хочет сохранить?] (http://stackoverflow.com/questions/11220537/vba-workbooks-close-without-being-prompted-to-if-the-user-wants-t o-save) –

+0

@AxelKemper Я ищу решение для C#. Или решение Vb, которое можно легко перевести на C# с помощью онлайн-инструментов. Сообщение, на которое вы ссылаетесь, имеет решение 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 не может быть сохранен, потому что он открыт в режиме только для чтения, поэтому передается false для чтения только при открытии excel. Это не дает мне никаких ошибок, но также не закрывает процесс excel в диспетчере задач. – Arbaaz

+0

Ну, @Arbaaz, потому что вы не разместили фактическое исключение в своем первом, которое у вас должно было быть, я сам его протестировал, и, как вы упомянули в комментарии выше, исключение: 'Дополнительная информация: Невозможно сохранить это имя , Документ был открыт только для чтения. 'Который имеет прекрасный смысл, поскольку вы .Open()' документ Excel в режиме только для чтения! Измените сначала 'true' на' false', а '.Open()' в документе. Я соответствующим образом обновлю ответ. – uTeisT

+0

Я не обвиняю вас в том, что вы потеряли часть только для чтения. Как уже упоминалось в моем комментарии, я обнаружил, что мне нужно установить readonly в false, и я это сделал. Но он все еще не удалял процесс excel из taskmanager. Однако я нашел другой способ решить мою проблему. Но я ценю ваши усилия. – Arbaaz