2010-05-19 9 views
0

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?

Répondre

0

Je ne pense pas qu'il y ait d'événement direct qui vous dira quelles cellules sont calculées, car la propagation des événements est fausse sinon la fonction de calcul se terminera par une boucle infinie. Notez également que le changement de feuille déclenche le calcul automatique. Et calculer se produit sur la feuille entière pas seulement les changements, pour s'assurer qu'il n'y a aucune modification dans les adresses de formule. J'espère que cela t'aides.

+0

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

0

Dans le cas où deux utilisateurs modifient les mêmes cellules dans le fichier Excel, le deuxième utilisateur qui enregistre le classeur reçoit une question contextuelle. Cela indique à l'utilisateur qu'elle a modifié une cellule modifiée par un autre utilisateur depuis sa dernière sauvegarde. Elle a la possibilité de garder ses propres changements, et donc de supprimer les autres utilisateurs, ou de supprimer ses changements récents. C'est la pratique courante par défaut lors du partage de feuilles de calcul Excel. Toutefois, ce comportement peut être désactivé dans l'onglet "Avancé" de la fenêtre "Partager le classeur".

En savoir plus: Comment contrôler plusieurs utilisateurs sur une feuille de calcul Excel | ehow.com http://www.ehow.com/how_5913825_control-users-one-excel-spreadsheet.html#ixzz0xcXAZvP1

+1

La question ne concerne pas le partage entre utilisateurs, mais plutôt entre deux applications Excel s'exécutant sur le même PC. Il a été noté dans la réponse précédente que cela n'est pas possible. Ma question de plus haut niveau peut être trouvée ici: http://stackoverflow.com/questions/2861430/how-do-you-place-an-excel-sheet-workbook-onto-a-c-net-winform – incognick

Questions connexes