Zum Hauptinhalt springen

Props-Referenz

Alle Props sind optional. Die Komponente rendert eine leere Tabelle mit Standardeinstellungen, wenn keine Props angegeben werden.

Init-Only-Props

Das Ändern einer dieser Props führt dazu, dass das Widget zerstört und neu erstellt wird. Tabellendaten bleiben erhalten, aber Rückgängig/Wiederherstellen-Verlauf und UI-Zustand (Auswahl, Scrollposition) werden zurückgesetzt.

PropTypBeschreibung
menubooleanKontextmenü anzeigen. Siehe JS-API: menu.
editLinebooleanFormel-/Bearbeitungsleiste über dem Raster anzeigen. Siehe JS-API: editLine.
toolbarBlocksToolbarBlocks[]Anzuzeigende Toolbar-Blöcke. Siehe JS-API: toolbarBlocks.
multiSheetsbooleanMehrere Tabellenblatt-Reiter aktivieren. Siehe JS-API: multisheets.
formatsIFormats[]Benutzerdefinierte Zahlenformatdefinitionen. Siehe JS-API: formats.
localizationISpreadsheetConfig["localization"]Gebietsschema für Zahlen-/Datumsformatierung, z. B. Dezimaltrennzeichen und Währungssymbol. Unabhängig von spreadsheetLocale. Siehe JS-API: localization.
importModulePathstringPfad zum XLSX-Importmodul. Siehe JS-API: importModulePath.
exportModulePathstringPfad zum XLSX-Exportmodul. Siehe JS-API: exportModulePath.
spreadsheetLocaleSpreadsheetLocaleUI-Übersetzungen und lokalisierte Formelnamen. Unabhängig von localization.
Warnung

Das Ändern einer Init-Only-Prop löst einen vollständigen Zerstörungs-/Neuaufbau-Zyklus aus. Rückgängig/Wiederherstellen-Verlauf, Auswahl und Scrollposition werden zurückgesetzt.

Laufzeit-Props

Diese Props werden sofort angewendet, ohne das Widget zu zerstören. Kein Datenverlust oder UI-Zustandsreset.

PropTypBeschreibung
rowsCountnumberAnzahl der Zeilen im Raster. Siehe JS-API: rowsCount.
colsCountnumberAnzahl der Spalten im Raster. Siehe JS-API: colsCount.
readonlybooleanSchreibschutz-Modus aktivieren. Siehe JS-API: readonly.

Daten-Props

Die sheets-Prop ist die einzige Datenquelle für alle Tabelleninhalte. Änderungen werden inkrementell angewendet: Nur geänderte Zellen, Bereiche oder Einstellungen werden im Widget aktualisiert.

PropTypBeschreibung
sheetsSheetData[]Die einzige Datenquelle für alle Tabellendaten. Jeder Eintrag repräsentiert ein Tabellenblatt mit seinen Zellen, seiner Struktur und seinen Metadaten. Änderungen werden inkrementell angewendet.
stylesRecord<string, Record<string, string>>Gemeinsame CSS-Stildefinitionen, auf die über CellData.css verwiesen wird. Schlüssel sind Klassennamen, Werte sind CSS-Eigenschaftszuordnungen. Siehe Styles-Beispiel.
activeSheetIdId des aktiven (sichtbaren) Tabellenblatts. Eine Änderung wechselt den angezeigten Tabellenblatt-Reiter.
Warnung

Das Ändern von styles löst einen vollständigen Datenneulade aus. Tabellendaten bleiben erhalten, aber Rückgängig/Wiederherstellen-Verlauf und UI-Zustand (Auswahl, Scrollposition) werden zurückgesetzt.

Such-Props

Steuert den Zustand der Suchleiste von außerhalb der Komponente. Verwenden Sie dies zusammen mit onSearchResults, um eine benutzerdefinierte Such-UI zu erstellen.

PropTypBeschreibung
searchSearchConfigKontrollierter Suchzustand. Übergeben Sie ein SearchConfig-Objekt, um die Suche auszulösen/zu aktualisieren. Übergeben Sie undefined, um die Suchleiste zu schließen.

Datenladeprops

Tabellendaten von einer Remote-URL laden, anstatt sie über die sheets-Prop bereitzustellen.

PropTypBeschreibung
loadUrlstringURL, von der Tabellendaten geladen werden. Wenn sowohl loadUrl als auch sheets angegeben sind, hat sheets Vorrang.
loadFormatFileFormatDateiformat-Hinweis für loadUrl. Standard: "json".

Theme-Prop

Steuert das visuelle Theme der Tabelle. Da theme eine Laufzeit-Prop ist, wird das Widget sofort aktualisiert, wenn sich der Wert ändert.

PropTypBeschreibung
themeSpreadsheetThemeFarbthema. Integrierte Werte: "light", "dark", "contrast-light", "contrast-dark". Akzeptiert auch benutzerdefinierte Theme-Namen als Strings. Siehe Themes.

Container-Props

Standard-React-DOM-Props, die auf das Wrapper-<div> angewendet werden, das die Tabelle enthält. Verwenden Sie diese, um Größe und Layout zu steuern.

PropTypBeschreibung
classNamestringCSS-Klassenname, der dem Wrapper-<div> hinzugefügt wird.
styleReact.CSSPropertiesInline-Stile, die auf das Wrapper-<div> angewendet werden.

Beispiele

Tabellenblätter mit Zelldaten

Ein vollständiges SheetData-Beispiel mit Zellen, Zeilen- und Spaltengrößen, verbundenen Bereichen und einer fixierten Kopfzeile.

const [sheets, setSheets] = useState<SheetData[]>([
{
id: "sheet1",
name: "Budget",
cells: {
A1: { value: "Item", css: "header" },
B1: { value: "Amount", css: "header", format: "currency" },
A2: { value: "Rent" },
B2: { value: 2000, format: "currency" },
A3: { value: "=SUM(B2:B3)" },
},
rows: { 0: { height: 40 } },
cols: { 0: { width: 150 }, 1: { width: 120 } },
merged: [{
from: { row: 0, column: 0 },
to: { row: 0, column: 1 }
}],
freeze: { row: 1 },
},
]);

<ReactSpreadsheet sheets={sheets} activeSheet="sheet1" />

Styles-Beispiel

Definieren Sie benannte Stile als CSS-Eigenschaftszuordnungen in der styles-Prop und verweisen Sie dann über CellData.css namentlich auf sie.

const styles = {
header: {
"font-weight": "bold",
"background": "#e3f2fd",
"color": "#1565c0",
},
highlight: {
"background": "#ffeb3b",
"color": "#333",
},
};

<ReactSpreadsheet sheets={sheets} styles={styles} />

Toolbar-Anpassung

<ReactSpreadsheet
sheets={sheets}
toolbarBlocks={["undo", "colors", "decoration", "align", "format"]}
/>

Mehrseitiger Modus

Aktivieren Sie Tabellenblatt-Reiter mit multiSheets={true}. Übergeben Sie false, um die Reiterleiste vollständig auszublenden.

<ReactSpreadsheet sheets={sheets} multiSheets={true} />
<ReactSpreadsheet sheets={sheets} multiSheets={false} />

Excel Import/Export

<ReactSpreadsheet
sheets={sheets}
importModulePath="../libs/excel2json/next/worker.js"
exportModulePath="../libs/json2excel/next/worker.js"
/>

Um eine bestimmte Version zu verwenden, ersetzen Sie next durch die Versionsnummer (prüfen Sie die GitHub-Repositories Excel2Json und Json2Excel).

Europäische Zahlenformatierung

<ReactSpreadsheet
sheets={sheets}
localization={{
decimal: ",",
thousands: ".",
currency: "€",
}}
/>

Übergeben Sie ein SearchConfig-Objekt, um die Suchleiste programmatisch zu öffnen. Verwenden Sie onSearchResults, um die übereinstimmenden Zellreferenzen zu empfangen.

const [search, setSearch] = useState<SearchConfig | undefined>();
const [results, setResults] = useState<string[]>([]);

<input onChange={(e) =/> setSearch({ query: e.target.value, open: true })} />
<button onClick={() => setSearch(undefined)}>Close Search</button>
<p>Found in: {results.join(", ")}</p>

<ReactSpreadsheet
sheets={sheets}
search={search}
onSearchResults={setResults}
/>

Theme-Wechsel

const [theme, setTheme] = useState<SpreadsheetTheme>("light");

<select onChange={(e) => setTheme(e.target.value as SpreadsheetTheme)}>
<option value="light">Light</option>
<option value="dark">Dark</option>
<option value="contrast-light">Contrast Light</option>
<option value="contrast-dark">Contrast Dark</option>
</select>

<ReactSpreadsheet sheets={sheets} theme={theme} />

Schreibschutz-Modus

<ReactSpreadsheet sheets={sheets} readOnly={true} />

Daten von URL laden

<ReactSpreadsheet loadUrl="/api/spreadsheet-data" loadFormat="json" />

Gesperrte Zellen

Markieren Sie einzelne Zellen mit locked: true als nicht bearbeitbar. Im Gegensatz zu readonly schützt dies bestimmte Zellen, während der Rest des Tabellenblatts bearbeitbar bleibt.

const sheets: SheetData[] = [
{
id: "sheet1",
name: "Protected",
cells: {
A1: { value: "Header", locked: true },
A2: { value: "Editable" },
},
},
];

<ReactSpreadsheet sheets={sheets} />

Zellvalidierung

Übergeben Sie ein String-Array an CellData.validation, um die Zelle auf ein Dropdown mit erlaubten Werten zu beschränken.

const sheets: SheetData[] = [
{
id: "sheet1",
name: "Form",
cells: {
A1: { value: "Status" },
B1: { validation: ["Active", "Inactive", "Pending"] },
},
},
];

<ReactSpreadsheet sheets={sheets} />