2016-09-28 2 views
1

Wir haben ein Excel-Office js Add-in auf eckigen geschrieben. Je nachdem, auf welchem ​​Blatt sich der Benutzer befindet, hat er verschiedene Funktionen. Wenn Benutzer die Excel-Blätter wechseln, wie kann die Anwendung sie kennen, so dass sie die Benutzeroberfläche ändern kann, um sie den Funktionen des Blattes anzupassen?Wie identifiziert das Excel-Blatt Ereignis in Office geändert js api?

Antwort

2

Es gibt kein Blatt geändert Ereignis. Eine Problemumgehung wäre jedoch, dass Sie DocumentSelectionChanged-Ereignisse abonnieren und dann jedes Mal das aktive Blatt des Benutzers überprüfen, um festzustellen, ob es sich geändert hat.

+0

Ist dieser Anwendungsfall von verschiedenen Blättern mit unterschiedlicher Funktionalität nicht von Office js unterstützt? – renil

+0

Ich bin mir nicht sicher, ob ich das verstanden habe - die vorgeschlagene Lösung wird Ihnen tatsächlich ermöglichen, die Funktionalität Ihres Add-Ins abhängig vom aktiven Blatt anzupassen, indem Sie Office.js verwenden –

+0

Da die vorgeschlagene Antwort Excel.run bei jedem Zellenänderungsereignis aufrufen muss, Es ist nicht wirklich gut skaliert. Ich frage mich, ob es einen besseren Ansatz gibt. – renil

1

UPDATE 18. Mai 2017: Mit ExcelApi 1.2+ Sie eine neue Syntax

Die neue Syntax lautet wie folgt verwendet werden: context.workbook.onSelectionChanged.add(yourHandler);

Sie können ein vollständiges Beispiel finden, indem Sie Script Lab verwenden, ein kostenloses Add-In zum Ausprobieren von Office Add-In-Snippets. Eine der Proben hat eine "Auswahl Changed" Ereignis-Schnipsel:

Script Lab samples list

==================

Ursprüngliche Antwort:

Wie Michael Saunders sagte, können Sie das Auswahländerungsereignis verwenden. Siehe den folgenden Code. Beachten Sie, dass ich in diesem Fall die Syntax "Office 2013" mit der neueren hostspezifischen Syntax ("Excel." Namespace) von Office 2016 mischt. In der Veröffentlichung "ExcelApi 1.3", die in ein paar Monaten kommt, haben wir tatsächlich eine Möglichkeit, dies vollständig mit der neuen Syntax zu tun, aber das ist derzeit nur auf der Vorschau CDN, und möglicherweise nicht auf Ihrem Computer, abhängig davon, wie neu Ihre Version von Ofice 2016 ist. Der unten stehende Code wird unterdessen mit jeder RTM-Installation von 2016 funktionieren.

Office.context.document.addHandlerAsync(Office.EventType.DocumentSelectionChanged, function() { 
    Excel.run(function(context) { 
     var sheet = context.workbook.worksheets.getActiveWorksheet(); 
     sheet.load("name") 
     return context.sync().then(function() { 
      console.log('You are now on sheet "' + sheet.name + '"'); 
     }) 
    }).catch(function(error) { 
     console.log(error); 
     if (error instanceof OfficeExtension.Error) { 
      console.log("Debug info: " + JSON.stringify(error.debugInfo)); 
     } 
    });  
}); 
+0

Wird dies versuchen. Wann wird dieses Ereignis ausgelöst? Irgendwelche Leistungsprobleme, wenn es mehrere Blätter gibt? Wenn das Ereignis in allen Zellenauswahlen ausgelöst wird, funktionierte es aufgrund von Leistungsproblemen nicht früher. – renil

+0

@ michael-zlatkovsky-microsoft Was ist der Ansatz der API 1.3, dies zu implementieren? – Sameera

+1

Siehe aktualisierte Antwort –

Verwandte Themen