TypeScript-Einschränkungen in Office-Skripts
Office-Skripts verwenden die Sprache TypeScript. In den meisten Fällen funktioniert jeder TypeScript- oder JavaScript-Code in Office-Skripts. Es gibt jedoch einige Einschränkungen, die vom Code-Editor erzwungen werden, um sicherzustellen, dass Ihr Skript konsistent und wie beabsichtigt mit Ihrer Excel-Arbeitsmappe funktioniert.
Kein "Any"-Typ in Office-Skripts
Das Schreiben von Typen ist in TypeScript optional, da die Typen abgeleitet werden können. Office-Skripts erfordern jedoch, dass eine Variable nicht vom Typ "Any" sein darf. Sowohl explizite als auch implizite any
sind in Office-Skripts nicht zulässig. Diese Fälle werden als Fehler gemeldet.
Explizit any
Sie können eine Variable in Office-Skripts nicht explizit als Typ any
deklarieren (d. b let value: any;
. ). Der any
Typ verursacht Probleme, wenn er von Excel verarbeitet wird. Ein muss z. B. wissen, Range
dass ein Wert ein , number
boolean
oder string
ist. Sie erhalten einen Kompilierzeitfehler (ein Fehler vor dem Ausführen des Skripts), wenn eine Variable explizit als Typ any
im Skript definiert ist.
Im vorherigen Screenshot gibt an, [2, 14] Explicit Any is not allowed
dass Zeile 2, Spalte 14 den any
Typ definiert. Dies hilft Ihnen, den Fehler zu finden.
Um dieses Problem zu umgehen, definieren Sie immer den Typ der Variablen. Wenn Sie sich über den Typ einer Variablen nicht sicher sind, können Sie einen Union-Typ verwenden. Dies kann für Variablen nützlich sein, die Werte enthalten Range
, die vom Typ string
, number
oder boolean
sein können (der Typ für Range
Werte ist eine Vereinigung dieser Werte: string | number | boolean
).
Implizite any
TypeScript-Variablentypen können implizit definiert werden. Wenn der TypeScript-Compiler nicht in der Lage ist, den Typ einer Variablen zu bestimmen (entweder weil der Typ nicht explizit definiert ist oder ein Typrückschluss nicht möglich ist), ist dies implizit any
, und Sie erhalten einen Kompilierungsfehler.
Der häufigste Fall für implizite any
ist in einer Variablendeklaration, z let value;
. B. . Es gibt zwei Möglichkeiten, dies zu vermeiden:
- Weisen Sie die Variable einem implizit identifizierbaren Typ (
let value = 5;
oderlet value = workbook.getWorksheet();
) zu. - Geben Sie die Variable explizit ein (
let value: number;
)
Keine vererbenden Office-Skriptklassen oder -Schnittstellen
Klassen und Schnittstellen, die in Ihrem Office-Skript erstellt werden, können keine Office-Skriptklassen oder -Schnittstellen erweitern oder implementieren . Anders ausgedrückt: Nichts im ExcelScript
Namespace kann Unterklassen oder Unterinterfaces aufweisen.
Inkompatible TypeScript-Funktionen
Office-Skript-APIs können in folgenden Themen nicht verwendet werden:
eval
wird nicht unterstützt.
Die JavaScript eval-Funktion wird aus Sicherheitsgründen nicht unterstützt.
Eingeschränkte Bezeichner
Die folgenden Wörter können nicht als Bezeichner in einem Skript verwendet werden. Dabei handelt es sich um reservierte Bedingungen.
Excel
ExcelScript
console
Nur Pfeilfunktionen in Arrayrückrufen
Ihre Skripts können nur Pfeilfunktionen verwenden, wenn Rückrufargumente für Arraymethoden bereitgestellt werden. Sie können keine Art von Bezeichner oder "herkömmlicher" Funktion an diese Methoden übergeben.
const myArray = [1, 2, 3, 4, 5, 6];
let filteredArray = myArray.filter((x) => {
return x % 2 === 0;
});
/*
The following code generates a compiler error in the Office Scripts Code Editor.
filteredArray = myArray.filter(function (x) {
return x % 2 === 0;
});
*/
Unions von ExcelScript
Typen und benutzerdefinierten Typen werden nicht unterstützt.
Office-Skripts werden zur Laufzeit von synchronen in asynchrone Codeblöcke konvertiert. Die Kommunikation mit der Arbeitsmappe über Zusagen ist für den Skriptersteller ausgeblendet. Diese Konvertierung unterstützt keine Union-Typen , die Typen und benutzerdefinierte Typen enthalten ExcelScript
. In diesem Fall wird an Promise
das Skript zurückgegeben, aber der Office-Skriptcompiler erwartet dies nicht, und der Skriptersteller kann nicht mit Promise
interagieren.
Das folgende Codebeispiel zeigt eine nicht unterstützte Vereinigung zwischen ExcelScript.Table
und einer benutzerdefinierten MyTable
Schnittstelle.
function main(workbook: ExcelScript.Workbook) {
const selectedSheet = workbook.getActiveWorksheet();
// This union is not supported.
const tableOrMyTable: ExcelScript.Table | MyTable = selectedSheet.getTables()[0];
// `getName` returns a promise that can't be resolved by the script.
const name = tableOrMyTable.getName();
// This logs "{}" instead of the table name.
console.log(name);
}
interface MyTable {
getName(): string
}
Konstruktoren unterstützen keine Office-Skript-APIs und console
-Anweisungen.
console
-Anweisungen und viele Office-Skript-APIs erfordern eine Synchronisierung mit der Excel-Arbeitsmappe. Diese Synchronisierungen verwenden await
Anweisungen in der kompilierten Laufzeitversion des Skripts. await
wird in Konstruktoren nicht unterstützt. Wenn Sie Klassen mit Konstruktoren benötigen, vermeiden Sie die Verwendung von Office-Skript-APIs oder console
-Anweisungen in diesen Codeblöcken.
Im folgenden Codebeispiel wird dieses Szenario veranschaulicht. Es wird ein Fehler generiert, der besagt failed to load [code] [library]
.
function main(workbook: ExcelScript.Workbook) {
class MyClass {
constructor() {
// Console statements and Office Scripts APIs aren't supported in constructors.
console.log("This won't print.");
}
}
let test = new MyClass();
}
Leistungswarnungen
Der Linter des Code-Editors gibt Warnungen aus, wenn das Skript möglicherweise Leistungsprobleme hat. Die Fälle und deren Umgehung sind unter Verbessern der Leistung Ihrer Office-Skripts dokumentiert.
Externe API-Aufrufe
Weitere Informationen finden Sie unter Unterstützung externer API-Aufrufe in Office-Skripts .
Siehe auch
Office Scripts