これはすべて、C# .NET Excel Interop Automation for Office 2007 にあります。
2 つの Excel アプリを作成し、各アプリケーションで同じブックを開くとします。
app = new Excel.ApplicationClass();
app2 = new Excel.ApplicationClass();
string fileLocation = "myBook.xslx";
workbook = app.Workbooks.Open(fileLocation,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);
workbook2 = app2.Workbooks.Open(fileLocation,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);
次に、workbook2 で発生したすべての変更を workbook にレプリケートします。SheetChanged イベントをフックして、セルの変更をキャプチャできることがわかりました。
app.SheetChange += new Microsoft.Office.Interop.Excel.AppEvents_SheetChangeEventHandler(app_SheetChange);
void app_SheetChange(object Sh, Microsoft.Office.Interop.Excel.Range Target)
{
Excel.Worksheet sheetReadOnly = (Excel.Worksheet)Sh;
string changedRange = Target.get_Address(missing, missing,
Excel.XlReferenceStyle.xlA1, missing, missing);
Console.WriteLine("The value of " + sheetReadOnly.Name + ":" +
changedRange + " was changed to = " + Target.Value2);
Excel.Worksheet sheet = workbook.Worksheets[sheetReadOnly.Index] as Excel.Worksheet;
Excel.Range range = sheet.get_Range(changedRange, missing);
range.Value2 = Target.Value2;
}
計算の変更をどのようにキャプチャしますか? 計算イベントにフックすることはできますが、渡されるのは更新されたセルではなく、シートだけです。app.Calculate() または app.CalculateFullRebuild() を強制しようとしましたが、他のアプリケーションでは何も更新されません。数式が変更された場合、変更イベントは発生しません (つまり、スライダー コントロールによって SheetChange イベントではなく SheetCalculate イベントが発生します)。
どの数式が更新されたかを確認する方法はありますか? または、2 つのワークブックをプログラムによってリアルタイムで同期する簡単な方法はありますか?