Kaip dirbti su lentelėmis Python

Kaip dirbti su lentelėmis Python

Aspose.Slides FOSS for Python supports creating tables on slides with configurable column widths and row heights. This guide shows how to add a table, populate it with data, and apply basic text formatting to cells.

Žingsnis po žingsnio vadovas

Žingsnis 1: Įdiekite paketą

pip install aspose-slides-foss

Žingsnis 2: Sukurkite arba atidarykite pristatymą

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    slide = prs.slides[0]
    # ... add table ...
    prs.save("table.pptx", SaveFormat.PPTX)

Žingsnis 3: Nustatykite stulpelių pločius ir eilučių aukščius

Lentelės reikalauja aiškių stulpelių pločių ir eilučių aukščių taškais (1 taškas = 1/72 colio). Standartinė skaidrė yra 720 taškų pločio ir 540 taškų aukščio.

col_widths = [200.0, 150.0, 150.0]   # 3 columns: 200pt + 150pt + 150pt
row_heights = [45.0, 40.0, 40.0]     # 3 rows: 45pt header + 40pt data rows

Žingsnis 4: Pridėkite lentelę

slide.shapes.add_table(x, y, col_widths, row_heights) sukuria lentelę pozicijoje (x, y):

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    slide = prs.slides[0]

    col_widths = [200.0, 150.0, 150.0]
    row_heights = [45.0, 40.0, 40.0]
    table = slide.shapes.add_table(50, 100, col_widths, row_heights)

    prs.save("table.pptx", SaveFormat.PPTX)

Žingsnis 5: Nustatykite langelio tekstą

Pasiekite langelius per table.rows[row_index][col_index] ir priskirkite tekstą per .text_frame.text:

import aspose.slides_foss as slides
from aspose.slides_foss.export import SaveFormat

with slides.Presentation() as prs:
    slide = prs.slides[0]

    col_widths = [200.0, 150.0, 150.0]
    row_heights = [45.0, 40.0, 40.0]
    table = slide.shapes.add_table(50, 100, col_widths, row_heights)

    # Header row (row 0)
    headers = ["Product", "Units Sold", "Revenue"]
    for col, header in enumerate(headers):
        table.rows[0][col].text_frame.text = header

    # Data rows
    data = [
        ["Widget A", "1,200", "$24,000"],
        ["Widget B", "850", "$17,000"],
    ]
    for row_idx, row_data in enumerate(data):
        for col, cell_text in enumerate(row_data):
            table.rows[row_idx + 1][col].text_frame.text = cell_text

    prs.save("sales-table.pptx", SaveFormat.PPTX)

Žingsnis 6: Formatuokite antraštės langelio tekstą

Taikykite paryškintą formatavimą antraštės langeliams naudodami PortionFormat:

from aspose.slides_foss import NullableBool, FillType
from aspose.slides_foss.drawing import Color

for col in range(len(headers)):
    cell = table.rows[0][col]
    portions = cell.text_frame.paragraphs[0].portions
    if portions:
        fmt = portions[0].portion_format
        fmt.font_bold = NullableBool.TRUE
        fmt.fill_format.fill_type = FillType.SOLID
        fmt.fill_format.solid_fill_color.color = Color.from_argb(255, 255, 255, 255)

Pilnas veikiantis pavyzdys

import aspose.slides_foss as slides
from aspose.slides_foss import NullableBool, FillType
from aspose.slides_foss.drawing import Color
from aspose.slides_foss.export import SaveFormat

data_rows = [
    ["North", "$1.2M", "+8%"],
    ["South", "$0.9M", "+4%"],
    ["East",  "$1.5M", "+12%"],
    ["West",  "$0.7M", "+2%"],
]
headers = ["Region", "Revenue", "Growth"]

with slides.Presentation() as prs:
    slide = prs.slides[0]

    col_widths = [180.0, 140.0, 120.0]
    row_heights = [45.0] + [38.0] * len(data_rows)

    table = slide.shapes.add_table(60, 80, col_widths, row_heights)

    # Header row
    for col, text in enumerate(headers):
        cell = table.rows[0][col]
        cell.text_frame.text = text
        if cell.text_frame.paragraphs and cell.text_frame.paragraphs[0].portions:
            fmt = cell.text_frame.paragraphs[0].portions[0].portion_format
            fmt.font_bold = NullableBool.TRUE

    # Data rows
    for row_idx, row_data in enumerate(data_rows):
        for col, text in enumerate(row_data):
            table.rows[row_idx + 1][col].text_frame.text = text

    prs.save("regional-revenue.pptx", SaveFormat.PPTX)

print("Saved regional-revenue.pptx")

Dažnos problemos ir sprendimai

IndexError kai pasiekiama table.rows[row][col]

Eilučių ir stulpelių indeksai yra nulio pagrindu. Jei apibrėžėte row_heights su 3 elementais, galimi eilučių indeksai yra 0, 1, 2.

Langelio tekstas neatsiranda išsaugotame faile

Visada priskirkite per .text_frame.text, ne per .text tiesiogiai ant ląstelės objekto:

# Correct
table.rows[0][0].text_frame.text = "Header"

# Wrong: AttributeError or silent failure
table.rows[0][0].text = "Header"

Lentelės padėtis yra už skaidrės ribų

Patikrinkite, ar x + sum(col_widths) <= 720 ir y + sum(row_heights) <= 540 standartinei skaidrei.


Dažnai užduodami klausimai

Ar galiu sujungti lentelės langelius?

Langelio sujungimas šioje versijoje nepalaikomas.

Ar galiu taikyti visos lentelės fono spalvą?

Taikykite užpildymo formatavimą kiekvienam atskiram langeliui:

for row_idx in range(len(table.rows)):
    for col_idx in range(len(table.rows[row_idx])):
        cell = table.rows[row_idx][col_idx]
        cell.fill_format.fill_type = FillType.SOLID
        cell.fill_format.solid_fill_color.color = Color.from_argb(255, 240, 248, 255)

Ar galiu nustatyti langelio kraštų stilius?

Ląstelės krašto savybės yra prieinamos per table.rows[row][col].border_* savybes. Kreipkitės į API nuorodą, kad gautumėte visą krašto formato atributų sąrašą.


Žr. taip pat

 Lietuvių