Plumen 2023-12-24 10:26 采纳率: 100%
浏览 75
已结题

使用python将Excel图表复制到PPT

数据文件:《data.xlsx》
目标文件:《实例.ppt》
《data.xlsx》sheet1中的图表,用“Ctrl+C,Ctrl+V”可以直接复制到《实例.ppt》,仍旧是图表形式(不是png,jpg等等位图)。
要达到这个效果,把其中某一张图表复制到PPT,使用python如何实现?

按这个思路,如下,在最后一行报错了,大概是说没有图片之类的提示。复制成功后,到了PPT如何粘贴,也请提示。


import win32com.client as win32
import win32clipboard

#打开Excel应用程序和工作簿
excel_app = win32.gencache.EnsureDispatch('Excel.Application')
excel_file = r'D:\python\PPT\data.xlsx'
wb = excel_app.Workbooks.Open(excel_file)
sht = wb.Sheets['Sheet1']  

#获取工作表中的第一个图表并将其复制到剪贴板
chart = sht.ChartObjects(1)

print(chart)   #执行时可以正常显示
chart.Copy()    #本行报错
  • 写回答

6条回答 默认 最新

  • 爱编程的鱼 2023-12-24 11:35
    关注

    根据您提供的代码,报错信息可能是因为在复制图表之前,需要先将Excel应用程序激活,并且需要将图表所在的工作表设置为活动工作表。此外,复制图表后,需要将其粘贴到PPT中。下面是一个修改过的代码示例:

    import win32com.client as win32
    import win32clipboard
     
    # 打开Excel应用程序和工作簿
    excel_app = win32.gencache.EnsureDispatch('Excel.Application')
    excel_file = r'D:\python\PPT\data.xlsx'
    wb = excel_app.Workbooks.Open(excel_file)
    sht = wb.Sheets['Sheet1']
     
    # 获取工作表中的第一个图表并将其复制到剪贴板
    chart = sht.ChartObjects(1)
     
    # 激活Excel应用程序并将图表所在的工作表设置为活动工作表
    excel_app.Visible = True
    sht.Activate()
    chart.Activate()
     
    # 将图表复制到剪贴板
    chart.Copy()
     
    # 打开PPT应用程序和演示文稿
    ppt_app = win32.gencache.EnsureDispatch('PowerPoint.Application')
    ppt_file = r'D:\python\PPT\实例.ppt'
    prs = ppt_app.Presentations.Open(ppt_file)
     
    # 将复制的图表粘贴到PPT中
    slide = prs.Slides.Add(1, 1)
    slide.Shapes.PasteSpecial(DataType=win32.constants.ppPasteOLEObject)
     
    # 保存PPT并关闭应用程序
    prs.Save()
    ppt_app.Quit()
     
    # 释放COM对象并关闭Excel应用程序
    wb.Close(False)
    excel_app.Quit()
    win32clipboard.EmptyClipboard()
    

    在这个代码示例中,首先打开Excel应用程序和工作簿,并获取工作表中的第一个图表。然后激活Excel应用程序,并将图表所在的工作表设置为活动工作表。接着将图表复制到剪贴板。然后打开PPT应用程序和演示文稿,并将复制的图表粘贴到PPT中。最后保存PPT并关闭应用程序,释放COM对象并关闭Excel应用程序。

    请注意,代码示例中的文件路径需要根据实际情况进行修改。另外,粘贴到PPT后,您可以通过调整图表大小、位置等属性来适应您的需要。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 1月1日
  • 已采纳回答 12月24日
  • 创建了问题 12月24日