c#.net interop beforesave not firing

基本上我想创build一个excelpipe理软件,客户可以把他们的excel文件直接保存到数据库中。 为了达到这个目的,我试图用一个特定的模板或文件打开一个excel工作表,然后让用户修改它,当用户保存工作时,它会自动将excel程序保存到数据库中。

所以我到目前为止所做的是在保存之前testing事件并且不会触发:

static void Main() { System.Windows.Forms.Application.EnableVisualStyles(); System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false); //Application.Run(new LoginForm()); Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); Microsoft.Office.Interop.Excel.Application a = new Microsoft.Office.Interop.Excel.Application(); Workbook wb = a.Workbooks.Open("\\\\doctor-pc\\excel\\test1.xlsx", Type.Missing, false, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); wb.BeforeSave += new WorkbookEvents_BeforeSaveEventHandler(wb_BeforeSave); a.Visible = true; } static void wb_BeforeSave(bool SaveAsUI, ref bool Cancel) { MessageBox.Show("Save"); } 

有人可以帮我弄这个吗?

我不能使用应用程序级插件,因为我只想要影响程序打开的文档的行为,我不能使用文档级添加,因为程序可能会打开很多种文件和模板。

  1. 您需要维护对您的wbvariables的实时参考(例如,将其提升到一个字段)。 如果Workbook实例超出范围并被垃圾收集,那么它的事件将永远不会被解雇。

  2. 您需要保持您的.NET应用程序打开,以便能够接收和处理BeforeSave事件。 你可以通过创build一个EventWaitHandle来阻塞Main方法,直到用wb_BeforeSave事件处理程序发送信号。