Tillämpa stilar på pivottabeller i Aspose.Cells för .NET

Introduktion

Aspose.Cells exponerar två parallella stil-API:er för pivottabeller. Valet mellan dem styrs av det filformat du sparar arbetsboken till, inte av det format du läser in den från. En arbetsbok som lästs in från en .xls-fil kan sparas om som .xlsx, och i det fallet gäller det moderna stil-API:t snarare än det äldre.

För äldre .xls-utdata använder du egenskapen PivotTable.AutoFormatType tillsammans med enumerationen com.aspose.cells.PivotTableAutoFormatType. Detta API motsvarar den autoformatväljare som klassisk Excel erbjöd för pivottabeller.

För moderna .xlsx-, .xlsm- och .xlsb-utdata finns två varianter av stil-API:

  • PivotTable.PivotTableStyleType väljer en av de inbyggda namngivna stilarna (ljusa och mörka teman, inklusive de stilar som lades till i Excel 2017). Dessa förinställningar är skrivskyddade.
  • PivotTable.PivotTableStyleName väljer en anpassad stil som du definierar själv via Workbook.getWorksheets().getTableStyles().addPivotTableStyle(...). Anpassade stilar krävs när du vill ändra färger, kantlinjer eller typsnitt utöver vad förinställningarna erbjuder.

Dessutom är PivotTable.formatAll(Style) en genväg som tillämpar ett enda Style-objekt på varje cell i pivoten, och åsidosätter det som har ställts in via någon av ovanstående stilnamns-API:er. Detta är användbart när ett enhetligt utseende krävs oavsett underliggande tema.

Tillämpa ett äldre XLS-förinställt autoformat

PivotTable.AutoFormatType accepterar ett värde från enumerationen com.aspose.cells.PivotTableAutoFormatType. De tillgängliga värdena är REPORT_1 till REPORT_10, CLASSIC samt TABLE_1 till TABLE_10.

Följande exempel läser in en ny arbetsbok, fyller i exempeldata för Fruit/Year/Amount, lägger till en pivottabell, tillämpar PivotTableAutoFormatType.REPORT_5 och sparar resultatet som .xls.

import com.aspose.cells.*;

// Scenario 1: Tillämpa ett äldre XLS-förinställt autoformat
// API som används: PivotTable.AutoFormatType
// Målfilformat: .xls (äldre)
// För fullständiga exempel och datafiler, gå till https://github.com/aspose-cells/Aspose.Cells-for-.NET

// Skapa en ny arbetsbok
Workbook workbook = new Workbook();

// Hämta det första arbetsbladet
Worksheet sheet = workbook.getWorksheets().get(0);

// Fyll källdata med rubrikrad (Fruit, Year, Amount)
// och 9 datarader som täcker grape, blueberry, kiwi, cherry över 2020 och 2021
sheet.getCells().get(0, 0).putValue("Fruit");
sheet.getCells().get(0, 1).putValue("Year");
sheet.getCells().get(0, 2).putValue("Amount");

sheet.getCells().get(1, 0).putValue("grape");
sheet.getCells().get(1, 1).putValue(2020);
sheet.getCells().get(1, 2).putValue(50);

sheet.getCells().get(2, 0).putValue("blueberry");
sheet.getCells().get(2, 1).putValue(2020);
sheet.getCells().get(2, 2).putValue(30);

sheet.getCells().get(3, 0).putValue("kiwi");
sheet.getCells().get(3, 1).putValue(2020);
sheet.getCells().get(3, 2).putValue(25);

sheet.getCells().get(4, 0).putValue("cherry");
sheet.getCells().get(4, 1).putValue(2020);
sheet.getCells().get(4, 2).putValue(40);

sheet.getCells().get(5, 0).putValue("grape");
sheet.getCells().get(5, 1).putValue(2021);
sheet.getCells().get(5, 2).putValue(60);

sheet.getCells().get(6, 0).putValue("blueberry");
sheet.getCells().get(6, 1).putValue(2021);
sheet.getCells().get(6, 2).putValue(35);

sheet.getCells().get(7, 0).putValue("kiwi");
sheet.getCells().get(7, 1).putValue(2021);
sheet.getCells().get(7, 2).putValue(28);

sheet.getCells().get(8, 0).putValue("cherry");
sheet.getCells().get(8, 1).putValue(2021);
sheet.getCells().get(8, 2).putValue(45);

sheet.getCells().get(9, 0).putValue("grape");
sheet.getCells().get(9, 1).putValue(2020);
sheet.getCells().get(9, 2).putValue(45);

// Lägg till en pivottabell vid destinationscell E3, namngiven "Pivot1", med källintervall A1:C10
int pivotIndex = sheet.getPivotTables().add("A1:C10", "E3", "Pivot1");
PivotTable pivotTable = sheet.getPivotTables().get(pivotIndex);

// Tilldela fält: Fruit -> Rader, Year -> Kolumner, Amount -> Data
pivotTable.addFieldToArea(PivotFieldType.ROW, "Fruit");
pivotTable.addFieldToArea(PivotFieldType.DATA, "Amount");

// Tillämpa det äldre XLS-förinställda autoformatet "Report5"
// Obs: Den här egenskapen är endast meningsfull när filen sparas som .xls.
// När filen sparas som .xlsx/.xlsm/.xlsb ignorerar Excel AutoFormatType
// och använder det som PivotTableStyleType / PivotTableStyleName anger.
pivotTable.setAutoFormatType(PivotTableAutoFormatType.REPORT_5);

// Spara arbetsboken i äldre .xls-format
workbook.save("output.xls");

Tillämpa en modern namngiven förinställd pivottabellstil

PivotTable.PivotTableStyleType accepterar ett värde från enumerationen com.aspose.cells.PivotTableStyleType. Enumerationen omfattar ljusa teman PIVOT_TABLE_STYLE_LIGHT_1 till PIVOT_TABLE_STYLE_LIGHT_28 och mörka teman PIVOT_TABLE_STYLE_DARK_1 till PIVOT_TABLE_STYLE_DARK_28. Stilarna som lades till i Excel 2017 (den andra omgången ljusa och mörka teman) nås via samma enumeration.

Detta är det rekommenderade API:t för alla moderna filformat. Till skillnad från det äldre autoformatet renderas den stil som väljs här troget av Excel och överlever rundresor genom andra Office-verktyg.

Följande exempel använder samma Fruit/Year/Amount-data, skapar en identisk pivottabell, tillämpar PIVOT_TABLE_STYLE_DARK_1 och sparar arbetsboken som .xlsx.

import com.aspose.cells.*;

Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);

// Huvudrad: Frukt / År / Belopp
worksheet.getCells().get("A1").putValue("Fruit");
worksheet.getCells().get("B1").putValue("Year");
worksheet.getCells().get("C1").putValue("Amount");

// 9 datarader med Frukt / År / Belopp
worksheet.getCells().get("A2").putValue("Grape");
worksheet.getCells().get("B2").putValue(2020);
worksheet.getCells().get("C2").putValue(100);

worksheet.getCells().get("A3").putValue("Blueberry");
worksheet.getCells().get("B3").putValue(2020);
worksheet.getCells().get("C3").putValue(150);

worksheet.getCells().get("A4").putValue("Kiwi");
worksheet.getCells().get("B4").putValue(2020);
worksheet.getCells().get("C4").putValue(200);

worksheet.getCells().get("A5").putValue("Cherry");
worksheet.getCells().get("B5").putValue(2020);
worksheet.getCells().get("C5").putValue(180);

worksheet.getCells().get("A6").putValue("Grape");
worksheet.getCells().get("B6").putValue(2021);
worksheet.getCells().get("C6").putValue(120);

worksheet.getCells().get("A7").putValue("Blueberry");
worksheet.getCells().get("B7").putValue(2021);
worksheet.getCells().get("C7").putValue(170);

worksheet.getCells().get("A8").putValue("Kiwi");
worksheet.getCells().get("B8").putValue(2021);
worksheet.getCells().get("C8").putValue(210);

worksheet.getCells().get("A9").putValue("Cherry");
worksheet.getCells().get("B9").putValue(2021);
worksheet.getCells().get("C9").putValue(190);

worksheet.getCells().get("A10").putValue("Grape");
worksheet.getCells().get("B10").putValue(2021);
worksheet.getCells().get("C10").putValue(130);

// Lägg till en pivottabell på E3 med namnet "Pivot1", från A1:C10
int pivotIndex = worksheet.getPivotTables().add("A1:C10", "E3", "Pivot1");
PivotTable pivotTable = worksheet.getPivotTables().get(pivotIndex);

// Tilldela pivotfält: Frukt -> Radområde, År -> Kolumnområde, Belopp -> Dataområde
pivotTable.addFieldToArea(PivotFieldType.ROW, "Fruit");
pivotTable.addFieldToArea(PivotFieldType.COLUMN, "Year");
pivotTable.addFieldToArea(PivotFieldType.DATA, "Amount");

// Tillämpa en modern namngiven förinställd pivotstil för Excel 2007+.
// PivotTableStyleType är det korrekta API:et för .xlsx / .xlsm / .xlsb-filer; AutoFormatType
// ignoreras av Excel för dessa format. PivotTableStyleDark1 tillhör det mörka temat
// familjen (PivotTableStyleDark1..PivotTableStyleDark28), och samma enum exponerar också de
// nyare Excel 2017 ljusa/mörka teman (PivotTableStyleLight1..Light28 / Dark1..Dark28).
pivotTable.setPivotTableStyleType(PivotTableStyleType.PIVOT_TABLE_STYLE_DARK_1);

// Spara som modern .xlsx - detta är formatet för vilket PivotTableStyleType är meningsfullt.
workbook.save("output.xlsx");

Definiera och tillämpa en anpassad pivottabellstil

De inbyggda förinställningarna kan inte modifieras. Närhelst du behöver åsidosätta färger, kantlinjer eller typsnitt måste du definiera en anpassad pivotstil. Arbetsflödet har tre steg:

  1. Lägg till en anpassad stil i arbetsbokens TableStyles-samling via Workbook.getWorksheets().getTableStyles().addPivotTableStyle(String name). Detta returnerar indexet för den nyskapade stilen.
  2. Konfigurera stilen genom att lägga till element (såsom WholeTable eller GrandTotalRow) via TableStyle.getTableStyleElements().add(TableStyleElementType), och tilldela sedan en Style till varje element via TableStyleElement.setElementStyle(Style).
  3. Tillämpa den anpassade stilen på pivoten genom att sätta PivotTable.PivotTableStyleName till stilens namn. Använd inte PivotTableStyleType här, eftersom den egenskapen väljer inbyggda förinställningar.

De tillgängliga TableStyleElementType-värdena inkluderar WHOLE_TABLE, FIRST_ROW, LAST_ROW, FIRST_COLUMN, LAST_COLUMN, GRAND_TOTAL_ROW, GRAND_TOTAL_COLUMN, PAGE_FIELD_LABELS och PAGE_FIELD_VALUES.

Följande exempel definierar en anpassad pivotstil med en tunn svart kantlinje på WholeTable och ett fet rött typsnitt på GrandTotalRow, och tillämpar den sedan via PivotTableStyleName och sparar som .xlsx.

import com.aspose.cells.*;

Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);

// Fyll i källdata: rubrikrad + 9 datarader (A1:C10)
worksheet.getCells().get("A1").putValue("Fruit");
worksheet.getCells().get("B1").putValue("Year");
worksheet.getCells().get("C1").putValue("Amount");

worksheet.getCells().get("A2").putValue("Grape");
worksheet.getCells().get("B2").putValue(2020);
worksheet.getCells().get("C2").putValue(100);

worksheet.getCells().get("A3").putValue("Blueberry");
worksheet.getCells().get("B3").putValue(2020);
worksheet.getCells().get("C3").putValue(200);

worksheet.getCells().get("A4").putValue("Kiwi");
worksheet.getCells().get("B4").putValue(2020);
worksheet.getCells().get("C4").putValue(300);

worksheet.getCells().get("A5").putValue("Cherry");
worksheet.getCells().get("B5").putValue(2020);
worksheet.getCells().get("C5").putValue(400);

worksheet.getCells().get("A6").putValue("Grape");
worksheet.getCells().get("B6").putValue(2021);
worksheet.getCells().get("C6").putValue(500);

worksheet.getCells().get("A7").putValue("Blueberry");
worksheet.getCells().get("B7").putValue(2021);
worksheet.getCells().get("C7").putValue(600);

worksheet.getCells().get("A8").putValue("Kiwi");
worksheet.getCells().get("B8").putValue(2021);
worksheet.getCells().get("C8").putValue(700);

worksheet.getCells().get("A9").putValue("Cherry");
worksheet.getCells().get("B9").putValue(2021);
worksheet.getCells().get("C9").putValue(800);

worksheet.getCells().get("A10").putValue("Grape");
worksheet.getCells().get("B10").putValue(2021);
worksheet.getCells().get("C10").putValue(900);

// Lägg till pivottabell med källa från A1:C10, förankrad vid E3, med namnet "Pivot1"
int pivotIndex = worksheet.getPivotTables().add("A1:C10", "E3", "Pivot1");
PivotTable pivotTable = worksheet.getPivotTables().get(pivotIndex);

pivotTable.addFieldToArea(PivotFieldType.ROW, "Fruit");
pivotTable.addFieldToArea(PivotFieldType.COLUMN, "Year");
pivotTable.addFieldToArea(PivotFieldType.DATA, "Amount");

// Steg 1: registrera en ny anpassad pivottabellstil och spara dess index
int styleIndex = workbook.getWorksheets().getTableStyles().addPivotTableStyle("CustomPivotStyle");
TableStyle tableStyle = workbook.getWorksheets().getTableStyles().get(styleIndex);

// Steg 2: lägg till ett WholeTable-element och tillämpa tunna svarta kanter på alla fyra sidor
int wholeTableElementIndex = tableStyle.getTableStyleElements().add(TableStyleElementType.WHOLE_TABLE);
TableStyleElement wholeTableElement = tableStyle.getTableStyleElements().get(wholeTableElementIndex);
Style wholeTableStyle = workbook.createStyle();
BorderCollection borders = wholeTableStyle.getBorders();
Border borderTop = borders.getByBorderType(BorderType.TOP_BORDER);
borderTop.setLineStyle(CellBorderType.THIN);
borderTop.setColor(Color.getBlack());
Border borderBottom = borders.getByBorderType(BorderType.BOTTOM_BORDER);
borderBottom.setLineStyle(CellBorderType.THIN);
borderBottom.setColor(Color.getBlack());
Border borderLeft = borders.getByBorderType(BorderType.LEFT_BORDER);
borderLeft.setLineStyle(CellBorderType.THIN);
borderLeft.setColor(Color.getBlack());
Border borderRight = borders.getByBorderType(BorderType.RIGHT_BORDER);
borderRight.setLineStyle(CellBorderType.THIN);
borderRight.setColor(Color.getBlack());
wholeTableElement.setElementStyle(wholeTableStyle);

// Steg 3: lägg till ett GrandTotalRow-element och tillämpa fet röd text
int grandTotalElementIndex = tableStyle.getTableStyleElements().add(TableStyleElementType.GRAND_TOTAL_ROW);
TableStyleElement grandTotalElement = tableStyle.getTableStyleElements().get(grandTotalElementIndex);
Style grandTotalStyle = workbook.createStyle();
grandTotalStyle.getFont().setBold(true);
grandTotalStyle.getFont().setColor(Color.getRed());
grandTotalElement.setElementStyle(grandTotalStyle);

// Steg 4: tillämpa den anpassade stilen med namn (INTE via PivotTableStyleType, vilket är för inbyggda förinställningar)
pivotTable.setPivotTableStyleName("CustomPivotStyle");

workbook.save("output.xlsx");

Tillämpa en stil på varje pivotcell med FormatAll

PivotTable.formatAll(Style) är en genväg som tillämpar ett enda Style-objekt på varje cell i pivottabellen, inklusive dataområdet, rad- och kolumnrubriker samt summor. Det som tidigare ställts in via PivotTableStyleType eller PivotTableStyleName åsidosätts.

Följande exempel skapar en Style med gul solid fyllning, ett fet mörkblått typsnitt och tunna svarta kantlinjer på alla sidor, och tillämpar den sedan med formatAll och sparar som .xlsx.

import com.aspose.cells.*;

Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);

// Populera källdata: rubrikrad (rad 1) + 9 datarader (raderna 2-10)
worksheet.getCells().get("A1").putValue("Fruit");
worksheet.getCells().get("B1").putValue("Year");
worksheet.getCells().get("C1").putValue("Amount");

worksheet.getCells().get("A2").putValue("Grape");
worksheet.getCells().get("B2").putValue(2020);
worksheet.getCells().get("C2").putValue(5000);

worksheet.getCells().get("A3").putValue("Blueberry");
worksheet.getCells().get("B3").putValue(2020);
worksheet.getCells().get("C3").putValue(3000);

worksheet.getCells().get("A4").putValue("Kiwi");
worksheet.getCells().get("B4").putValue(2020);
worksheet.getCells().get("C4").putValue(4000);

worksheet.getCells().get("A5").putValue("Cherry");
worksheet.getCells().get("B5").putValue(2020);
worksheet.getCells().get("C5").putValue(2000);

worksheet.getCells().get("A6").putValue("Grape");
worksheet.getCells().get("B6").putValue(2021);
worksheet.getCells().get("C6").putValue(6000);

worksheet.getCells().get("A7").putValue("Blueberry");
worksheet.getCells().get("B7").putValue(2021);
worksheet.getCells().get("C7").putValue(3500);

worksheet.getCells().get("A8").putValue("Kiwi");
worksheet.getCells().get("B8").putValue(2021);
worksheet.getCells().get("C8").putValue(4500);

worksheet.getCells().get("A9").putValue("Cherry");
worksheet.getCells().get("B9").putValue(2021);
worksheet.getCells().get("C9").putValue(2500);

worksheet.getCells().get("A10").putValue("Grape");
worksheet.getCells().get("B10").putValue(2021);
worksheet.getCells().get("C10").putValue(5500);

// Lägg till pivottabell: källområde A1:C10, målcell E3, namn "Pivot1"
int pivotIndex = worksheet.getPivotTables().add("A1:C10", "E3", "Pivot1");
PivotTable pivotTable = worksheet.getPivotTables().get(pivotIndex);

// Tilldela pivotfält: Fruit -> radområde, Year -> kolumnområde, Amount -> dataområde
pivotTable.addFieldToArea(PivotFieldType.ROW, "Fruit");
pivotTable.addFieldToArea(PivotFieldType.COLUMN, "Year");
pivotTable.addFieldToArea(PivotFieldType.DATA, "Amount");

// Bygg en Style som kommer att tvingas på varje cell i pivottabellen
Style style = workbook.createStyle();
style.setForegroundColor(Color.getYellow());
style.setPattern(BackgroundType.SOLID);
style.getFont().setBold(true);
style.getFont().setColor(Color.getDarkBlue());

style.getBorders().getByBorderType(BorderType.TOP_BORDER).setLineStyle(CellBorderType.THIN);
style.getBorders().getByBorderType(BorderType.TOP_BORDER).setColor(Color.getBlack());

style.getBorders().getByBorderType(BorderType.BOTTOM_BORDER).setLineStyle(CellBorderType.THIN);
style.getBorders().getByBorderType(BorderType.BOTTOM_BORDER).setColor(Color.getBlack());

style.getBorders().getByBorderType(BorderType.LEFT_BORDER).setLineStyle(CellBorderType.THIN);
style.getBorders().getByBorderType(BorderType.LEFT_BORDER).setColor(Color.getBlack());

style.getBorders().getByBorderType(BorderType.RIGHT_BORDER).setLineStyle(CellBorderType.THIN);
style.getBorders().getByBorderType(BorderType.RIGHT_BORDER).setColor(Color.getBlack());

// Tillämpa FormatAll: tvingar denna enda stil på varje cell i pivottabellen,
// åsidosätter eventuell PivotTableStyleType / PivotTableStyleName som tidigare angetts
pivotTable.formatAll(style);

// Spara arbetsboken i modernt .xlsx-format
workbook.save("output.xlsx");

Vilket stil-API ska jag använda?

Valet av stil-API beror på det filformat du sparar till. Använd tabellen nedan som en snabbreferens.

Målfilformat API att använda Anteckningar
.xls (äldre) PivotTable.AutoFormatType Värden från com.aspose.cells.PivotTableAutoFormatType (t.ex. REPORT_1REPORT_10, CLASSIC, TABLE_1TABLE_10). Ignoreras vid sparning som moderna format.
.xlsx / .xlsm / .xlsb (modern, inbyggd stil) PivotTable.PivotTableStyleType Värden från com.aspose.cells.PivotTableStyleType (ljusa/mörka teman, inklusive tillägg i Excel 2017).
.xlsx / .xlsm / .xlsb (modern, anpassad stil) PivotTable.PivotTableStyleName + Worksheets.TableStyles.addPivotTableStyle(...) Använd när de inbyggda förinställningarna inte räcker. Konfigurera via TableStyleElement.setElementStyle(...).
Valfritt format (enhetlig åsidosättning) PivotTable.formatAll(Style) Genväg som åsidosätter varje annan stilinställning över hela pivoten.

Vid tveksamhet, spara som .xlsx och använd PivotTableStyleType för inbyggda teman, eller PivotTableStyleName för anpassade teman.