本次实例使用xlwings库和pptx库,实现将excel内的图片,数据,组合图等生成图片并加入到ppt中
具体项目代码不便写出,主要记录一些方法
代码分为两部分,第一部分先从excel里提取需要的数据,图表以及组合图表生成图片保存在本地
import xlwings as xw
from PIL import ImageGrab,ImageTk
from PIL import Image
import time
def delay():
time.sleep(2) # 定义该函数,设置主动延迟,用于防止剪贴板失效
app1 = xw.App(visible=True, add_book=False) # 打开excel程序
wb1 = app1.books.open('test.xlsx') # 打开需要的工作簿
sht1 = wb1.sheets['分部利润表'] # 定位工作表
shape1 = sht1.shapes['Group 4'] # 该处为组合图,具体名称用vba录制宏可看
chart1 = sht1.charts['图表 16'] # 该处为图表,具体名称用vba录制宏可看
range1 = sht1['A1:D9'] # 该处为A1:D9部分的数据
'''以上三种分别指如何用代码表示excel里的某一项数据或图表,用于后面生成相应部分的截图'''
shape1.api.Copy() # 复制组合图到剪贴板,注意Copy必须大写
image = ImageGrab.grabclipboard() # 获取剪贴板文件
image.save('shape1.png') # 将剪贴板的图片文件保存
delay() # 主动延迟
chart1.api[1].ChartArea.Copy() # 复制图表到剪贴板,注意chart即图表的copy方式与组合图和数据都不太一样,并且此处大小写都不可混用,否则程序会卡死
image = ImageGrab.grabclipboard() # 获取剪贴板文件
image.save('chart1.png') # 将剪贴板的图片文件保存
delay() # 主动延迟
range1.api.Copy() # 复制组合图到剪贴板,注意Copy必须大写
image = ImageGrab.grabclipboard() # 获取剪贴板文件
image.save('range1.png') # 将剪贴板的图片文件保存
delay() # 主动延迟
wb1.save()
wb1.close()
app1.quit()
第二部分,将已经保存好的图片新生成一张ppt,仔细调整各项参数即可
from pptx import Presentation
from pptx.util import Cm
prs = Presentation()
slide1 = prs.slides.add_slide(prs.slide_layouts[6]) #该母版为空白幻灯片
slide1.shapes.add_picture('chart1.png',left=Cm(1),top=Cm(1),width=Cm(10),height=Cm(8))
slide1.shapes.add_picture('range1.png',left=Cm(1),top=Cm(10),width=Cm(10),height=Cm(8))
left = top = width = height = Cm(1)
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
tf.text = "This is text inside a textbox"
'''以上四行为添加文本框并在文本框内写内容的示范'''
prs.save("test.pptx")
pptx库相关代码主要参考链接:https://python-pptx.readthedocs.io/en/latest/user/quickstart.html