6

現在のブックへの参照を保持したまま、保存されたExcelブックを開こうとしています。問題は、保存したブックを開くとすぐに、元のブックがアクセス時に例外をスローすることです。

これがデモンストレーション用のコードスニペットです。これをリボンボタンのイベントハンドラーに入れてテストします。

try
{
    string workbookPath = @"C:\Temp\Test.xlsx";
    Workbook current = Globals.ThisAddIn.Application.ActiveWorkbook;
    Workbook newWorkbook = Globals.ThisAddIn.Application.Workbooks.Open(workbookPath);

    current.Activate();                   // throws an exception
    Sheets sheets = current.Worksheets;   // throws an exception
    string name = current.Name;           // throws an exception
}
catch (Exception ex) {}

デバッグしてウォッチと変数を設定するとcurrent、インスタンス化されるとすぐに、他の変数にアクセスすると例外がスローされることがわかります。sheetsnamenewWorkbook

スローされる例外は

System.Runtime.InteropServices.COMException was caught
  Message=Exception from HRESULT: 0x800401A8
  Source=WorkbookTest
  ErrorCode=-2147221080
  StackTrace:
       at Microsoft.Office.Interop.Excel._Workbook.Activate()
       at WorkbookTest.Ribbon1.button1_Click(Object sender, RibbonControlEventArgs e) in C:\Temp\WorkbookTest\WorkbookTest\Ribbon1.cs:line 25
  InnerException: 

最も奇妙なことは、これがExcelの新しいインスタンスでのみ発生することです。Excelを開き、最初のブックを閉じて新しいブックを開くと、問題なく動作します。これが失敗するのは、新しく開いたExcelのインスタンスがある場合のみです。それがなぜなのか本当にわかりません。

誰かがこれを修正する方法を知っていますか?私はここで何か間違ったことをしていますか?

4

2 に答える 2

6

これが正しい動作かもしれないと思います。

新しいExcelセッションを手動で開始し(新しいブック[Book1]を自動的に作成します)、Book1に何もせずに既存のブックを開くと、Book1がExcelセッションに存在しなくなったことに気付くでしょう。

C#アドインを介して同じ動作が発生していると思います。

于 2012-04-24T14:30:07.250 に答える
2

これは、「creamyegg」で説明されている正しい動作です。

Excelは、一時的なブックが使用されていない場合、それを破棄します。この問題を回避するには、別のシートを開く前にシートを使用する必要があります。

空のセルを見つけて変更してください!あなたのワークブックは残り、あなたはあなたのビジネスに取り掛かることができます。:)

于 2014-04-02T04:33:54.613 に答える