Hantera presentations‑tabeller i Java

Introduktion

En tabell i PowerPoint är ett effektivt sätt att visa och framställa information. Informationen i ett rutnät av celler (arrangerade i rader och kolumner) är enkel och lätt att förstå.

Aspose.Slides tillhandahåller klassen Table interfacet ITable klassen Cell interfacet ICell och andra typer för att låta dig skapa, uppdatera och hantera tabeller i alla typer av presentationer.

Skapa en tabell från grunden

  1. Skapa en instans av klassen Presentation.
  2. Hämta en bilds referens via dess index.
  3. Definiera en array av columnWidth.
  4. Definiera en array av rowHeight.
  5. Lägg till ett ITable‑objekt på bilden via metoden addTable.
  6. Iterera genom varje ICell för att tillämpa formatering på de övre, nedre, högra och vänstra kanterna.
  7. Sammanfoga de två första cellerna i tabellens första rad.
  8. Få åtkomst till en ICells TextFrame.
  9. Lägg till lite text i TextFrame.
  10. Spara den ändrade presentationen.

Denna Java‑kod visar hur du skapar en tabell i en presentation:

import com.aspose.slides.*;
import java.awt.Color;

// Skapar en Presentation-klass som representerar en PPTX-fil
Presentation pres = new Presentation();
try {
    // Åtkomst till den första bilden
    ISlide sld = pres.getSlides().get_Item(0);

    // Definierar kolumner med bredder och rader med höjder
    double[] dblCols = {50, 50, 50};
    double[] dblRows = {50, 30, 30, 30, 30};

    // Lägger till en tabellform på bilden
    ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);

    // Ställer in kantformat för varje cell
    for (int row = 0; row < tbl.getRows().size(); row++)
    {
        for (int cell = 0; cell < tbl.getRows().get_Item(row).size(); cell++)
        {
            ICellFormat cellFormat = tbl.getRows().get_Item(row).get_Item(cell).getCellFormat();
            
            cellFormat.getBorderTop().getFillFormat().setFillType(FillType.Solid);
            cellFormat.getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cellFormat.getBorderTop().setWidth(5);

            cellFormat.getBorderBottom().getFillFormat().setFillType(FillType.Solid);
            cellFormat.getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cellFormat.getBorderBottom().setWidth(5);

            cellFormat.getBorderLeft().getFillFormat().setFillType(FillType.Solid);
            cellFormat.getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cellFormat.getBorderLeft().setWidth(5);

            cellFormat.getBorderRight().getFillFormat().setFillType(FillType.Solid);
            cellFormat.getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cellFormat.getBorderRight().setWidth(5);
        }
    }
    // Sammanfogar cellerna 1 och 2 i rad 1
    tbl.mergeCells(tbl.getRows().get_Item(0).get_Item(0), tbl.getRows().get_Item(0).get_Item(1), false);

    // Lägger till text i den sammanslagna cellen
    tbl.getRows().get_Item(0).get_Item(0).getTextFrame().setText("Merged Cells");

    // Sparar presentationen till disk
    pres.save("table.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Numrering i en standardtabell

I en standardtabell är numreringen av celler enkel och nollbaserad. Den första cellen i en tabell har indexet 0,0 (kolumn 0, rad 0).

Till exempel numreras cellerna i en tabell med 4 kolumner och 4 rader på följande sätt:

(0, 0) (1, 0) (2, 0) (3, 0)
(0, 1) (1, 1) (2, 1) (3, 1)
(0, 2) (1, 2) (2, 2) (3, 2)
(0, 3) (1, 3) (2, 3) (3, 3)

Denna Java‑kod visar hur du specificerar numreringen för celler i en tabell:

import com.aspose.slides.*;
import java.awt.Color;

// Skapar en Presentation-klass som representerar en PPTX-fil
Presentation pres = new Presentation();
try {
    // Åtkomst till den första bilden
    ISlide sld = pres.getSlides().get_Item(0);

    // Definierar kolumner med bredder och rader med höjder
    double[] dblCols = { 70, 70, 70, 70 };
    double[] dblRows = { 70, 70, 70, 70 };

    // Lägger till en tabellform på bilden
    ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);

    // Ställer in kantformat för varje cell
    for (IRow row : tbl.getRows())
    {
        for (ICell cell : row)
        {
            cell.getCellFormat().getBorderTop().getFillFormat().setFillType(FillType.Solid);
            cell.getCellFormat().getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cell.getCellFormat().getBorderTop().setWidth(5);

            cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(FillType.Solid);
            cell.getCellFormat().getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cell.getCellFormat().getBorderBottom().setWidth(5);

            cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(FillType.Solid);
            cell.getCellFormat().getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cell.getCellFormat().getBorderLeft().setWidth(5);

            cell.getCellFormat().getBorderRight().getFillFormat().setFillType(FillType.Solid);
            cell.getCellFormat().getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED);
            cell.getCellFormat().getBorderRight().setWidth(5);
        }
    }

    // Sparar presentationen till disk
    pres.save("StandardTables_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Åtkomst till en befintlig tabell

  1. Skapa en instans av klassen Presentation.

  2. Hämta en referens till bilden som innehåller tabellen via dess index.

  3. Skapa ett ITable‑objekt och sätt det till null.

  4. Iterera genom alla IShape‑objekt tills tabellen hittas.

    Om du misstänker att bilden du arbetar med innehåller en enda tabell kan du helt enkelt kontrollera alla former som den innehåller. När en form identifieras som en tabell kan du typcasta den till ett Table-objekt. Men om bilden du arbetar med innehåller flera tabeller är det bättre att söka efter den tabell du behöver via dess setAlternativeText(String value).

  5. Använd ITable-objektet för att arbeta med tabellen. I exemplet nedan lade vi till en ny rad i tabellen.

  6. Spara den ändrade presentationen.

Denna Java‑kod visar hur du får åtkomst till och arbetar med en befintlig tabell:

import com.aspose.slides.*;

// Skapar en Presentation-klass som representerar en PPTX-fil
Presentation pres = new Presentation("UpdateExistingTable.pptx");
try {

    // Åtkomst till den första bilden
    ISlide sld = pres.getSlides().get_Item(0);

    // Initierar null TableEx
    ITable tbl = null;

    // Itererar genom formerna och sätter en referens till den funna tabellen
    for (IShape shp : sld.getShapes()) 
    {
        if (shp instanceof ITable) 
        {
            tbl = (ITable) shp;
            // Sätter texten för den första kolumnen i den andra raden
            tbl.get_Item(0, 1).getTextFrame().setText("New");
        }
    }
    
    // Sparar den ändrade presentationen till disk
    pres.save("table1_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Hitta cellen som äger en textram

När generisk text‑behandlingskod får ett ITextFrame från en tabell, använd metoden ITextFrame.getParentCell för att hämta den ägande ICell. För en tabellcell‑textram returnerar ITextFrame.getParentCell ägaren och ITextFrame.getParentShape returnerar null, även om själva tabellen är en form.

Cellkoordinaterna finns tillgängliga via de skrivskyddade metoderna ICell.getFirstColumnIndex och ICell.getFirstRowIndex. ITextFrame.getParentCell ger också skrivskyddad navigation: den returnerar ägaren men ändrar inte ägandet. Kontrollera alltid den returnerade cellen för null innan du använder den.

För ett fullständigt exempel som identifierar ägare av tabellceller och former, inklusive former knutna till SmartArt‑noder, se Search and Replace Text.

Justera text i en tabell

  1. Skapa en instans av klassen Presentation.
  2. Hämta en bilds referens via dess index.
  3. Lägg till ett ITable‑objekt på bilden.
  4. Få åtkomst till ett ITextFrame‑objekt från tabellen.
  5. Få åtkomst till IParagraph via [ITextFrame].
  6. Justera texten vertikalt.
  7. Spara den ändrade presentationen.

Denna Java‑kod visar hur du justerar text i en tabell:

import com.aspose.slides.*;
import java.awt.Color;

// Skapar en instans av Presentation-klassen
Presentation pres = new Presentation();
try {
    // Hämtar den första bilden 
    ISlide slide = pres.getSlides().get_Item(0);
    
    // Definierar kolumner med bredder och rader med höjder
    double[] dblCols = { 120, 120, 120, 120 };
    double[] dblRows = { 100, 100, 100, 100 };
    
    // Lägger till tabellformen på bilden
    ITable tbl = slide.getShapes().addTable(100, 50, dblCols, dblRows);
    tbl.get_Item(1, 0).getTextFrame().setText("10");
    tbl.get_Item(2, 0).getTextFrame().setText("20");
    tbl.get_Item(3, 0).getTextFrame().setText("30");
    
    // Åtkomst till textram
    ITextFrame txtFrame = tbl.get_Item(0, 0).getTextFrame();
    
    // Skapar Paragraph-objektet för textram
    IParagraph paragraph = txtFrame.getParagraphs().get_Item(0);
    
    // Skapar Portion-objektet för stycket
    IPortion portion = paragraph.getPortions().get_Item(0);
    portion.setText("Text here");
    portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
    portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
    
    // Justera texten vertikalt
    ICell cell = tbl.get_Item(0, 0);
    cell.setTextAnchorType(TextAnchorType.Center);
    cell.setTextVerticalType(TextVerticalType.Vertical270);
    
    // Sparar presentationen till disk
    pres.save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Ställ in textformatering på tabellnivå

  1. Skapa en instans av klassen Presentation.
  2. Hämta en bilds referens via dess index.
  3. Få åtkomst till ett ITable‑objekt från bilden.
  4. Ställ in setFontHeight(float value) för texten.
  5. Ställ in setAlignment(int value) och setMarginRight(float value).
  6. Ställ in setTextVerticalType(byte value).
  7. Spara den ändrade presentationen.

Denna Java‑kod visar hur du tillämpar dina föredragna formateringsalternativ på texten i en tabell:

import com.aspose.slides.*;

// Skapar en instans av Presentation-klassen
Presentation pres = new Presentation("simpletable.pptx");
try {
    // Låt oss anta att den första formen på den första bilden är en tabell
    ITable someTable = (ITable) pres.getSlides().get_Item(0).getShapes().get_Item(0);
    
    // Ställer in tabellcellernas teckenhöjd
    PortionFormat portionFormat = new PortionFormat();
    portionFormat.setFontHeight(25);
    someTable.setTextFormat(portionFormat);
    
    // Ställer in tabellcellernas textjustering och högermarginal i ett anrop
    ParagraphFormat paragraphFormat = new ParagraphFormat();
    paragraphFormat.setAlignment(TextAlignment.Right);
    paragraphFormat.setMarginRight(20);
    someTable.setTextFormat(paragraphFormat);
    
    // Ställer in tabellcellernas vertikala texttyp
    TextFrameFormat textFrameFormat = new TextFrameFormat();
    textFrameFormat.setTextVerticalType(TextVerticalType.Vertical);
    someTable.setTextFormat(textFrameFormat);
    
    pres.save("result.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Hämta tabellstilegenskaper

Aspose.Slides låter dig hämta stilegenskaperna för en tabell så att du kan använda dessa detaljer för en annan tabell eller någon annanstans. Denna Java‑kod visar hur du får stil‑egenskaperna från en förinställd tabellstil:

import com.aspose.slides.*;

Presentation pres = new Presentation();
try {
    ITable table = pres.getSlides().get_Item(0).getShapes().addTable(10, 10, new double[] { 100, 150 }, new double[] { 5, 5, 5 });
    table.setStylePreset(TableStylePreset.DarkStyle1); // ändra standardstilpresettemat 

    // Hämtar stilpreset för tabellen
    int stylePreset = table.getStylePreset();
    System.out.println("Table style preset: " + stylePreset);

    // Tillämpa det hämtade stilpresetet på en annan tabell
    ITable anotherTable = pres.getSlides().get_Item(0).getShapes().addTable(10, 100, new double[] { 100, 150 }, new double[] { 5, 5, 5 });
    anotherTable.setStylePreset(stylePreset);

    pres.save("table.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Lås bildförhållandet för en tabell

Bildförhållandet för en geometrisk form är förhållandet mellan dess storlekar i olika dimensioner. Aspose.Slides tillhandahåller egenskapen setAspectRatioLocked för att låta dig låsa bildförhållandet för tabeller och andra former.

Denna Java‑kod visar hur du låser bildförhållandet för en tabell:

import com.aspose.slides.*;

Presentation pres = new Presentation("pres.pptx");
try {
    ITable table = (ITable)pres.getSlides().get_Item(0).getShapes().get_Item(0);
    System.out.println("Lock aspect ratio set: " + table.getGraphicalObjectLock().getAspectRatioLocked());

    table.getGraphicalObjectLock().setAspectRatioLocked(!table.getGraphicalObjectLock().getAspectRatioLocked()); // invertera

    System.out.println("Lock aspect ratio set: " + table.getGraphicalObjectLock().getAspectRatioLocked());

    pres.save("pres-out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

FAQ

Kan jag aktivera läsriktning från höger till vänster (RTL) för en hel tabell och texten i dess celler?

Ja. Tabellen har en setRightToLeft‑metod, och stycken har ParagraphFormat.setRightToLeft. Genom att använda båda säkerställer du korrekt RTL‑ordning och rendering i cellerna.

Hur kan jag förhindra att användare flyttar eller ändrar storlek på en tabell i den slutliga filen?

Använd shape locks för att inaktivera flyttning, storleksändring, markering etc. Dessa lås gäller även för tabeller.

Stöds det att infoga en bild i en cell som bakgrund?

Ja. Du kan ange en picture fill för en cell; bilden täcker cellområdet enligt valt läge (sträcka eller mosaik).