Tout cela est en C# .NET Excel Interop Automation for Office 2007.Comment répliquer des modifications d'une feuille Excel à une autre dans deux applications Excel différentes?
que vous créez deux applications excel et ouvrir le même classeur pour chaque application:
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);
Maintenant, je veux répliquer les changements qui se produisent dans classeur2, dans le classeur. Je me suis découvert que je peux brancher l'événement SheetChanged pour saisir les changements cellulaires:
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;
}
Comment capter calculer les changements? Je peux m'accrocher à l'événement calculate mais la seule chose qui est passée est la feuille, pas les cellules qui ont été mises à jour. J'ai essayé de forcer une application.Calculate() ou app.CalculateFullRebuild() mais rien ne se met à jour dans l'autre application. L'événement change n'est pas déclenché lorsque les formules changent (un contrôle de curseur entraîne un événement SheetCalculate et non un événement SheetChange)
Existe-t-il un moyen de voir quelles formules ont été mises à jour? Ou existe-t-il un moyen plus simple de synchroniser deux classeurs par programmation en temps réel?
Je vais aller avec ceci comme réponse. Je ne pense pas que Microsoft veuille que les développeurs aient ce contrôle sur leurs applications. Peut-être dans le futur mais pas pour le moment. Merci StevenzNPaul – incognick