Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Die Methode PivotTable.addFieldToArea(PivotFieldType fieldType, String fieldName) verschiebt ein Basisfeld aus den Quelldaten in einen der vier Pivot-Bereiche. Das Argument fieldType akzeptiert einen der folgenden PivotFieldType-Werte.
ROW — Felder, die vertikal auf der linken Seite platziert sindCOLUMN — Felder, die horizontal oben platziert sindDATA — Felder, deren Werte aggregiert werdenPAGE — Felder, die als Berichtsfilter verwendet werden
Nachdem Felder hinzugefügt wurden, können Sie über die Eigenschaften PivotTable.getRowFields() und PivotTable.getColumnFields() darauf zugreifen. Jede Eigenschaft gibt eine PivotFieldCollection zurück. Das Feld am Index 0 von RowFields ist das äußerste Zeilenfeld, und nachfolgende Indizes stehen für darin verschachtelte Felder. Dieselbe Indexierungskonvention gilt für ColumnFields.
Die Verschachtelungsreihenfolge der Felder ist wichtig. Wenn zuerst Category zum Zeilenbereich und dann Item hinzugefügt wird, entsteht eine Pivot-Tabelle, deren äußere Gruppierung Category und deren innere Gruppierung Item ist. Durch Umkehren der Reihenfolge wird die Hierarchie umgekehrt.Die Methode PivotField.setSubtotals(PivotFieldSubtotalType subtotalType, boolean shown) steuert, welche Zwischensummenzeilen für ein Pivot-Feld angezeigt werden. Jeder Aufruf schaltet einen einzelnen Zwischensummentyp unabhängig um. Wenn shown = true übergeben wird, wird die Zwischensumme angezeigt, während shown = false sie ausblendet. Da jeder Aufruf nur einen Typ betrifft, wird durch mehrmaliges Aufrufen der Methode mit unterschiedlichen subtotalType-Werten eine benutzerdefinierte Teilmenge von Zwischensummen erstellt.
Die Enum PivotFieldSubtotalType definiert die verfügbaren Zwischensummenarten.
AUTOMATIC — Aspose.Cells wählt die Standardauswahl (typischerweise SUM für numerische Felder)NONE — unterdrückt jede ZwischensummenzeileSUMCOUNTAVERAGEMAXMINPRODUCTSTD_DEVSTD_DEVPVARVARPsetSubtotals-Aufrufe in diesem Fall keine sichtbare Wirkung. Dieser Artikel platziert daher in jedem Beispiel zwei Zeilenfelder (Category außen, Item innen), damit die Zwischensummengrenze zwischen jeder Category-Gruppe sichtbar ist.
Wenn Sie setSubtotals überhaupt nicht aufrufen, wendet Aspose.Cells die Auswahl AUTOMATIC auf numerische Felder an. Das folgende Beispiel bestätigt dieses Verhalten explizit, indem setSubtotals(PivotFieldSubtotalType.AUTOMATIC, true) auf dem äußeren Zeilenfeld Category aufgerufen wird.
let workbook = new AsposeCells.Workbook();
let worksheet = workbook.getWorksheets().get(0);
worksheet.setName("Data");
worksheet.getCells().get(0, 0).putValue("Category");
worksheet.getCells().get(0, 1).putValue("Item");
worksheet.getCells().get(0, 2).putValue("Year");
worksheet.getCells().get(0, 3).putValue("Amount");
worksheet.getCells().get(1, 0).putValue("Fruit");
worksheet.getCells().get(1, 1).putValue("Apple");
worksheet.getCells().get(1, 2).putValue(2020);
worksheet.getCells().get(1, 3).putValue(100);
worksheet.getCells().get(2, 0).putValue("Fruit");
worksheet.getCells().get(2, 1).putValue("Apple");
worksheet.getCells().get(2, 2).putValue(2021);
worksheet.getCells().get(2, 3).putValue(150);
worksheet.getCells().get(3, 0).putValue("Fruit");
worksheet.getCells().get(3, 1).putValue("Banana");
worksheet.getCells().get(3, 2).putValue(2020);
worksheet.getCells().get(3, 3).putValue(80);
worksheet.getCells().get(4, 0).putValue("Fruit");
worksheet.getCells().get(4, 1).putValue("Banana");
worksheet.getCells().get(4, 2).putValue(2021);
worksheet.getCells().get(4, 3).putValue(90);
worksheet.getCells().get(5, 0).putValue("Vegetable");
worksheet.getCells().get(5, 1).putValue("Carrot");
worksheet.getCells().get(5, 2).putValue(2020);
worksheet.getCells().get(5, 3).putValue(50);
worksheet.getCells().get(6, 0).putValue("Vegetable");
worksheet.getCells().get(6, 1).putValue("Carrot");
worksheet.getCells().get(6, 2).putValue(2021);
worksheet.getCells().get(6, 3).putValue(60);
worksheet.getCells().get(7, 0).putValue("Vegetable");
worksheet.getCells().get(7, 1).putValue("Daikon");
worksheet.getCells().get(7, 2).putValue(2020);
worksheet.getCells().get(7, 3).putValue(40);
worksheet.getCells().get(8, 0).putValue("Vegetable");
worksheet.getCells().get(8, 1).putValue("Daikon");
worksheet.getCells().get(8, 2).putValue(2021);
worksheet.getCells().get(8, 3).putValue(45);
let pivotIndex = worksheet.getPivotTables().add("A1:D9", "F3", "PivotTable1");
let pivotTable = worksheet.getPivotTables().get(pivotIndex);
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Category");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Item");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Column, "Year");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Data, "Amount");
let categoryField = pivotTable.getRowFields().get(0);
categoryField.setSubtotals(AsposeCells.PivotFieldSubtotalType.Automatic, true);
pivotTable.calculateData();
workbook.save("output_automatic.xlsx");
Der Aufruf von setSubtotals(PivotFieldSubtotalType.NONE, true) entfernt jede Zwischensummenzeile aus der Pivot-Tabelle und lässt nur die Feldzeilen und das Gesamtergebnis unten übrig. Dies ist nützlich, wenn Sie die rohen gruppierten Daten ohne zusammenfassende Zeilen wünschen.
let workbook = new AsposeCells.Workbook();
let worksheet = workbook.getWorksheets().get(0);
worksheet.setName("Data");
let headers = ["Category", "Item", "Year", "Amount"];
for (let j = 0; j < headers.length; j++)
{
worksheet.getCells().get(0, j).putValue(headers[j]);
}
let data = [
["Fruit", "Apple", 2020, 100],
["Fruit", "Apple", 2021, 150],
["Fruit", "Banana", 2020, 80],
["Fruit", "Banana", 2021, 90],
["Vegetable", "Carrot", 2020, 50],
["Vegetable", "Carrot", 2021, 60],
["Vegetable", "Daikon", 2020, 40],
["Vegetable", "Daikon", 2021, 45]
];
for (let i = 0; i < data.length; i++)
{
for (let j = 0; j < data[i].length; j++)
{
worksheet.getCells().get(i + 1, j).putValue(data[i][j]);
}
}
let pivotIndex = worksheet.getPivotTables().add("A1:D9", "F3", "PivotTable1");
let pivotTable = worksheet.getPivotTables().get(pivotIndex);
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Category");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Item");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Column, "Year");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Data, "Amount");
let categoryField = pivotTable.getRowFields().get(0);
categoryField.setSubtotals(AsposeCells.PivotFieldSubtotalType.None, true);
pivotTable.calculateData();
workbook.save("output_none.xlsx");
Sie sind nicht auf einen einzelnen Zwischensummentyp beschränkt. Jeder setSubtotals-Aufruf wirkt unabhängig auf einen Typ. Wenn die Methode daher zweimal aufgerufen wird — einmal mit SUM und einmal mit AVERAGE — wird eine benutzerdefinierte Teilmenge von zwei Zwischensummenzeilen für jede Category-Gruppe erzeugt.
let workbook = new AsposeCells.Workbook();
let worksheet = workbook.getWorksheets().get(0);
worksheet.setName("Data");
worksheet.getCells().get("A1").putValue("Category");
worksheet.getCells().get("B1").putValue("Item");
worksheet.getCells().get("C1").putValue("Year");
worksheet.getCells().get("D1").putValue("Amount");
worksheet.getCells().get(1, 0).putValue("Fruit");
worksheet.getCells().get(1, 1).putValue("Apple");
worksheet.getCells().get(1, 2).putValue(2020);
worksheet.getCells().get(1, 3).putValue(100);
worksheet.getCells().get(2, 0).putValue("Fruit");
worksheet.getCells().get(2, 1).putValue("Apple");
worksheet.getCells().get(2, 2).putValue(2021);
worksheet.getCells().get(2, 3).putValue(150);
worksheet.getCells().get(3, 0).putValue("Fruit");
worksheet.getCells().get(3, 1).putValue("Banana");
worksheet.getCells().get(3, 2).putValue(2020);
worksheet.getCells().get(3, 3).putValue(80);
worksheet.getCells().get(4, 0).putValue("Fruit");
worksheet.getCells().get(4, 1).putValue("Banana");
worksheet.getCells().get(4, 2).putValue(2021);
worksheet.getCells().get(4, 3).putValue(90);
worksheet.getCells().get(5, 0).putValue("Vegetable");
worksheet.getCells().get(5, 1).putValue("Carrot");
worksheet.getCells().get(5, 2).putValue(2020);
worksheet.getCells().get(5, 3).putValue(50);
worksheet.getCells().get(6, 0).putValue("Vegetable");
worksheet.getCells().get(6, 1).putValue("Carrot");
worksheet.getCells().get(6, 2).putValue(2021);
worksheet.getCells().get(6, 3).putValue(60);
worksheet.getCells().get(7, 0).putValue("Vegetable");
worksheet.getCells().get(7, 1).putValue("Daikon");
worksheet.getCells().get(7, 2).putValue(2020);
worksheet.getCells().get(7, 3).putValue(40);
worksheet.getCells().get(8, 0).putValue("Vegetable");
worksheet.getCells().get(8, 1).putValue("Daikon");
worksheet.getCells().get(8, 2).putValue(2021);
worksheet.getCells().get(8, 3).putValue(45);
let pivotTables = worksheet.getPivotTables();
let pivotIndex = pivotTables.add("A1:D9", "F3", "PivotTable1");
let pivotTable = pivotTables.get(pivotIndex);
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Category");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Row, "Item");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Column, "Year");
pivotTable.addFieldToArea(AsposeCells.PivotFieldType.Data, "Amount");
let categoryField = pivotTable.getRowFields().get(0);
categoryField.setSubtotals(AsposeCells.PivotFieldSubtotalType.Sum, true);
categoryField.setSubtotals(AsposeCells.PivotFieldSubtotalType.Average, true);
pivotTable.calculateData();
workbook.save("output_custom.xlsx");
Die drei oben genannten Szenarien verwenden denselben Datensatz und dieselbe Pivot-Tabellenstruktur. Der einzige Unterschied zwischen ihnen ist der setSubtotals-Aufruf, der auf das äußere Zeilenfeld Category angewendet wird. Denken Sie an die Zwei-Felder-Regel: Ein einzelnes Feld in einem Bereich hat keine Möglichkeit zur Zwischensummenbildung dazwischen. Platzieren Sie daher immer mindestens zwei Felder im Zeilen- oder Spaltenbereich, wenn Sie möchten, dass setSubtotals eine sichtbare Wirkung hat.
`javascript
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.