Freigeben über


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 , numberbooleanoder stringist. Sie erhalten einen Kompilierzeitfehler (ein Fehler vor dem Ausführen des Skripts), wenn eine Variable explizit als Typ any im Skript definiert ist.

Die explizite

Der explizite

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, numberoder 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.

Die implizite

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; oder let 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 Promiseinteragieren.

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