1

基本上我想创建一个excel管理软件,客户可以将他们的excel文件直接保存到数据库中。为了实现这一点,我尝试用某个模板或文件打开一个excel工作表,然后让用户修改它,当用户保存他们的工作时,它会自动将excel程序保存到数据库中。

所以到目前为止我所做的是在保存之前测试事件并且它没有触发:

    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");
    }

有人可以帮我弄这个吗?

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

4

1 回答 1

2
  1. 您需要维护对wb变量的实时引用(例如,通过将其提升到字段)。如果Workbook实例超出范围并被垃圾收集,那么它的事件将永远不会被触发。

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

于 2012-06-08T20:10:16.227 回答