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

  1. Vytvořte instanci třídy Presentation .
  2. Získejte tabulku z prvního snímku.
  3. Iterujte řádky a sloupce tabulky a vyhledejte sloučené buňky.
  4. 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

  1. Vytvořte instanci třídy Presentation .
  2. Získejte odkaz na snímek podle jeho indexu.
  3. Definujte seznam šířek sloupců.
  4. Definujte seznam výšek řádků.
  5. Přidejte tabulku na snímek pomocí metody addTable .
  6. Iterujte přes každou buňku a odstraňte horní, spodní, pravý a levý okraj.
  7. 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

  1. Vytvořte instanci třídy Presentation .
  2. Získejte odkaz na snímek podle jeho indexu.
  3. Definujte seznam šířek sloupců.
  4. Definujte seznam výšek řádků.
  5. Přidejte tabulku na snímek pomocí metody addTable .
  6. Načtěte soubor obrázku pomocí Images.fromFile .
  7. Přidejte obrázek do prezentace a vytvořte objekt PPImage .
  8. Nastavte typu výplně buňky tabulky FillFormat na FillType.Picture .
  9. Přidejte obrázek do první buňky tabulky.
  10. 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.