Správa tabulek v prezentacích pomocí Pythonu
Úvod
Tabulky v PowerPointu organizují informace do řádků a sloupců, což usnadňuje čtení a porovnávání hodnot.
Aspose.Slides poskytuje třídy Table a Cell a další typy, které vám umožní vytvářet, aktualizovat a spravovat tabulky v prezentacích.
Vytvoření tabulky od nuly
Vytvořte tabulku zadáním její pozice, šířek sloupců a výšek řádků. Po přidání do snímku můžete formátovat okraje buněk, slučovat buňky a vkládat text.
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na snímek podle jeho indexu.
- Definujte seznam šířek sloupců v bodech.
- Definujte seznam výšek řádků v bodech.
- Přidejte objekt Table na snímek pomocí metody add_table.
- Projděte každou Cell a aplikujte formátování na horní, spodní, pravý a levý okraj.
- Sloučte první dvě buňky v první řadě tabulky.
- Přistupte ke sloučené buňce přes její vlastnost text_frame.
- Nastavte text ve sloučené buňce.
- Uložte upravenou prezentaci.
Níže uvedený příklad vytvoří tabulku se třemi sloupci a pěti řádky na pozici (100, 50) bodů. Aplikuje červené okraje o šířce 5 bodů, sloučí první dvě buňky v první řadě a uloží výsledek jako table.pptx.
import aspose.pydrawing as draw
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
column_widths = [50, 50, 50]
row_heights = [50, 30, 30, 30, 30]
table = slide.shapes.add_table(100, 50, column_widths, row_heights)
for row in table.rows:
for cell in row:
cell_format = cell.cell_format
cell_format.border_top.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_top.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_top.width = 5
cell_format.border_bottom.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_bottom.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_bottom.width = 5
cell_format.border_left.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_left.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_left.width = 5
cell_format.border_right.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_right.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_right.width = 5
table.merge_cells(table.rows[0][0], table.rows[0][1], False)
table.rows[0][0].text_frame.text = "Merged Cells"
presentation.save("table.pptx", slides.export.SaveFormat.PPTX)
Číslování ve standardní tabulce
Ve standardní tabulce jsou indexy buněk nulové a používají pořadí (sloupec, řádek). První buňka má index (0, 0). V Pythonu přistupujete k buňce pomocí table.rows[row_index][column_index]; v tomto výrazu je nejprve index řádku.
Například buňky v tabulce se 4 sloupci a 4 řádky jsou číslovány takto:
| (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) |
Tento příklad vytvoří 4 × 4 tabulku uvedenou výše, se šířkami sloupců a výškami řádků 70 bodů a červenými okraji buněk o šířce 5 bodů. Souřadnice ilustrují indexy buněk; příklad nechá buňky prázdné a uloží tabulku jako StandardTables_out.pptx.
import aspose.pydrawing as draw
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
column_widths = [70, 70, 70, 70]
row_heights = [70, 70, 70, 70]
table = slide.shapes.add_table(100, 50, column_widths, row_heights)
for row in table.rows:
for cell in row:
cell_format = cell.cell_format
cell_format.border_top.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_top.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_top.width = 5
cell_format.border_bottom.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_bottom.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_bottom.width = 5
cell_format.border_left.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_left.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_left.width = 5
cell_format.border_right.fill_format.fill_type = slides.FillType.SOLID
cell_format.border_right.fill_format.solid_fill_color.color = draw.Color.red
cell_format.border_right.width = 5
presentation.save("StandardTables_out.pptx", slides.export.SaveFormat.PPTX)
Přístup k existující tabulce
Tabulky jsou uloženy ve sbírce tvarů snímku. Procházejte tvary, abyste našli tabulku, a poté použijte třídu Table k načtení nebo aktualizaci jejích buněk.
- Načtěte prezentaci pomocí třídy Presentation.
- Získejte odkaz na snímek obsahující tabulku podle jeho indexu.
- Procházejte objekty Shape a zastavte se, když najdete tabulku. Pokud snímek obsahuje několik tabulek, použijte alternative_text k identifikaci té požadované.
- Aktualizujte text v cílové buňce.
- Uložte upravenou prezentaci.
Níže uvedený příklad otevře UpdateExistingTable.pptx a najde první tabulku na prvním snímku. Nastaví buňku ve sloupci 0, řádek 1 na New a uloží výsledek jako table1_out.pptx. Vstup musí obsahovat alespoň jeden snímek a první tabulka na tomto snímku musí mít alespoň jeden sloupec a dva řádky.
import aspose.slides as slides
with slides.Presentation("UpdateExistingTable.pptx") as presentation:
slide = presentation.slides[0]
table = None
for shape in slide.shapes:
if isinstance(shape, slides.Table):
table = shape
break
if table is not None and len(table.rows) >= 2:
table.rows[1][0].text_frame.text = "New"
presentation.save("table1_out.pptx", slides.export.SaveFormat.PPTX)
Pro změnu velikosti řádku v existující tabulce a pochopení, proč může jeho skutečná výška převýšit požadované minimum, viz Control Row Height.
Nalezení buňky, která vlastní textový rámec
Když obecný kód pro zpracování textu získá TextFrame z tabulky, použijte vlastnost TextFrame.parent_cell k získání vlastnické Cell. Pro textový rámec buňky tabulky je TextFrame.parent_cell nastaven a TextFrame.parent_shape je None, přestože samotná tabulka je tvar.
Souřadnice buňky jsou dostupné prostřednictvím pouze pro čtení vlastností Cell.first_column_index a Cell.first_row_index. TextFrame.parent_cell je také jen pro čtení: poskytuje navigaci k vlastníkovi, ale nemění vlastnictví. Vždy zkontrolujte, zda vrácená buňka není None, před jejím použitím.
Pro kompletní příklad, který identifikuje vlastníky buňky tabulky a tvaru, včetně tvarů spojených se SmartArt uzly, viz Search and Replace Text.
Zarovnání textu v tabulce
Můžete řídit vertikální ukotvení a směr textu jednotlivých buněk tabulky. Příklad v této sekci vycentruje text v první buňce a otočí jej o 270 stupňů.
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na snímek podle jeho indexu.
- Přidejte objekt Table na snímek.
- Získejte objekt TextFrame z tabulky.
- Získejte první Paragraph a nastavte jeho text a barvu.
- Nastavte buňce text_anchor_type a text_vertical_type.
- Uložte upravenou prezentaci.
Tento příklad vytvoří 4 × 4 tabulku s šířkami sloupců 120 bodů a výškami řádků 100 bodů. Formátuje text v buňce (0, 0), přidá hodnoty do zbývajících buněk v první řadě a uloží výsledek jako Vertical_Align_Text_out.pptx.
import aspose.pydrawing as draw
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
column_widths = [120, 120, 120, 120]
row_heights = [100, 100, 100, 100]
table = slide.shapes.add_table(100, 50, column_widths, row_heights)
table.rows[0][1].text_frame.text = "10"
table.rows[0][2].text_frame.text = "20"
table.rows[0][3].text_frame.text = "30"
cell = table.rows[0][0]
paragraph = cell.text_frame.paragraphs[0]
portion = paragraph.portions[0]
portion.text = "Text here"
portion.portion_format.fill_format.fill_type = slides.FillType.SOLID
portion.portion_format.fill_format.solid_fill_color.color = draw.Color.black
cell.text_anchor_type = slides.TextAnchorType.CENTER
cell.text_vertical_type = slides.TextVerticalType.VERTICAL270
presentation.save("Vertical_Align_Text_out.pptx", slides.export.SaveFormat.PPTX)
Nastavení formátování textu na úrovni tabulky
Použijte set_text_format k aplikaci formátování textu na všechny buňky v tabulce. Jeho přetížení přijímají formátování úseku, odstavce a textového rámce, takže můžete nastavit tyto vlastnosti bez procházení jednotlivých buněk.
- Načtěte prezentaci pomocí třídy Presentation.
- Získejte odkaz na snímek podle jeho indexu.
- Získejte objekt Table ze snímku.
- Nastavte font_height pro text.
- Nastavte alignment a margin_right.
- Nastavte text_vertical_type.
- Uložte upravenou prezentaci.
Níže uvedený příklad otevře table.pptx, který musí obsahovat alespoň jeden snímek s tabulkou jako jeho prvním tvarem. Nastaví velikost písma na 25 bodů, zarovná odstavce vpravo s pravým okrajem 20 bodů a nastaví text vertikální. Formátovaná prezentace je uložena jako result.pptx.
import aspose.slides as slides
with slides.Presentation("table.pptx") as presentation:
slide = presentation.slides[0]
table = slide.shapes[0]
portion_format = slides.PortionFormat()
portion_format.font_height = 25
table.set_text_format(portion_format)
paragraph_format = slides.ParagraphFormat()
paragraph_format.alignment = slides.TextAlignment.RIGHT
paragraph_format.margin_right = 20
table.set_text_format(paragraph_format)
text_frame_format = slides.TextFrameFormat()
text_frame_format.text_vertical_type = slides.TextVerticalType.VERTICAL
table.set_text_format(text_frame_format)
presentation.save("result.pptx", slides.export.SaveFormat.PPTX)
Získání vlastností stylu tabulky
Použijte style_preset k přečtení nebo přiřazení předdefinovaného stylu tabulky. Tento příklad použije TableStylePreset.DARK_STYLE1 na jednu tabulku, vypíše název předvoleb a přiřadí stejný styl druhé tabulce. Obě tabulky jsou uloženy v table-style.pptx.
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
column_widths = [100, 150]
row_heights = [5, 5, 5]
table = slide.shapes.add_table(10, 10, column_widths, row_heights)
table.style_preset = slides.TableStylePreset.DARK_STYLE1
style_preset = table.style_preset
print(f"Table style preset: {style_preset.name}")
another_table = slide.shapes.add_table(10, 100, column_widths, row_heights)
another_table.style_preset = style_preset
presentation.save("table-style.pptx", slides.export.SaveFormat.PPTX)
Uzamknutí poměru stran tabulky
Poměr stran tabulky je poměr její šířky k výšce. Použijte aspect_ratio_locked k uzamčení tohoto poměru pro tabulku.
Níže uvedený příklad otevře pres.pptx, který musí obsahovat alespoň jeden snímek s tabulkou jako jeho prvním tvarem. Vytiskne aktuální stav uzamčení, povolí uzamčení poměru stran, vytiskne aktualizovaný stav (True) a uloží výsledek jako pres-out.pptx.
import aspose.slides as slides
with slides.Presentation("pres.pptx") as presentation:
slide = presentation.slides[0]
table = slide.shapes[0]
print(f"Lock aspect ratio set: {table.shape_lock.aspect_ratio_locked}")
table.shape_lock.aspect_ratio_locked = True
print(f"Lock aspect ratio set: {table.shape_lock.aspect_ratio_locked}")
presentation.save("pres-out.pptx", slides.export.SaveFormat.PPTX)
FAQ
Mohu povolit směr čtení zprava doleva (RTL) pro celou tabulku a text v jejích buňkách?
Ano. Tabulka poskytuje vlastnost right_to_left, a odstavce mají ParagraphFormat.right_to_left. Použití obou zajišťuje správné RTL pořadí a vykreslení uvnitř buněk.
Jak mohu zabránit uživatelům v přesunu nebo změně velikosti tabulky v konečném souboru?
Použijte shape locks, abyste zakázali přesun, změnu velikosti, výběr apod. Tyto zámky se vztahují i na tabulky.
Je podporováno vložení obrázku uvnitř buňky jako pozadí?
Ano. Můžete nastavit picture fill pro buňku; obrázek pokryje oblast buňky podle zvoleného režimu (roztáhnout nebo dlaždice).