Zarządzanie tabelami prezentacji w Javie
Wprowadzenie
Tabela w programie PowerPoint jest efektywnym sposobem wyświetlania i przedstawiania informacji. Informacje w siatce komórek (ustawionych w wierszach i kolumnach) są proste i łatwe do zrozumienia.
Aspose.Slides udostępnia klasę Table, interfejs ITable, klasę Cell, interfejs ICell oraz inne typy, które umożliwiają tworzenie, aktualizowanie i zarządzanie tabelami we wszystkich rodzajach prezentacji.
Utworzenie tabeli od podstaw
- Utwórz instancję klasy Presentation.
- Uzyskaj odniesienie do slajdu przez jego indeks.
- Zdefiniuj tablicę
columnWidth. - Zdefiniuj tablicę
rowHeight. - Dodaj obiekt ITable do slajdu za pomocą metody addTable.
- Iteruj przez każdy ICell i zastosuj formatowanie do górnej, dolnej, prawej i lewej krawędzi.
- Scal pierwsze dwa komórki pierwszego wiersza tabeli.
- Uzyskaj dostęp do TextFrame komórki ICell.
- Dodaj trochę tekstu do TextFrame.
- Zapisz zmodyfikowaną prezentację.
Ten kod w języku 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 określonych szerokościach i wiersze o określonych 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 format 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);
}
}
// Scala 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 scalonej 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 z 4 kolumnami i 4 wierszami są numerowane w ten 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 w języku 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 format 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 dysku
pres.save("StandardTables_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Uzyskanie dostępu do istniejącej tabeli
-
Utwórz instancję klasy Presentation.
-
Uzyskaj odniesienie do slajdu zawierającego tabelę przez jego indeks.
-
Utwórz obiekt ITable i ustaw go na
null. -
Iteruj przez wszystkie obiekty IShape aż znajdziesz tabelę.
Jeśli podejrzewasz, że slajd, z którym pracujesz, zawiera jedną tabelę, możesz po prostu sprawdzić wszystkie kształty, które on zawiera. Gdy kształt zostanie zidentyfikowany jako tabela, możesz rzutować go na obiekt Table. Jeśli jednak slajd zawiera kilka tabel, lepiej wyszukać potrzebną tabelę za pomocą jej setAlternativeText(String value).
-
Użyj obiektu ITable do pracy z tabelą. W przykładzie poniżej dodaliśmy nowy wiersz do tabeli.
-
Zapisz zmodyfikowaną prezentację.
Ten kod w języku 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;
// Przegląda kształty i ustawia referencję do znalezionej tabeli
for (IShape shp : sld.getShapes())
{
if (shp instanceof ITable)
{
tbl = (ITable) shp;
// Ustawia tekst dla pierwszej kolumny drugiego wiersza
tbl.get_Item(0, 1).getTextFrame().setText("New");
}
}
// Zapisuje zmodyfikowaną prezentację na dysku
pres.save("table1_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Znajdź komórkę, 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 pobrać należącą ICell. Dla ramki tekstowej komórki tabeli, ITextFrame.getParentCell zwraca właściciela, a ITextFrame.getParentShape zwraca null, mimo że sama tabela jest kształtem.
Współrzędne komórki są dostępne za pośrednictwem metod tylko do odczytu ICell.getFirstColumnIndex i ICell.getFirstRowIndex. ITextFrame.getParentCell zapewnia również nawigację tylko do odczytu: zwraca właściciela, ale nie zmienia własności. Zawsze sprawdzaj, czy zwrócona komórka nie jest null przed jej użyciem.
Pełny przykład, który identyfikuje właścicieli komórek tabeli i kształtów, w tym kształty powiązane z węzłami SmartArt, znajduje się w Search and Replace Text.
Wyrównanie tekstu w tabeli
- Utwórz instancję klasy Presentation.
- Uzyskaj odniesienie do slajdu przez jego indeks.
- Dodaj obiekt ITable do slajdu.
- Uzyskaj dostęp do obiektu ITextFrame z tabeli.
- Uzyskaj dostęp do IParagraph w ramach ITextFrame.
- Wyrównaj tekst pionowo.
- Zapisz zmodyfikowaną prezentację.
Ten kod w języku 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 {
// Uzyskuje 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 dysku
pres.save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Ustaw formatowanie tekstu na poziomie tabeli
- Utwórz instancję klasy Presentation.
- Uzyskaj odniesienie do slajdu przez jego indeks.
- Uzyskaj dostęp do obiektu ITable ze slajdu.
- Ustaw setFontHeight(float value) dla tekstu.
- Ustaw setAlignment(int value) oraz setMarginRight(float value).
- Ustaw setTextVerticalType(byte value).
- Zapisz zmodyfikowaną prezentację.
Ten kod w języku 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 oraz prawy margines w jednym wywołaniu
ParagraphFormat paragraphFormat = new ParagraphFormat();
paragraphFormat.setAlignment(TextAlignment.Right);
paragraphFormat.setMarginRight(20);
someTable.setTextFormat(paragraphFormat);
// Ustawia pionowy typ tekstu komórek 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 pozwala pobrać właściwości stylu tabeli, aby móc użyć ich dla innej tabeli lub w innym miejscu. Ten kod w języku Java pokazuje, jak uzyskać właściwości stylu z predefiniowanego 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
// Pobiera preset stylu tabeli
int stylePreset = table.getStylePreset();
System.out.println("Table style preset: " + stylePreset);
// Zastosowuje 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 kształtu geometrycznego to stosunek jego rozmiarów w różnych wymiarach. Aspose.Slides udostępnia właściwość setAspectRatioLocked pozwalającą zablokować ustawienie proporcji dla tabel i innych kształtów.
Ten kod w języku 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 odczytu 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 prawidłowy porządek RTL i renderowanie wewnątrz komórek.
Jak mogę zapobiec przenoszeniu lub zmianie rozmiaru tabeli przez użytkowników w ostatecznym pliku?
Użyj shape locks, aby wyłączyć przenoszenie, zmianę rozmiaru, zaznaczanie itp. Te blokady obowiązują również dla tabel.
Czy wstawianie obrazu do komórki jako tła jest obsługiwane?
Tak. Możesz ustawić picture fill dla komórki; obraz pokryje obszar komórki zgodnie z wybranym trybem (rozciąganie lub wzór).