我怎样才能从Excel中使用Python将信息提取到PowerPoint中并保持格式?

我已经用python的xlrd和pptx编写了一个脚本来读取目录中的每个工作簿,并将每个工作表中的信息导入PowerPoint幻灯片中的表格中。 它工作正常,如果Excel表很小,但我不知道这些Excel文件中将会是什么。 如果行数和列数太多,就变得难以辨认。 我的主要问题出现时,Excel文件有graphics,而不是单元格和脚本无法读取它。 所以我尝试使用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() 

那么,你select了一个难题。 当然,我总是尝试过这样的事情,结果放弃了这个努力。

我形成的基本解释是,Excel(和Word)是“stream动的”文档环境。 也就是说,当你在一个页面上用完了房间,它就会stream到下一个房间。 另一方面,PowerPoint是一个逐页的展览布局环境。 每张幻灯片与其他幻灯片是独立的(通过自由重新排列幻灯片的能力certificate),每张幻灯片都是一次显示的,而不是滚动的。 这导致每张幻灯片都是独立的,这意味着被限制为一个“页面”。

人们可以在幻灯片上放置多less信息并且仍然能够沟通是有限制的。 一般来说less就是好。 所以,也许这并不奇怪我所有的早期努力都以失败而告终:)我也得出结论:一个有效的“仪表板”幻灯片需要非常巧妙的布局,并且对内容长度有极端的限制,可能需要特定的(人力)总结努力只是从一个“数据库”复制)。

关于图表位,理论上可以移动到PowerPoint,我甚至看到它完成,但技术上相当具有挑战性。 python-pptx中没有API支持。 这个GitHub仓库的历史问题可能会让我们有一些想法。 不是为了我期望的微弱的心脏:)