Zarządzanie tabelami prezentacji w systemie Android

Wprowadzenie

Tabela w programie PowerPoint jest wydajnym sposobem wyświetlania i prezentowania informacji. Informacje w siatce komórek (ustawionych w wierszach i kolumnach) są przejrzyste i łatwe do zrozumienia.

Aspose.Slides udostępnia klasę Table, interfejs ITable, klasę Cell oraz interfejs ICell i inne typy, które pozwalają tworzyć, aktualizować i zarządzać tabelami w różnego rodzaju prezentacjach.

Utworzenie tabeli od podstaw

  1. Utwórz instancję klasy Presentation.
  2. Pobierz odwołanie do slajdu za pomocą jego indeksu.
  3. Zdefiniuj tablicę columnWidth.
  4. Zdefiniuj tablicę rowHeight.
  5. Dodaj obiekt ITable do slajdu metodą addTable.
  6. Przejdź przez każdą ICell, aby zastosować formatowanie krawędzi: górnej, dolnej, prawej i lewej.
  7. Połącz pierwsze dwie komórki pierwszego wiersza tabeli.
  8. Uzyskaj dostęp do TextFrame komórki ICell.
  9. Dodaj tekst do TextFrame.
  10. Zapisz zmodyfikowaną prezentację.

Ten kod Java pokazuje, jak utworzyć tabelę w prezentacji:

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

// Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
Presentation pres = new Presentation();
try {
    // Uzyskuje dostęp do pierwszego slajdu
    ISlide sld = pres.getSlides().get_Item(0);

    // Definiuje kolumny o szerokościach i wiersze o wysokościach
    double[] dblCols = {50, 50, 50};
    double[] dblRows = {50, 30, 30, 30, 30};

    // Dodaje kształt tabeli do slajdu
    ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);

    // Ustawia formatowanie obramowania dla każdej komórki
    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);
        }
    }
    // Łączy komórki 1 i 2 wiersza 1
    tbl.mergeCells(tbl.getRows().get_Item(0).get_Item(0), tbl.getRows().get_Item(0).get_Item(1), false);

    // Dodaje tekst do połączonej komórki
    tbl.getRows().get_Item(0).get_Item(0).getTextFrame().setText("Merged Cells");

    // Zapisuje prezentację na dysku
    pres.save("table.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Numeracja w standardowej tabeli

W standardowej tabeli numeracja komórek jest prosta i zaczyna się od zera. Pierwsza komórka w tabeli ma indeks 0,0 (kolumna 0, wiersz 0).

Na przykład komórki w tabeli o 4 kolumnach i 4 wierszach są numerowane w następujący sposób:

(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)

Ten kod Java pokazuje, jak określić numerację komórek w tabeli:

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

// Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
Presentation pres = new Presentation();
try {
    // Uzyskuje dostęp do pierwszego slajdu
    ISlide sld = pres.getSlides().get_Item(0);

    // Definiuje kolumny o szerokościach i wiersze o wysokościach
    double[] dblCols = { 70, 70, 70, 70 };
    double[] dblRows = { 70, 70, 70, 70 };

    // Dodaje kształt tabeli do slajdu
    ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);

    // Ustawia formatowanie obramowania dla każdej komórki
    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);
        }
    }

    // Zapisuje prezentację na dysk
    pres.save("StandardTables_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Dostęp do istniejącej tabeli

  1. Utwórz instancję klasy Presentation.

  2. Pobierz odwołanie do slajdu zawierającego tabelę za pomocą jego indeksu.

  3. Utwórz obiekt ITable i przypisz mu wartość null.

  4. Przejdź przez wszystkie obiekty IShape, aż znajdziesz tabelę.

    Jeśli podejrzewasz, że dany slajd zawiera jedną tabelę, możesz po prostu sprawdzić wszystkie jego kształty. Gdy kształt zostanie zidentyfikowany jako tabela, możesz wykonać rzutowanie do obiektu Table. Jeśli natomiast slajd zawiera kilka tabel, lepiej wyszukać potrzebną tabelę przy użyciu jej metody setAlternativeText(String value).

  5. Użyj obiektu ITable do pracy z tabelą. W poniższym przykładzie ustawiamy tekst komórki w tabeli.

  6. Zapisz zmodyfikowaną prezentację.

Ten kod Java pokazuje, jak uzyskać dostęp i pracować z istniejącą tabelą:

import com.aspose.slides.*;

// Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
Presentation pres = new Presentation("UpdateExistingTable.pptx");
try {

    // Uzyskuje dostęp do pierwszego slajdu
    ISlide sld = pres.getSlides().get_Item(0);

    // Inicjalizuje zmienną TableEx jako null
    ITable tbl = null;

    // Iteruje po kształtach i ustawia odwołanie do znalezionej tabeli
    for (IShape shp : sld.getShapes()) 
    {
        if (shp instanceof ITable) 
        {
            tbl = (ITable) shp;
            // Ustawia tekst w pierwszej kolumnie drugiego wiersza
            tbl.get_Item(0, 1).getTextFrame().setText("New");
        }
    }
    
    // Zapisuje zmodyfikowaną prezentację na dysk
    pres.save("table1_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Znajdowanie komórki, do której należy ramka tekstowa

Gdy ogólny kod przetwarzający tekst otrzymuje obiekt ITextFrame z tabeli, użyj metody ITextFrame.getParentCell aby uzyskać właściciela – ICell. Dla ramki tekstowej komórki tabeli metoda ITextFrame.getParentCell zwraca właściciela, a metoda ITextFrame.getParentShape zwraca null, mimo że sama tabela jest kształtem.

Współrzędne komórki są dostępne poprzez właściwości tylko do odczytu ICell.getFirstColumnIndex i ICell.getFirstRowIndex. Metoda ITextFrame.getParentCell zapewnia także nawigację tylko do odczytu: zwraca właściciela, ale nie zmienia własności. Zawsze sprawdzaj, czy zwrócona komórka nie jest null, zanim jej użyjesz.

Pełny przykład identyfikujący właścicieli komórek tabeli i kształtów, w tym kształty powiązane z węzłami SmartArt, znajduje się w sekcji Search and Replace Text.

Wyrównywanie tekstu w tabeli

  1. Utwórz instancję klasy Presentation.
  2. Pobierz odwołanie do slajdu za pomocą jego indeksu.
  3. Dodaj obiekt ITable do slajdu.
  4. Uzyskaj dostęp do obiektu ITextFrame z tabeli.
  5. Uzyskaj dostęp do IParagraph w ITextFrame.
  6. Wyrównaj tekst w pionie.
  7. Zapisz zmodyfikowaną prezentację.

Ten kod Java pokazuje, jak wyrównać tekst w tabeli:

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

// Tworzy instancję klasy Presentation
Presentation pres = new Presentation();
try {
    // Pobiera pierwszy slajd 
    ISlide slide = pres.getSlides().get_Item(0);
    
    // Definiuje kolumny o szerokościach i wiersze o wysokościach
    double[] dblCols = { 120, 120, 120, 120 };
    double[] dblRows = { 100, 100, 100, 100 };
    
    // Dodaje kształt tabeli do slajdu
    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");
    
    // Uzyskuje dostęp do ramki tekstowej
    ITextFrame txtFrame = tbl.get_Item(0, 0).getTextFrame();
    
    // Tworzy obiekt Paragraph dla ramki tekstowej
    IParagraph paragraph = txtFrame.getParagraphs().get_Item(0);
    
    // Tworzy obiekt Portion dla akapitu
    IPortion portion = paragraph.getPortions().get_Item(0);
    portion.setText("Text here");
    portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid);
    portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK);
    
    // Wyrównuje tekst pionowo
    ICell cell = tbl.get_Item(0, 0);
    cell.setTextAnchorType(TextAnchorType.Center);
    cell.setTextVerticalType(TextVerticalType.Vertical270);
    
    // Zapisuje prezentację na dysk
    pres.save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Ustawienie formatowania tekstu na poziomie tabeli

  1. Utwórz instancję klasy Presentation.
  2. Pobierz odwołanie do slajdu za pomocą jego indeksu.
  3. Uzyskaj dostęp do obiektu ITable ze slajdu.
  4. Ustaw setFontHeight(float value) dla tekstu.
  5. Ustaw setAlignment(int value) oraz setMarginRight(float value).
  6. Ustaw setTextVerticalType(byte value).
  7. Zapisz zmodyfikowaną prezentację.

Ten kod Java pokazuje, jak zastosować wybrane opcje formatowania do tekstu w tabeli:

import com.aspose.slides.*;

// Tworzy instancję klasy Presentation
Presentation pres = new Presentation("simpletable.pptx");
try {
    // Załóżmy, że pierwszy kształt na pierwszym slajdzie jest tabelą
    ITable someTable = (ITable) pres.getSlides().get_Item(0).getShapes().get_Item(0);
    
    // Ustawia wysokość czcionki komórek tabeli
    PortionFormat portionFormat = new PortionFormat();
    portionFormat.setFontHeight(25);
    someTable.setTextFormat(portionFormat);
    
    // Ustawia wyrównanie tekstu komórek tabeli i prawy margines w jednej instrukcji
    ParagraphFormat paragraphFormat = new ParagraphFormat();
    paragraphFormat.setAlignment(TextAlignment.Right);
    paragraphFormat.setMarginRight(20);
    someTable.setTextFormat(paragraphFormat);
    
    // Ustawia pionowy typ tekstu w komórkach tabeli
    TextFrameFormat textFrameFormat = new TextFrameFormat();
    textFrameFormat.setTextVerticalType(TextVerticalType.Vertical);
    someTable.setTextFormat(textFrameFormat);
    
    pres.save("result.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Pobieranie właściwości stylu tabeli

Aspose.Slides umożliwia pobranie właściwości stylu tabeli, aby można je było wykorzystać w innej tabeli lub w dowolnym miejscu. Ten kod Java pokazuje, jak uzyskać właściwości stylu z gotowego stylu tabeli:

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); // zmień domyślny preset stylu

    // Pobierz preset stylu tabeli
    int stylePreset = table.getStylePreset();
    System.out.println("Table style preset: " + stylePreset);

    // Zastosuj pobrany preset stylu do innej tabeli
    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();
}

Zablokowanie proporcji tabeli

Proporcje geometrycznego kształtu określają stosunek jego wymiarów w poszczególnych kierunkach. Aspose.Slides udostępnia właściwość setAspectRatioLocked, aby umożliwić zablokowanie ustawienia proporcji dla tabel i innych kształtów.

Ten kod Java pokazuje, jak zablokować proporcje tabeli:

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()); // odwróć

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

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

FAQ

Czy mogę włączyć kierunek od prawej do lewej (RTL) dla całej tabeli i tekstu w jej komórkach?

Tak. Tabela udostępnia metodę setRightToLeft, a akapity mają ParagraphFormat.setRightToLeft. Użycie obu zapewnia poprawny porządek RTL i renderowanie wewnątrz komórek.

Jak mogę zapobiec przenoszeniu lub zmianie rozmiaru tabeli przez użytkowników w gotowym pliku?

Użyj blokad kształtu, aby wyłączyć przenoszenie, zmianę rozmiaru, zaznaczanie itp. Blokady te dotyczą również tabel.

Czy wstawianie obrazu jako tła w komórce jest obsługiwane?

Tak. Możesz ustawić picture fill dla komórki; obraz pokryje obszar komórki zgodnie z wybranym trybem (rozciąganie lub układanie).