首页 > 编程问答 >Excel 表格到 PowerPoint 增强型图元文件图像

Excel 表格到 PowerPoint 增强型图元文件图像

时间:2024-07-31 04:20:56浏览次数:11  
标签:python excel powerpoint

我需要将多个 Excel 表格作为高分辨率 EMF 图像移动到多个 powerpoint 中。我无法将数据链接到 powerpoint,因为我需要从源自单个 Excel 模板的 400 多个不同 Excel 模型更新 400 多个不同的 powerpoint,而 VBA 不是一个选项。所有的幻灯片和 Excel 模型的格式和布局都完全相同。下面的代码可以工作,但是粘贴到 PowerPoint 中的图像的分辨率太低,我不知道如何提高它。

import win32com.client as win32
from pptx import Presentation
from PIL import ImageGrab, Image
import os

modelPath = "P:/Folder"
FileName = "XXXX.xlsx"
outT = "P:/Folder/Charts"
cellRange = 'A1:C10'
sheetName = 'Norm'

o = win32com.client.Dispatch('Excel.Application')
wb = o.Workbooks.Open(modelPath +"/"+FileName)
wsT = wb.Worksheets['Norm']

# Grab Table
wsT.Range(wsT.Cells(4,3),wsT.Cells(41,8)).CopyPicture(Format = 2)
imgEMF = ImageGrab.grabclipboard()
imgFile = os.path.join(outT,'norm.emf')
imgEMF.save(imgFile, 'PNG', compress_level=0, dpi=(5000, 5000))
t=ImageGrab.grabclipboard()

# remove old tables
pres = Presentation("Test.pptx") # name of existing pptx
t = [26, 28, 31, 33, 34]

for i in t:
    slides = pres.slides[i]
    shapes = slides.shapes
    for shape in shapes:
        if shape.shape_type == 13 or shape.shape_type == 1:
            shapes.element.remove(shape.element)

#add new tables
slide = pres.slides[31]
slide.shapes.add_picture(out+'/norm.emf', left = Inches(0.41), top = Inches(2.25), width = Inches(6.17), height = Inches(3.0))
# I cut all but one table from the code

pres.save('Test6.pptx')

遇到的问题是,没有使用 EMF 文件格式提供的分辨率优势。当前的代码首先将 Excel 表格复制为 EMF(这很好),但随后使用 PIL 将其保存为 PNG 文件。此步骤会降低图像分辨率,因为 PNG 是光栅格式,而 EMF 是矢量格式。

以下是如何改进代码的方法:

  1. 直接将 EMF 粘贴到 PowerPoint 中,无需中间 PNG 保存。 win32com API 允许直接粘贴剪贴板内容,无需保存为文件。

  2. 使用 Shapes.AddPicture 方法并指定 .emf 文件。 此方法可以很好地处理 EMF 文件,并且不会以 PIL 的方式降低分辨率。

以下是更新后的代码:

import win32com.client as win32
from pptx import Presentation
import os

modelPath = "P:/Folder"
FileName = "XXXX.xlsx"
outT = "P:/Folder/Charts"
cellRange = 'A1:C10'
sheetName = 'Norm'

o = win32com.client.Dispatch('Excel.Application')
wb = o.Workbooks.Open(modelPath +"/"+FileName)
wsT = wb.Worksheets['Norm']

# Grab Table
wsT.Range(wsT.Cells(4,3),wsT.Cells(41,8)).CopyPicture(Format = 2)

# remove old tables
pres = Presentation("Test.pptx") 
t = [26, 28, 31, 33, 34]

for i in t:
    slides = pres.slides[i]
    shapes = slides.shapes
    for shape in shapes:
        if shape.shape_type == 13 or shape.shape_type == 1:
            shapes.element.remove(shape.element)

#add new tables
slide = pres.slides[31]
slide.shapes.add_picture(os.path.join(outT,'norm.emf'), left = Inches(0.41), top = Inches(2.25), width = Inches(6.17), height = Inches(3.0))

pres.save('Test6.pptx')

代码说明:

  1. 我们删除了所有与 PIL 相关的代码,因为我们不再需要将图像保存为 PNG。
  2. add_picture 方法中,我们现在直接使用存储在 outT 文件夹中的 norm.emf 文件的路径。

通过这些更改,应该能够将 Excel 表格作为高分辨率 EMF 图像直接插入到 PowerPoint 演示文稿中,而不会损失质量。

标签:python,excel,powerpoint
From: 78813190

相关文章

  • python函数:带星号的参数一个接一个
    我想知道为什么定义以下函数被认为是好的。deffoo(*x,y):pass据我所知,现在有调用此函数的方法,因为它总是缺少y的值。(如果我错了,请纠正我。)这有什么我不知道的用处吗?你说得对,在Python中定义一个像deffoo(*x,y):...这样的函数,在试图以常规方......
  • 基于遗传(GA)、粒子群(PSO)、模拟退火(SA)、禁忌搜索(ST)、蚁群算法(ACO)、自自组织神
        ......
  • 10个append()函数在Python程序开发中的创新应用
    文末赠免费精品编程资料~~在Python编程的世界里,append()函数是列表操作中最常见的方法之一。它允许我们在列表的末尾添加一个元素,这一简单的功能却能激发无限的创造力。今天,我们将探讨append()函数在Python程序开发中的10种创新应用,从基本用法到高级技巧,逐步深入。1.构......
  • 全网最适合入门的面向对象编程教程:28 类和对象的Python实现-Python编程原则、哲学和规
    全网最适合入门的面向对象编程教程:28类和对象的Python实现-Python编程原则、哲学和规范大汇总摘要:本文主要介绍了在使用Python进行面向对象编程时,Python异常处理的原则-“请求谅解,而非许可”,以及软件设计和Python的编程原则,同时介绍了PEP8规范。原文链接:FreakStud......
  • python生成器
    一前言环境:python3.10win10二生成器1关于生成器先看一个例子    定义了一个函数,当我们运行该函数时,并未像普通函数那样执行函数体内的代码    从其中的英文可知,执行函数得到了一个生成器对象,这个生成器对象也叫做generatoriterator(生成器迭代器),generatorit......
  • 生成MySQL-oracle-SQL server数据字典(附Python代码)
    生成数据字典,早年写的,请注意新的版本变化。(1)MySQL元数据SQLUSEinformation_schema;#取出库和表。select  TABLE_SCHEMAAS'数据库名称',  TABLE_NAMEAS'表名',  TABLE_TYPEAS'表类型',  ROW_FORMATAS'行格式',  ENGINEAS'数据库引擎',  TABL......
  • Python - Method Resolution Order (MRO)
    TheorderinwhichPythonsearchesforattributesinbaseclassesiscalledmethodresolutionorder(MRO).Itgivesalinearizedpathforaninheritancestructure.PythoncomputesanMROforeveryclassinthehierarchy;thisMROiscomputedusingthe‘C3......
  • 计算机毕业设计选题推荐-零食批发商仓库管理系统-Java/Python项目实战
    ✨作者主页:IT研究室✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......
  • 【自动化测试必学语言】python:语言基础
    目录Python介绍语言的分类注释单行注释多行注释变量定义变量使用变量变量名的命名规范数据类型数字类型非数字类型type()函数input输入print输出格式化输出快捷键(小操作)运算符算术运算符 比较运算符Python介绍作者:吉多·范罗苏姆(Guidov......
  • Python基础知识笔记——常用函数
    一、range()函数range()函数用于生成一个整数序列。它通常用于循环结构中,例如for循环,以提供循环的迭代次数。range()函数可以有1到3个参数。#range(start,stop,step)range(2,6,2)#生成从2开始,到6结束(不包括6),步长为2的一串数字#参数指定不完全时,默认从0开始,步长......