Ich habe ein Skript mit python xlrd und pptx geschrieben, um jede Arbeitsmappe in einem Verzeichnis zu lesen und Informationen aus jedem Blatt in eine Tabelle in einer PowerPoint-Folie zu ziehen. Es funktioniert in Ordnung, wenn die Excel-Tabelle klein ist, aber ich weiß nicht, was in diesen Excel-Dateien sein wird. Es wird unlesbar, wenn zu viele Zeilen und Spalten vorhanden sind. Mein Hauptproblem entstand, wenn eine Excel-Datei Graphen anstelle von Zellen hatte und das Skript sie nicht lesen konnte. Also habe ich versucht mit pyscreenshot das Dokument zu öffnen und einen Screenshot zu machen, aber das scheint langsam und unnötig. Ich möchte eine Folie in PowerPoint so aussehen lassen, wie sie in Excel aussehen würde, aber mit der Fähigkeit, Dinge hinzuzufügen und zu ändern.Wie kann ich Informationen aus Excel mit Python in PowerPoint ziehen und das Format beibehalten?
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)
Und das ist mein Screenshot Skript:
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()