Verwenden von Formeln (Expert)
Formatierung
Optische Formatierung für Summenzeile wird über die addFormat Funktion der writer-Klasse realisiert.
const format = exporter.writer.addFormat("footerTemplate")
format.setBorderStyle("top", exporter.writer.BORDER_MEDIUM)
format.setBorderStyle("bottom", exporter.writer.BORDER_DOUBLE)
format.setNumberFormat("#,##0.00 €")
Ergebnis:
Summenberechnung
Bei der Summenberechnung verwenden wir die SUM() Formel von Excel.
// Zeile, Spalte, Formular, Format (von oben)
exporter.worksheet.writeFormula(6, 0, "SUM(A4:A6)", format)
Ergebnis:
Komplettes Beispiel
In dem Beispiel wird davon ausgegangen, dass eine Überschrift angegeben wurde. Ist keine Überschrift vorhanden, so muss exporter.offsetRowsWithTitle durch exporter.offsetRows ersetzt werden. Weitere Infos, siehe API.
context.enableModules();
const { MultiTableXlsxExporter } = require("ou.sp.gadget.MultiTableXlsxExporter");
const filePath = util.getTmpPath() + "test.xlsx"
const options = {
title: "Eine Überschrift",
columns: {
amount: {
label: "Beträge",
type: "currency"
}
},
rows: [
{ amount: 5 },
{ amount: 5 },
{ amount: 5 },
]
}
const exporter = new MultiTableXlsxExporter(options, filePath)
// Formatierung für Summenzeile (Rahmen oben Fett / unten doppelt)
const format = exporter.writer.addFormat("footerTemplate")
format.setBorderStyle("top", exporter.writer.BORDER_MEDIUM)
format.setBorderStyle("bottom", exporter.writer.BORDER_DOUBLE)
format.setNumberFormat("#,##0.00 €")
// Zeile unterhalb der Datensätze ermitteln (Offset mit Titel + Zeilen + Überschrift)
const formulaRow = exporter.offsetRowsWithTitle + options.rows.length + 1
// Spaltenindex für Summenbildung
const columnIndex = 0
// Offset + Überschrift + erste Zeile (da nicht indexbasiert)
const startRow = exporter.offsetRowsWithTitle + 1 + 1
// Offset + Überschrift + Zeilen
const endRow = exporter.offsetRowsWithTitle + 1 + options.rows.length
// SUM(A0:A)
const formula = "SUM(A" + startRow + ":A" + endRow + ")"
// Verwenden der documents API,
// https://otris.software/documents/api/portalscript/XLSXWorksheet.html#writeFormula
exporter.worksheet.writeFormula(formulaRow, columnIndex, formula, format)
// Speichern nicht vergessen ;-)
exporter.save()
context.returnType = "download:test.xlsx"
context.returnValue = filePath