Это все в C # .NET Excel Interop Automation для Office 2007.
Допустим, вы создали два приложения 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);
Теперь я хочу скопировать любые изменения, которые происходят в рабочей книге2, в рабочую книгу. Я понял, что могу подключить событие 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 (), но в другом приложении ничего не обновлялось. Событие изменения не запускается при изменении формул (т.е. элемент управления ползунком вызывает событие SheetCalculate, а не событие SheetChange)
Есть ли способ узнать, какие формулы были обновлены? Или есть более простой способ программно синхронизировать две книги в реальном времени?