我用python的xlrd和pptx编写了一个脚本来读取目录中的每个工作簿,并将每个工作表中的信息提取到PowerPoint幻灯片中的表格中.如果excel表很小但是我不知道这些excel文件中会包含什么,它可以正常工作.当行和列太多时,它变得难以辨认.当excel文件有图形而不是单元格而脚本无法读取时,我的主要问题出现了.所以我尝试使用pyscreenshot来打开文档并截取屏幕截图,但这似乎很慢而且没必要.我想在PowerPoint中制作一张幻灯片,就像在Excel中一样,但是能够添加和更改内容.
import libraries and modules
import xlrd
from pptx import Presentation
from pptx.util import Inches, Pt
import time
import glob
import os
start = time.time()
prs = Presentation()
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
shapes = slide.shapes
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "Dashboard Generator"
subtitle.text = "made with Python-pptx and xlrd"
for filename in glob.glob(os.path.join("C:/Users/penelope/Desktop/PMO/myfiles/", '*.xlsx')):
print(filename)
file_location = filename
try:
workbook = xlrd.open_workbook(file_location)
nsheets = workbook.nsheets
for n in range(0, nsheets):
sheet = workbook.sheet_by_index(n)
print("sheet:", sheet)
rows = sheet.nrows
cols = sheet.ncols
c = cols
r = rows
if c > 0:
print(c, r)
slide = prs.slides.add_slide(prs.slide_layouts[5])
shapes = slide.shapes
title = slide.shapes.title
title.text = "Table testing"
left = Inches(0.0)
top = Inches(2.0)
width = Inches(6.0)
height = Inches(4.0)
num = 10.0/c
table = shapes.add_table(rows, cols, left, top, width, height).table
for i in range(0, c):
table.columns[i].width = Inches(num)
for i in range(0,r):
for e in range(0,c):
table.cell(i,e).text = str(sheet.cell_value(i,e))
cell = table.rows[i].cells[e]
paragraph = cell.text_frame.paragraphs[0]
paragraph.font.size = Pt(11)
except:
print("Error!")
pass
prs.save('powerpointfile1.pptx')
end = time.time()
print(end - start)
这是我的截图脚本:
import os
import time
import pyscreenshot as ImageGrab
from PIL import Image
if __name__ == "__main__":
os.system('start excel.exe "C:/Users/penelope/Desktop/PMO/TestCase.xlsx"')
time.sleep(3)
im=ImageGrab.grab(bbox=(24,210,1800,990))
im.save("image7.png")
img = Image.open('image7.png')
img.show()
解决方法:
好吧,你选择了一个难题.当然,我一直尝试过这种事情,但我最终放弃了努力.
我形成的基本解释是Excel(和Word)是“流动”的文档环境.也就是说,当你在一个页面上用完房间时,它会流向下一个页面.另一方面,PowerPoint是一个逐页的展览布局环境.每张幻灯片都独立于其他幻灯片(可以自由重新排序幻灯片的证明),每个幻灯片都要一次显示,而不是滚动.这导致每个幻灯片是独立的,这意味着约束到单个“页面”.
可以在幻灯片上放置多少信息并且仍然可以进行通信是有限制的.通常越少越好.所以,也许并非所有我早期努力的结果都令人沮丧:)我还得出结论,一个有效的“仪表板”幻灯片需要非常熟练的布局,并且对内容长度有极大的限制,可能需要特定的(人工)总结工作(不是只是从“数据库”复制).
关于图表位,那些理论上可以转移到PowerPoint,我甚至已经看过它,但它在技术上相当具有挑战性. python-pptx中没有API支持. This historical issue on the GitHub repo可能会对所涉及的内容有所了解.不是我想要的胆小的心脏:)