Správa buněk tabulky v prezentacích pomocí Pythonu
Přehled
Aspose.Slides vám umožňuje přístup k buňkám tabulek a jejich úpravu v prezentacích PowerPoint. Tento článek vysvětluje, jak identifikovat sloučené buňky tabulky, odstranit okraje buněk, pracovat s číslováním buněk po jejich sloučení nebo rozdělení, změnit barvu pozadí buňky a přidat obrázek do buňky tabulky. Příklady ukazují, jak vytvořit nebo otevřít prezentaci, získat tabulku ze snímku, aktualizovat formátování buňky pomocí vlastností buňky a uložit upravenou prezentaci jako soubor PPTX.
Identifikace sloučené buňky tabulky
- Vytvořte instanci třídy Presentation .
- Získejte tabulku z prvního snímku.
- Iterujte řádky a sloupce tabulky a vyhledejte sloučené buňky.
- Vytiskněte zprávu, když jsou nalezeny sloučené buňky.
Tento kód v Pythonu ukazuje, jak v prezentaci identifikovat sloučené buňky tabulky:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, Table
presentation = Presentation("SomePresentationWithTable.pptx")
try:
# Předpokládejme, že první tvar na první snímku je tabulka.
shape = presentation.getSlides().get_Item(0).getShapes().get_Item(0)
if isinstance(shape, Table):
table = shape
for i in range(table.getRows().size()):
for j in range(table.getColumns().size()):
current_cell = table.getRows().get_Item(i).get_Item(j)
if current_cell.isMergedCell():
print(f"Cell {i};{j} is part of a merged cell with RowSpan={current_cell.getRowSpan()} and ColSpan={current_cell.getColSpan()} starting from Cell {current_cell.getFirstRowIndex()};{current_cell.getFirstColumnIndex()}.")
else:
print("The first shape is not a table.")
finally:
presentation.dispose()
Odstranění okrajů buněk tabulky
- Vytvořte instanci třídy Presentation .
- Získejte odkaz na snímek podle jeho indexu.
- Definujte seznam šířek sloupců.
- Definujte seznam výšek řádků.
- Přidejte tabulku na snímek pomocí metody addTable .
- Iterujte přes každou buňku a odstraňte horní, spodní, pravý a levý okraj.
- Uložte upravenou prezentaci jako soubor PPTX.
Tento kód v Pythonu ukazuje, jak odstranit okraje z buněk tabulky:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpython.startJVM()
from asposeslides.api import Presentation, FillType, SaveFormat
presentation = Presentation()
try:
# Přístup k prvnímu snímku.
slide = presentation.getSlides().get_Item(0)
# Definujte šířky sloupců a výšky řádků.
column_widths = [50, 50, 50, 50]
row_heights = [50, 30, 30, 30, 30]
# Přidejte tabulku na snímek.
table = slide.getShapes().addTable(100, 50, column_widths, row_heights)
# Nastavte formát okrajů pro každou buňku.
for row in table.getRows():
for cell in row:
cell.getCellFormat().getBorderTop().getFillFormat().setFillType(FillType.NoFill)
cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(FillType.NoFill)
cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(FillType.NoFill)
cell.getCellFormat().getBorderRight().getFillFormat().setFillType(FillType.NoFill)
# Uložte prezentaci jako soubor PPTX.
presentation.save("table_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Číslování ve sloučených buňkách
Pokud sloučíme dva páry buněk, (1, 1) a (2, 1) a (1, 2) a (2, 2), výsledná tabulka zachová číslování buněk. Tento kód v Pythonu demonstruje proces:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, FillType, SaveFormat
from java.awt import Color
presentation = Presentation()
try:
# Přístup k prvnímu snímku.
slide = presentation.getSlides().get_Item(0)
# Definujte šířky sloupců a výšky řádků.
column_widths = [70, 70, 70, 70]
row_heights = [70, 70, 70, 70]
# Přidejte tabulku na snímek.
table = slide.getShapes().addTable(100, 50, column_widths, row_heights)
# Nastavte formát okrajů pro každou buňku.
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)
# Sloučit buňky (1, 1) a (2, 1).
table.mergeCells(table.get_Item(1, 1), table.get_Item(2, 1), False)
# Sloučit buňky (1, 2) a (2, 2).
table.mergeCells(table.get_Item(1, 2), table.get_Item(2, 2), False)
# Uložte prezentaci jako soubor PPTX.
presentation.save("MergeCells_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Poté dále sloučíme buňky tím, že spojíme (1, 1) a (1, 2). Výsledkem je tabulka s velkou sloučenou buňkou uprostřed:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, FillType, SaveFormat
from java.awt import Color
presentation = Presentation()
try:
# Přístup k prvnímu snímku.
slide = presentation.getSlides().get_Item(0)
# Definujte šířky sloupců a výšky řádků.
column_widths = [70, 70, 70, 70]
row_heights = [70, 70, 70, 70]
# Přidejte tabulku na snímek.
table = slide.getShapes().addTable(100, 50, column_widths, row_heights)
# Nastavte formát okrajů pro každou buňku.
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)
# Sloučit buňky (1, 1) a (2, 1).
table.mergeCells(table.get_Item(1, 1), table.get_Item(2, 1), False)
# Sloučit buňky (1, 2) a (2, 2).
table.mergeCells(table.get_Item(1, 2), table.get_Item(2, 2), False)
# Sloučit buňky (1, 1) a (1, 2).
table.mergeCells(table.get_Item(1, 1), table.get_Item(1, 2), True)
# Uložte prezentaci jako soubor PPTX.
presentation.save("MergeCells_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Číslování v rozdělené buňce
V předchozích příkladech sloučení buněk tabulky nezměnilo číslování ostatních buněk.
Tentokrát vezmeme běžnou tabulku (tabulku bez sloučených buněk) a pokusíme se rozdělit buňku (1, 1), abychom získali zvláštní tabulku. Možná si všimnete, že číslování této tabulky může působit podivně. Nicméně tak Microsoft PowerPoint čísluje buňky tabulky a Aspose.Slides dělá totéž.
Tento kód v Pythonu demonstruje popsaný proces:
import jpype
import asposeslides
if not jpame.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, FillType, SaveFormat
from java.awt import Color
presentation = Presentation()
try:
# Přístup k prvnímu snímku.
slide = presentation.getSlides().get_Item(0)
# Definujte šířky sloupců a výšky řádků.
column_widths = [70, 70, 70, 70]
row_heights = [70, 70, 70, 70]
# Přidejte tabulku na snímek.
table = slide.getShapes().addTable(100, 50, column_widths, row_heights)
# Nastavte formát okrajů pro každou buňku.
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)
# Rozdělit buňku (1, 1).
table.get_Item(1, 1).splitByWidth(table.get_Item(2, 1).getWidth() / 2)
# Uložte prezentaci jako soubor PPTX.
presentation.save("SplitCells_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Změna barvy pozadí buňky tabulky
Tento kód v Pythonu ukazuje, jak změnit barvu pozadí buňky tabulky:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, FillType, SaveFormat
from java.awt import Color
presentation = Presentation()
try:
# Přístup k prvnímu snímku.
slide = presentation.getSlides().get_Item(0)
# Definujte šířky sloupců a výšky řádků.
column_widths = [150, 150, 150, 150]
row_heights = [50, 50, 50, 50, 50]
# Přidejte tabulku na snímek.
table = slide.getShapes().addTable(50, 50, column_widths, row_heights)
# Nastavte barvu pozadí buňky.
cell = table.get_Item(2, 3)
cell.getCellFormat().getFillFormat().setFillType(FillType.Solid)
cell.getCellFormat().getFillFormat().getSolidFillColor().setColor(Color.RED)
# Uložte prezentaci jako soubor PPTX.
presentation.save("cell_background_color.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Přidání obrázku do buňky tabulky
- Vytvořte instanci třídy Presentation .
- Získejte odkaz na snímek podle jeho indexu.
- Definujte seznam šířek sloupců.
- Definujte seznam výšek řádků.
- Přidejte tabulku na snímek pomocí metody addTable .
- Načtěte soubor obrázku pomocí Images.fromFile .
- Přidejte obrázek do prezentace a vytvořte objekt PPImage .
- Nastavte typu výplně buňky tabulky FillFormat na FillType.Picture .
- Přidejte obrázek do první buňky tabulky.
- Uložte upravenou prezentaci jako soubor PPTX.
Tento kód v Pythonu ukazuje, jak umístit obrázek do buňky tabulky při jejím vytváření:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, Images, FillType, PictureFillMode, SaveFormat
presentation = Presentation()
try:
# Přístup k prvnímu snímku.
slide = presentation.getSlides().get_Item(0)
# Definujte šířky sloupců a výšky řádků.
column_widths = [150, 150, 150, 150]
row_heights = [100, 100, 100, 100, 90]
# Přidejte tabulku na snímek.
table = slide.getShapes().addTable(50, 50, column_widths, row_heights)
# Vytvořte obrázek prezentace ze souboru obrázku.
image = Images.fromFile("image.jpg")
try:
picture = presentation.getImages().addImage(image)
finally:
image.dispose()
# Přidejte obrázek do první buňky tabulky.
cell_format = table.get_Item(0, 0).getCellFormat()
cell_format.getFillFormat().setFillType(FillType.Picture)
cell_format.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch)
cell_format.getFillFormat().getPictureFillFormat().getPicture().setImage(picture)
# Uložte prezentaci jako soubor PPTX.
presentation.save("Image_In_TableCell_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Často kladené otázky
Mohu nastavit různé tloušťky čar a styly pro různé strany jedné buňky?
Ano. Okraje horní/spodní/levý/pravý mají samostatné vlastnosti, takže tloušťka a styl každé strany se mohou lišit. To logicky vyplývá z řízení okrajů podle stran buňky, jak je ukázáno v článku.
Co se stane s obrázkem, pokud po nastavení obrázku jako pozadí buňky změníme velikost sloupce/řádku?
Chování závisí na režimu výplně (roztažení/duplikace). Při roztažení se obrázek přizpůsobí nové buňce; při duplikaci se dlaždice přepočítají. Článek zmiňuje režimy zobrazení obrázku v buňce.
Mohu přiřadit hypertextový odkaz ke veškerému obsahu buňky?
Hyperlinky jsou nastaveny na úrovni textu (části) uvnitř textového rámce buňky nebo na úrovni celé tabulky/tvaru. V praxi přiřadíte odkaz buď k části, nebo ke všem textům v buňce.
Mohu nastavit různé fonty v jedné buňce?
Ano. Textový rámec buňky podporuje části (běhy) s nezávislým formátováním – rodinu písma, styl, velikost i barvu.