Не удалось закрыть приложения PowerPoint с помощью офиса-взаимодействие с#
Дорогие Все,
Мы автоматизируем MsOffice в приложении winform (C#).
В настоящее время мы работаем над тем, чтобы создать файл powerpoint(программно). Мы успешно создали pptx-файл.
После создания pptx-файла мы пытаемся закрыть как презентацию, так и приложение. Его clsoing только презентация, но не приложение ppt.
Mycode в
Что я уже пробовал:
private static void QuitApplication(PowerPointInterop.Application powerPointApplication) { if (powerPointApplication != null) { try { powerPointApplication.DisplayAlerts = PowerPointInterop.PpAlertLevel.ppAlertsNone; powerPointApplication.Visible = Microsoft.Office.Core.MsoTriState.msoFalse; powerPointApplication.Quit(); Marshal.FinalReleaseComObject(powerPointApplication.Presentations); Marshal.FinalReleaseComObject(powerPointApplication); powerPointApplication = null; GC.Collect(); GC.WaitForPendingFinalizers(); // GC needs to be called twice in order to get the Finalizers called // - the first time in, it simply makes a list of what is to be // finalized, the second time in, it actually is finalizing. Only // then will the object do its automatic ReleaseComObject. GC.Collect(); } catch (Exception) { //Ignore } } }
public static bool CreateNewFile(IQuestion question, string filename) { WinUtil.DeleteFile(filename); if (File.Exists(filename)) return false; PowerPointInterop.Application powerpointApplication = null; try { //Avoid screen flickering or unwanted alerts while initializing powerpointApplication = new PowerPointInterop.Application(); // Create the Presentation File PowerPointInterop.Presentation pptPresentation = powerpointApplication.Presentations.Add(MsoTriState.msoTrue); pptPresentation.SaveAs(filename, PowerPointInterop.PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoTriStateMixed); pptPresentation.Close(); powerpointApplication.Quit(); return true; } catch (Exception) { return false; } finally { QuitApplication(powerpointApplication); } }
Ссылка: Приложение Office C# автоматизирует образец PowerPoint (CSAutomatePowerPoint) на языке C# для Visual Studio 2010[^]
кто-нибудь может пожалуйста помочь мне.
Спасибо
CHill60
Удалите блоки try-catch, чтобы вы могли определить, возникает ли исключение
abdul subhan mohammed
Я попытался удалить блок try-catch, но никаких исключений не возникло.
Michael_Davies
Всякий раз, когда я использую ComObject, я нахожу, что должен зацикливаться до тех пор, пока релиз не вернет ноль, никогда не использовал final, так что не уверен, есть ли разница, но один вызов не всегда освобождает COM-ссылку;
В То Время Как Система.Во время выполнения.InteropServices.Маршал.ReleaseComObject (Excel) < & gt; 0
Приложение.Функция doevents()
Конец Пока
Barry_Sharp
Так же, как и FYI, вы могли бы подумать о том, чтобы избежать хлопот, связанных с COM-интерфейсом, используя чистое решение C#. Например, вы можете проверить это Библиотека PowerPoint на языке C# для презентаций Например, вот как вы создадите с его помощью новую презентацию:
Презентация метод presentationdocument = новый метод presentationdocument();
презентация.Сохранить("empty-presentation.pptx");