2014-03-15 3 views
1

Я хочу поймать кнопку «не сохранять». Нажмите кнопку «Сохранить», когда пользователь пытается закрыть книгу Excel, но есть несохраненные изменения.Как поймать действия пользователя после закрытия рабочей книги Excel

Мой случай: пользователь открывает файл первенствовать что-то изменить в файле и нажать кнопку, чтобы закрыть приложение Excel отобразит «Вы хотите сохранить изменения» диалоговое окно, и я хочу, чтобы обрабатывать случаи когда пользователь не примет или отменяет. Я не хочу переключать экран и показывать пользователю свой собственный диалог в своем приложении, пользователь не будет рад за это решение. Если есть способ справиться с этим, пожалуйста, дайте мне знать.

Вот мой код:

_xlsApp = new Excel.Application(); 
_xlsApp.WorkbookBeforeClose += new Excel.AppEvents_WorkbookBeforeCloseEventHandler(xlsApp_WorkbookBeforeClose); 
_xlsApp.WorkbookBeforeSave += new Excel.AppEvents_WorkbookBeforeSaveEventHandler(xlsApp_WorkbookBeforeSave); 
+0

Вы хотите сохранить или отменить (или подавить эту операцию) изменения или оставить это решение для пользователя? – pasty

+0

оставьте это решение пользователю и поймайте его действие, когда пользователь будет нажимать на кнопку не сохранять. – artos

+0

Вы не можете обрабатывать/перехватывать диалоговое окно по умолчанию, и если вы обрабатываете событие самостоятельно, вам нужно добавить свою собственную функциональность, которая имитирует по умолчанию. – pasty

ответ

1

IMO Вы должны перезаписать по умолчанию сохранения/не сохранять изменения событие с обычаем один.

В вашем перед сохранением обработчика событий:

  • проверка, если книга имеет несохраненные изменения, используя Workbook.Saved property
  • если да, то показать пользовательские есть несохраненные изменения - сохранить или отменить диалоговое окно и получить ответ пользователя да/нет (example in this article)
  • вы всегда можете отменить событие сохранения - MSDN documentation of the BeforeSave event that shows how to cancel
  • или сохранить изменения, используя Workbook.Save method

Таким образом, решение остается пользователю (по умолчанию, ничего не меняет с точки зрения пользователя), но вы можете делать все, что вы хотите сделать до или после рабочая книга сохраняется.

Если пользователь закрывает приложение, он будет первым в перед закрытием события. У вас есть два варианта: - проверьте здесь, если есть какие-либо изменения, и aks пользователь и сохраните ответ и используйте ответ позже в перед сохранением event - или пропустите это событие - если есть несохраненные изменения, в любом случае перейдите к перед тем, как сохранить событие, где вы можете действовать, как показано выше; от MSDN If the workbook has been changed, this event occurs before the user is asked to save changes.

+0

большое спасибо, но: 1. Я пометил C# 2. это не решит мою проблему, потому что пользователь увидит 2 диалога изменений изменений, один в моем приложении 2nd в excel Application – artos

+0

Ссылки MSDN для объектной модели , который используется при автоматизации Excel с C# - у вас есть ссылка на сборки Excel, которые дают вам именно этот API, а Excel-Link - объяснить идею настраиваемого диалога! Вы можете использовать * SaveAsUI * параметр для ** подавить ** диалог по умолчанию: 'SaveAsUI - Required - Boolean - True, если будет отображаться диалоговое окно« Сохранить как ».'(см. документацию). Затем вы можете продолжить, как было предложено. – pasty

+0

ОК! последняя проблема в этом решении заключается в следующем: пользователь увидит диалог сохранения изменений в моем приложении, и, возможно, пользователь не будет рад этому, но если нет способа справиться с отменой Excel или не сохранять кнопку, возможно, это нормально – artos

Смежные вопросы