Python pptx - 编辑 excel 电子表格 table(不需要链接 table 或外部工作簿)
Python pptx - Editing excel spreadsheet table (no linked table or outside workbook required)
在 PowerPoint 中,我插入了一个 Excel 电子表格 table,但是 "table" 似乎只是一个没有形状的图形框架当我检查 table 或图表时输入 returns false:
from pptx import Presentation
prs = Presentation('../Template.pptx')
slide = prs.slides[7]
table = slide.shapes[6]
print(table)
>>><pptx.shapes.graphfrm.GraphicFrame object at 0x063BDEB0>
print(table.shape_type)
>>>None
print(table.has_table)
>>>False
print(table.has_chart)
>>>False
知道如何实际编辑 table 变量中的数据吗?
要重现此问题,请创建一张幻灯片并通过功能区 插入 table 添加一个 table 插入 > Table > Excel 电子表格。然后你可以修改我上面的脚本来调用正确的 presentation/slide/shape.
我会补充一点,当我通过 Insert > Table > Insert Table... 创建 table 或使用 table = slide.shapes.add_table(3,3,x,y,cx,cy)
时,table.has_table
是真的。但是,如果 table 是以这种方式创建的,我将无法使用关键的 Excel 功能,例如数据类型和条件格式。您可以在下图中看到,使用货币和条件格式设置的 table 比没有设置格式的更易读。
嵌入式 Excel "table" 与 PowerPoint table 形状不同。
简短的回答是 API 不支持编辑 python-pptx
中嵌入的 Excel 范围。
PowerPoint 中有五种形状类型:自选形状(正方形、圆形等)、连接符(线条)、图片、组合形状和图形框架。图形框架是非原生 PowerPoint 形状类型的 "container",例如图表、table、smart-art 和嵌入式 Office 对象(在本例中为 Excel 范围)。
因此,报告的形状类型是 GraphicFrame
的事实仅到目前为止缩小了它的范围,在这种情况下还不足以区分 table 和嵌入的 Excel 范围.
GraphicFrame.has_table
属性 忠实地报告图形框架不包含 DrawingML table,尽管它 确实 contain 当然有一个表格的外观。
如果您想使用嵌入的 Excel 范围,您将自己使用 lxml
调用从 GraphicFrame
向下操作 XML。我希望图形框架 XML 包含对嵌入式 Excel "file" 的引用,可能可以用 openpyxl
打开以对其进行更改。尽管如此,还是相当高级的编码,主要是因为必须对嵌入式 MS Office 对象 XML 语义进行逆向工程并导航包结构以获取嵌入式 Excel "file" 的字节而变得复杂.
python-pptx
中的图表代码做类似的事情,因为每个图表在提供图表数据的 pptx
文件中都有一个嵌入的 Excel 文件,因此可能在某个地方如果你要接受挑战,寻找灵感。
在 PowerPoint 中,我插入了一个 Excel 电子表格 table,但是 "table" 似乎只是一个没有形状的图形框架当我检查 table 或图表时输入 returns false:
from pptx import Presentation
prs = Presentation('../Template.pptx')
slide = prs.slides[7]
table = slide.shapes[6]
print(table)
>>><pptx.shapes.graphfrm.GraphicFrame object at 0x063BDEB0>
print(table.shape_type)
>>>None
print(table.has_table)
>>>False
print(table.has_chart)
>>>False
知道如何实际编辑 table 变量中的数据吗?
要重现此问题,请创建一张幻灯片并通过功能区 插入 table 添加一个 table 插入 > Table > Excel 电子表格。然后你可以修改我上面的脚本来调用正确的 presentation/slide/shape.
我会补充一点,当我通过 Insert > Table > Insert Table... 创建 table 或使用 table = slide.shapes.add_table(3,3,x,y,cx,cy)
时,table.has_table
是真的。但是,如果 table 是以这种方式创建的,我将无法使用关键的 Excel 功能,例如数据类型和条件格式。您可以在下图中看到,使用货币和条件格式设置的 table 比没有设置格式的更易读。
嵌入式 Excel "table" 与 PowerPoint table 形状不同。
简短的回答是 API 不支持编辑 python-pptx
中嵌入的 Excel 范围。
PowerPoint 中有五种形状类型:自选形状(正方形、圆形等)、连接符(线条)、图片、组合形状和图形框架。图形框架是非原生 PowerPoint 形状类型的 "container",例如图表、table、smart-art 和嵌入式 Office 对象(在本例中为 Excel 范围)。
因此,报告的形状类型是 GraphicFrame
的事实仅到目前为止缩小了它的范围,在这种情况下还不足以区分 table 和嵌入的 Excel 范围.
GraphicFrame.has_table
属性 忠实地报告图形框架不包含 DrawingML table,尽管它 确实 contain 当然有一个表格的外观。
如果您想使用嵌入的 Excel 范围,您将自己使用 lxml
调用从 GraphicFrame
向下操作 XML。我希望图形框架 XML 包含对嵌入式 Excel "file" 的引用,可能可以用 openpyxl
打开以对其进行更改。尽管如此,还是相当高级的编码,主要是因为必须对嵌入式 MS Office 对象 XML 语义进行逆向工程并导航包结构以获取嵌入式 Excel "file" 的字节而变得复杂.
python-pptx
中的图表代码做类似的事情,因为每个图表在提供图表数据的 pptx
文件中都有一个嵌入的 Excel 文件,因此可能在某个地方如果你要接受挑战,寻找灵感。