PowerPoint táblázatok kezelése Pythonban
Bevezetés
A PowerPoint táblázat hatékony módja az információ megjelenítésének. Az információ egy cellákból álló rácsban (sorokba és oszlopokba rendezve) egyszerű és könnyen érthető.
Az Aspose.Slides biztosítja a Table osztályt, a Cell osztályt és egyéb típusokat, amelyek lehetővé teszik táblázatok létrehozását, frissítését és kezelését különféle bemutatókban.
Táblázat létrehozása nulláról
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezzen hivatkozást egy dia indexe alapján.
- Határozzon meg egy oszlopszélességek listáját.
- Határozzon meg egy sormagasságok listáját.
- Adjon hozzá egy Table objektumot a diára az addTable metódussal.
- Iteráljon végig minden Cell objektumon, hogy formázást alkalmazzon a felső, alsó, jobb és bal szegélyekre.
- Olvassza össze a táblázat első sorának első két celláját.
- Szerezzen hozzáférést egy Cell’s TextFrame-hez.
- Adjon szöveget a TextFrame-hez.
- Mentse el a módosított bemutatót.
Ez a Python kód bemutatja, hogyan hozhat létre egy táblázatot egy bemutatóban:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat
from java.awt import Color
# Példányosít egy Presentation osztályt, amely egy PPTX fájlt képvisel
presentation = Presentation()
try:
# Eléri az első diát
slide = presentation.getSlides().get_Item(0)
# Meghatározza az oszlopok szélességét és a sorok magasságát
column_widths = [50, 50, 50]
row_heights = [50, 30, 30, 30, 30]
# Táblázat alakzatot ad hozzá a diához
table = slide.getShapes().addTable(100, 50, column_widths, row_heights)
# Beállítja minden cella keretformátumát
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)
# Összevonja az 1. sor 1. és 2. celláját
table.mergeCells(table.getRows().get_Item(0).get_Item(0), table.getRows().get_Item(0).get_Item(1), False)
# Szöveget ad a összevont cellához
table.getRows().get_Item(0).get_Item(0).getTextFrame().setText("Merged Cells")
# Elmenti a bemutatót a lemezre
presentation.save("table.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Számozás egy szabványos táblázatban
Egy szabványos táblázatban a cellák számozása egyszerű és nullától indul. Az első cella indexe 0,0 (oszlop 0, sor 0).
Például egy 4 oszlopos és 4 soros táblázat cellái így vannak számozva:
| (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) |
Ez a Python kód bemutatja, hogyan hozhat létre egy táblázatot a szabványos cellaszámozással:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat
from java.awt import Color
# Létrehozza a Presentation osztályt, amely egy PPTX fájlt képvisel
presentation = Presentation()
try:
# Eléri az első diát
slide = presentation.getSlides().get_Item(0)
# Meghatározza az oszlopok szélességét és a sorok magasságát
column_widths = [70, 70, 70, 70]
row_heights = [70, 70, 70, 70]
# Táblázat alakzatot ad hozzá a diához
table = slide.getShapes().addTable(100, 50, column_widths, row_heights)
# Beállítja minden cella keretformátumát
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)
# Elmenti a bemutatót a lemezre
presentation.save("StandardTables_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Meglévő táblázat elérése
-
Hozzon létre egy példányt a Presentation osztályból.
-
Szerezzen hivatkozást a táblázatot tartalmazó diára az indexe alapján.
-
Inicializáljon egy változót egy Table objektumhoz, és állítsa
None‑ra. -
Iteráljon végig az összes Shape objektumon, amíg meg nem találja a táblázatot.
Ha úgy gondolja, hogy a feldolgozott dia egyetlen táblázatot tartalmaz, egyszerűen ellenőrizheti az összes benne lévő alakzatot. Ha egy alakzatot táblázatként azonosít, azt Table objektumként használhatja. Ha azonban a dia több táblázatot tartalmaz, akkor célszerűbb a szükséges táblázatot a getAlternativeText metódusával keresni.
-
Használja a Table objektumot a táblázat kezeléséhez. Az alábbi példában a második sor első oszlopának szövegét frissítjük.
-
Mentse el a módosított bemutatót.
Ez a Python kód bemutatja, hogyan érheti el és dolgozhat egy meglévő táblázattal:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import Presentation, SaveFormat, Table
# Példányosítja a Presentation osztályt, amely egy PPTX fájlt képvisel
presentation = Presentation("UpdateExistingTable.pptx")
try:
# Eléri az első diát
slide = presentation.getSlides().get_Item(0)
# Inicializálja a táblázat hivatkozást.
table = None
# Iterál a shape-eken és beállítja a megtalált táblázatra mutató hivatkozást
for shape in slide.getShapes():
if isinstance(shape, Table):
table = shape
# Beállítja a szöveget a második sor első oszlopához
table.get_Item(0, 1).getTextFrame().setText("New")
# Elmenti a módosított bemutatót a lemezre
presentation.save("table1_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Keresse meg a szövegkeretet tartalmazó cellát
Amikor általános szövegfeldolgozó kód egy TextFrame‑et kap egy táblázatból, használja a TextFrame.getParentCell metódust a tulajdonos Cell lekéréséhez. Egy táblázat‑cellához tartozó szövegkeret esetén a TextFrame.getParentCell visszaadja a tulajdonost, a TextFrame.getParentShape pedig None‑t ad, még akkor is, ha a táblázat maga egy shape.
A cellakoordináták elérhetők a csak‑olvasású Cell.getFirstColumnIndex és Cell.getFirstRowIndex metódusokon keresztül. A TextFrame.getParentCell szintén csak‑olvasású navigációt biztosít: visszaadja a tulajdonost, de nem változtatja meg a tulajdonjogot. Mindig ellenőrizze, hogy a visszakapott cella nem None‑e, mielőtt felhasználná.
A teljes példáért, amely azonosítja a táblázat‑cellák és shape‑ok tulajdonosait, beleértve a SmartArt csomópontokhoz kapcsolódó shape‑okat, lásd a Search and Replace Text oldalt.
Szöveg igazítása a táblázatban
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezzen hivatkozást egy dia indexe alapján.
- Adjon hozzá egy Table objektumot a diára.
- Szerezzen hozzáférést a táblázat TextFrame objektumához.
- Szerezze meg a TextFrame objektum Paragraph részét.
- Igazítsa a szöveget függőlegesen.
- Mentse el a módosított bemutatót.
Ez a Python kód bemutatja, hogyan igazíthatja a szöveget egy táblázatban:
import jpype
import asposeslides
if not jpype.isJVMStarted():
jpype.startJVM()
from asposeslides.api import FillType, Presentation, SaveFormat, TextAnchorType, TextVerticalType
from java.awt import Color
# Létrehozza a Presentation osztály egy példányát
presentation = Presentation()
try:
# Lekéri az első diát
slide = presentation.getSlides().get_Item(0)
# Meghatározza az oszlopok szélességét és a sorok magasságát
column_widths = [120, 120, 120, 120]
row_heights = [100, 100, 100, 100]
# Hozzáadja a táblázat alakzatot a diához
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")
# Eléri a szövegkeretet
text_frame = table.get_Item(0, 0).getTextFrame()
# Eléri a szövegkeret első bekezdését.
paragraph = text_frame.getParagraphs().get_Item(0)
# Eléri a bekezdés első részletét.
portion = paragraph.getPortions().get_Item(0)
portion.setText("Text here")
portion.getPortionFormat().getFillFormat().setFillType(FillType.Solid)
portion.getPortionFormat().getFillFormat().getSolidFillColor().setColor(Color.BLACK)
# Függőlegesen igazítja a szöveget
cell = table.get_Item(0, 0)
cell.setTextAnchorType(TextAnchorType.Center)
cell.setTextVerticalType(TextVerticalType.Vertical270)
# Elmenti a bemutatót a lemezre
presentation.save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx)
finally:
presentation.dispose()
Szöveg formázásának beállítása táblázatszinten
- Hozzon létre egy példányt a Presentation osztályból.
- Szerezzen hivatkozást egy dia indexe alapján.
- Szerezzen hozzáférést a dián lévő Table objektumhoz.
- Állítsa be a szöveg betűmagasságát a setFontHeight metódussal.
- Állítsa be az igazítást és a jobb margót a setAlignment és a setMarginRight metódusokkal.
- Állítsa be a függőleges szöveg típust a setTextVerticalType metódussal.
- Mentse el a módosított bemutatót.
Ez a Python kód bemutatja, hogyan alkalmazhatja a kívánt formázási beállításokat a táblázat szövegére:
import jpype
import asposeslides
if not jpide.isJVMStarted():
jpide.startJVM()
from asposeslides.api import ParagraphFormat, PortionFormat, Presentation, SaveFormat, TextAlignment, TextFrameFormat, TextVerticalType, Table
# Létrehozza a Presentation osztály egy példányát
presentation = Presentation("simpletable.pptx")
try:
# Tegyük fel, hogy az első dián az első shape egy táblázat
shape = presentation.getSlides().get_Item(0).getShapes().get_Item(0)
if isinstance(shape, Table):
table = shape
# Beállítja a táblázat celláinak betűmagasságát
portion_format = PortionFormat()
portion_format.setFontHeight(25)
table.setTextFormat(portion_format)
# Beállítja a táblázat celláinak szövegigazítását és jobb margóját egy hívásban
paragraph_format = ParagraphFormat()
paragraph_format.setAlignment(TextAlignment.Right)
paragraph_format.setMarginRight(20)
table.setTextFormat(paragraph_format)
# Beállítja a táblázat celláinak függőleges szöveg típusát
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()
Táblázat stílus tulajdonságainak lekérése
Az Aspose.Slides lehetővé teszi egy táblázat stílus tulajdonságainak lekérését, hogy ezeket a részleteket más táblázathoz vagy más helyen felhasználhassa. Ez a Python kód bemutatja, hogyan lehet lekérni a stílus tulajdonságokat egy táblázat előre beállított stílusából:
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) # változtatja az alapértelmezett stílus előbeállítás témáját
# Lekéri a táblázat stílus előbeállítását
style_preset = table.getStylePreset()
print("Table style preset: ", style_preset)
# Alkalmazza a lekért stílus előbeállítást egy másik táblázatra
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()
Táblázat méretarányának rögzítése
A geometriai alakzat méretarányát a különböző dimenziók méreteinek aránya határozza meg. Az Aspose.Slides biztosítja a setAspectRatioLocked metódust, amely lehetővé teszi a méretarány beállításának rögzítését táblázatok és egyéb alakzatok esetén.
Ez a Python kód bemutatja, hogyan rögzítheti a méretarányt egy táblázat esetén:
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()) # invertálja
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()
GYIK
Engedélyezhetek jobbról balra (RTL) olvasási irányt egy teljes táblázat és celláinak szövege számára?
Igen. A táblázat rendelkezik egy setRightToLeft metódussal, a bekezdések pedig a ParagraphFormat.setRightToLeft metódussal. Mindkettő használata biztosítja a helyes RTL sorrendet és megjelenítést a cellákon belül.
Hogyan akadályozhatom meg, hogy a felhasználók a végleges fájlban mozgatni vagy átméretezni tudják a táblázatot?
Használjon shape locks beállításokat a mozgatás, átméretezés, kijelölés stb. letiltásához. Ezek a zárolások a táblázatokra is érvényesek.
Támogatott-e egy kép beillesztése egy cellába háttérként?
Igen. Beállíthat egy picture fill kitöltést egy cellához; a kép a választott mód szerint (nyújtás vagy mozaik) lefedi a cella területét.