Zarządzanie tabelami prezentacji w Pythonie
Wprowadzenie
Tabela w programie PowerPoint jest efektywnym sposobem prezentacji informacji. Informacje w siatce komórek (układanych w wiersze i kolumny) są proste i łatwe do zrozumienia.
Aspose.Slides udostępnia klasę Table klasę Cell oraz inne typy, które pozwalają tworzyć, aktualizować i zarządzać tabelami w różnego rodzaju prezentacjach.
Utworzenie tabeli od podstaw
- Utwórz instancję klasy Presentation.
- Uzyskaj odniesienie do slajdu po jego indeksie.
- Zdefiniuj listę szerokości kolumn.
- Zdefiniuj listę wysokości wierszy.
- Dodaj obiekt Table do slajdu za pomocą metody addTable.
- Iteruj przez każde Cell, aby zastosować formatowanie do górnych, dolnych, prawych i lewych krawędzi.
- Scal pierwsze dwie komórki pierwszego wiersza tabeli.
- Uzyskaj dostęp do TextFrame komórki Cell.
- Dodaj trochę tekstu do TextFrame.
- Zapisz zmodyfikowaną prezentację.
Ten kod w Pythonie pokazuje, jak utworzyć tabelę w prezentacji:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat
from java.awt import Color
# Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
presentation = Presentation()
try:
# Uzyskuje dostęp do pierwszego slajdu
slide = presentation.getSlides().get_Item(0)
# Definiuje kolumny o określonych szerokościach i wiersze o określonych wysokościach
column_widths = [50, 50, 50]
row_heights = [50, 30, 30, 30, 30]
# Dodaje kształt tabeli do slajdu
table = slide.getShapes().addTable(100, 50, column_widths, row_heights)
# Ustawia format krawędzi dla każdej komórki
for row in table.getRows():
for cell in row:
cell_format = cell.getCellFormat()
cell_format.getBorderTop().getFillFormat().setFillType(FillType.Solid)
cell_format.getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED)
cell_format.getBorderTop().setWidth(5)
cell_format.getBorderBottom().getFillFormat().setFillType(FillType.Solid)
cell_format.getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED)
cell_format.getBorderBottom().setWidth(5)
cell_format.getBorderLeft().getFillFormat().setFillType(FillType.Solid)
cell_format.getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED)
cell_format.getBorderLeft().setWidth(5)
cell_format.getBorderRight().getFillFormat().setFillType(FillType.Solid)
cell_format.getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED)
cell_format.getBorderRight().setWidth(5)
# Łączy komórki 1 i 2 wiersza 1
table.mergeCells(table.getRows().get_Item(0).get_Item(0), table.getRows().get_Item(0).get_Item(1), False)
# Dodaje tekst do scalonej komórki
table.getRows().get_Item(0).get_Item(0).getTextFrame().setText("Merged Cells")
# Zapisuje prezentację na dysku
presentation.save("table.pptx", SaveFormat.Pptx)
finally:
presentation.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 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 w Pythonie pokazuje, jak utworzyć tabelę ze standardową numeracją komórek:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat
from java.awt import Color
# Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
presentation = Presentation()
try:
# Uzyskuje dostęp do pierwszego slajdu
slide = presentation.getSlides().get_Item(0)
# Definiuje kolumny o określonych szerokościach i wiersze o określonych wysokościach
column_widths = [70, 70, 70, 70]
row_heights = [70, 70, 70, 70]
# Dodaje kształt tabeli do slajdu
table = slide.getShapes().addTable(100, 50, column_widths, row_heights)
# Ustawia format krawędzi dla każdej komórki
for row in table.getRows():
for cell in 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
presentation.save("StandardTables_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Dostęp do istniejącej tabeli
-
Utwórz instancję klasy Presentation.
-
Uzyskaj odniesienie do slajdu zawierającego tabelę po jego indeksie.
-
Zainicjalizuj zmienną dla obiektu Table, ustawiając ją na
None. -
Iteruj przez wszystkie obiekty Shape aż znajdziesz tabelę.
Jeśli podejrzewasz, że slajd, z którym pracujesz, zawiera jedną tabelę, możesz po prostu sprawdzić wszystkie jego kształty. Gdy kształt zostanie zidentyfikowany jako tabela, możesz użyć go jako obiektu Table. Jeśli jednak slajd zawiera kilka tabel, lepiej wyszukać potrzebną tabelę przy użyciu jej getAlternativeText.
-
Użyj obiektu Table, aby pracować z tabelą. W poniższym przykładzie aktualizujemy tekst w pierwszej kolumnie drugiego wiersza.
-
Zapisz zmodyfikowaną prezentację.
Ten kod w Pythonie pokazuje, jak uzyskać dostęp i pracować z istniejącą tabelą:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, Table
# Tworzy instancję klasy Presentation, która reprezentuje plik PPTX
presentation = Presentation("UpdateExistingTable.pptx")
try:
# Uzyskuje dostęp do pierwszego slajdu
slide = presentation.getSlides().get_Item(0)
# Inicjalizuje referencję do tabeli.
table = None
# Iteruje przez kształty i ustawia referencję do znalezionej tabeli
for shape in slide.getShapes():
if isinstance(shape, Table):
table = shape
# Ustawia tekst dla pierwszej kolumny drugiego wiersza
table.get_Item(0, 1).getTextFrame().setText("New")
# Zapisuje zmodyfikowaną prezentację na dysku
presentation.save("table1_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Znajdowanie komórki, która posiada ramkę tekstową
Gdy ogólny kod przetwarzający tekst otrzymuje TextFrame z tabeli, użyj metody TextFrame.getParentCell, aby pobrać właściciela – Cell. Dla ramki tekstowej w komórce tabeli, TextFrame.getParentCell zwraca właściciela, a TextFrame.getParentShape zwraca None, mimo że sama tabela jest kształtem.
Współrzędne komórki są dostępne poprzez metody tylko do odczytu Cell.getFirstColumnIndex i Cell.getFirstRowIndex. TextFrame.getParentCell także zapewnia nawigację tylko do odczytu: zwraca właściciela, ale nie zmienia własności. Zawsze sprawdzaj, czy zwrócona komórka nie jest None, zanim ją 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, znajdziesz w Search and Replace Text.
Wyrównywanie tekstu w tabeli
- Utwórz instancję klasy Presentation.
- Uzyskaj odniesienie do slajdu po jego indeksie.
- Dodaj obiekt Table do slajdu.
- Uzyskaj dostęp do obiektu TextFrame z tabeli.
- Uzyskaj dostęp do Paragraph obiektu TextFrame.
- Wyrównaj tekst pionowo.
- Zapisz zmodyfikowaną prezentację.
Ten kod w Pythonie pokazuje, jak wyrównać tekst w tabeli:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpime.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat, TextAnchorType, TextVerticalType
from java.awt import Color
# Tworzy instancję klasy Presentation
presentation = Presentation()
try:
# Pobiera pierwszy slajd
slide = presentation.getSlides().get_Item(0)
# Definiuje kolumny o określonych szerokościach i wiersze o określonych wysokościach
column_widths = [120, 120, 120, 120]
row_heights = [100, 100, 100, 100]
# Dodaje kształt tabeli do slajdu
table = slide.getShapes().addTable(100, 50, column_widths, row_heights)
table.get_Item(1, 0).getTextFrame().setText("10")
table.get_Item(2, 0).getTextFrame().setText("20")
table.get_Item(3, 0).getTextFrame().setText("30")
# Uzyskuje dostęp do ramki tekstowej
text_frame = table.get_Item(0, 0).getTextFrame()
# Uzyskuje dostęp do pierwszego akapitu w ramce tekstowej.
paragraph = text_frame.getParagraphs().get_Item(0)
# Uzyskuje dostęp do pierwszej części w akapicie.
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
cell = table.get_Item(0, 0)
cell.setTextAnchorType(TextAnchorType.Center)
cell.setTextVerticalType(TextVerticalType.Vertical270)
# Zapisuje prezentację na dysku
presentation.save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Ustaw formatowanie tekstu na poziomie tabeli
- Utwórz instancję klasy Presentation.
- Uzyskaj odniesienie do slajdu po jego indeksie.
- Uzyskaj dostęp do obiektu Table ze slajdu.
- Ustaw wysokość czcionki tekstu przy pomocy setFontHeight.
- Ustaw wyrównanie i prawy margines przy pomocy setAlignment oraz setMarginRight.
- Ustaw pionowy typ tekstu przy pomocy setTextVerticalType.
- Zapisz zmodyfikowaną prezentację.
Ten kod w Pythonie pokazuje, jak zastosować wybrane opcje formatowania do tekstu w tabeli:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import ParagraphFormat, PortionFormat, Presentation, SaveFormat, TextAlignment, TextFrameFormat, TextVerticalType, Table
# Tworzy instancję klasy Presentation
presentation = Presentation("simpletable.pptx")
try:
# Załóżmy, że pierwszy kształt na pierwszym slajdzie jest tabelą
shape = presentation.getSlides().get_Item(0).getShapes().get_Item(0)
if isinstance(shape, Table):
table = shape
# Ustawia wysokość czcionki komórek tabeli
portion_format = PortionFormat()
portion_format.setFontHeight(25)
table.setTextFormat(portion_format)
# Ustawia wyrównanie tekstu i prawy margines komórek tabeli w jednym wywołaniu
paragraph_format = ParagraphFormat()
paragraph_format.setAlignment(TextAlignment.Right)
paragraph_format.setMarginRight(20)
table.setTextFormat(paragraph_format)
# Ustawia pionowy typ tekstu komórek tabeli
text_frame_format = TextFrameFormat()
text_frame_format.setTextVerticalType(TextVerticalType.Vertical)
table.setTextFormat(text_frame_format)
presentation.save("result.pptx", SaveFormat.Pptx)
else:
print("The first shape is not a table.")
finally:
presentation.dispose()
Pobieranie właściwości stylu tabeli
Aspose.Slides pozwala pobrać właściwości stylu tabeli, aby można było wykorzystać te informacje w innej tabeli lub w innym miejscu. Ten kod w Pythonie pokazuje, jak uzyskać właściwości stylu z predefiniowanego stylu tabeli:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, TableStylePreset
presentation = Presentation()
try:
table = presentation.getSlides().get_Item(0).getShapes().addTable(10, 10, [100, 150], [5, 5, 5])
table.setStylePreset(TableStylePreset.DarkStyle1) # zmień domyślny styl tabeli
# Pobiera preset stylu tabeli
style_preset = table.getStylePreset()
print("Table style preset: ", style_preset)
# Zastosuj pobrany preset stylu do innej tabeli
another_table = presentation.getSlides().get_Item(0).getShapes().addTable(10, 100, [100, 150], [5, 5, 5])
another_table.setStylePreset(style_preset)
presentation.save("table.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Zablokowanie proporcji tabeli
Proporcja geometrycznego kształtu to stosunek jego wymiarów w różnych wymiarach. Aspose.Slides udostępnia metodę setAspectRatioLocked, aby umożliwić zablokowanie ustawienia proporcji dla tabel i innych kształtów.
Ten kod w Pythonie pokazuje, jak zablokować proporcje tabeli:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, Table
presentation = Presentation("pres.pptx")
try:
shape = presentation.getSlides().get_Item(0).getShapes().get_Item(0)
if isinstance(shape, Table):
table = shape
print("Lock aspect ratio set: ", table.getGraphicalObjectLock().getAspectRatioLocked())
table.getGraphicalObjectLock().setAspectRatioLocked(not table.getGraphicalObjectLock().getAspectRatioLocked()) # odwróć
print("Lock aspect ratio set: ", table.getGraphicalObjectLock().getAspectRatioLocked())
presentation.save("pres-out.pptx", SaveFormat.Pptx)
else:
print("The first shape is not a table.")
finally:
presentation.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ę uniemożliwić użytkownikom przenoszenie lub zmianę rozmiaru tabeli w finalnym pliku?
Użyj shape locks, aby wyłączyć przenoszenie, zmianę rozmiaru, zaznaczanie itp. Te blokady działają również na tabele.
Czy wstawianie obrazu wewnątrz 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 kafelkowanie).