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をブロックするを作成することで実現できます。Mainwb_BeforeSave

于 2012-06-08T20:10:16.227 に答える