读取excel中的图表,写入WORD中,并解决只显示一条线的问题

因工作需要,自动化处理一些文件,需要将excel中的图表,写入到word文件中,在过程中,需要了读不出来,不知道如何写到图形文件,写入到word中,只能环绕方式采取嵌入型,显示图片为一条线,还要手工改,而且位置不容易控制,往往不是自己当初写入的初衷,经过多次尝试,终于把所有的问题解决了,能有个比较理想的解决方案。结合代码,将自己的思路与朋友们共分享。

from PIL import ImageGrab, Image  #pip pillow
import docx
from docx.shared import Inches
from docx import Document
import time
import win32com.client as win32
import os
 
 
myDocument = Document()
chartlocation = ['N20:Z50', 'A20:M50',  'A53:M83',
                 'N53:Z83', 'A86:M116', 'N86:Z116', 'A119:M149']
# 循环处理每个截图区域
 
 
# 能把所有图片按原图象素导出来
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False #True  #可视化
excel.DisplayAlerts = False  #是否显示警告
workbook = excel.Workbooks.Open(os.path.join(os.getcwd(),'2020年公司经营对比表.xlsx'))
for sheet in workbook.Worksheets:
    if sheet.Name=='集团合计':
        for i, shape in enumerate(sheet.Shapes):
            print(sheet.Name,shape.Name)
            if shape.Name.startswith('Chart'):  # 'Picture'为图,Chart 为图形
                    getclip=None
                    while getclip==None:
                        time.sleep(0.3)
                        shape.Copy()
                        image = ImageGrab.grabclipboard()
                        if image==None:
                            print("末获取图像,重试............")
                        else:
                            getclip="yes"
                    image.save('temp{}.jpg'.format(i+1), 'jpeg')

                    time.sleep(0.3)
                myDocument.add_paragraph('第{}张图'.format(i+1))
                myDocument.add_picture('temp{}.jpg'.format(i+1), width=Inches(6.0))
 
 
                #myDocument.add_picture(image, width=Inches(6.0))
             
excel.Quit()
myDocument.save('out.docx')

其中,读取excel,在sheet名为“集团合计”中查找图形,用图表类型区分后,将图形粘贴到粘贴板上,用pil模块中的图形、粘贴板拷贝,判断非空后,将图形加入到WORD文档中。

关于图形变为一条线,解决方案是设置行距为单倍或1.5倍,如设置为固定行距,则不能显示完全图形,因写入WORD文档需要很长代码,我只把有关的几行解决问题的代码写上。

    paragraph_format = paragraph.paragraph_format


    paragraph_format.line_spacing = WD_LINE_SPACING.ONE_POINT_FIVE  
    paragraph.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE  #设置1.5倍行距,则图表全



    paragraph.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE
# ONE_POINT_FIVE,1.5倍行距
# AT_LEAST,最小行距
# DOUBLE,双倍行距
# EXACTLY,固定值
# MULTIPLE,多倍行距
# SINGLE,单倍行距
# 当line_spacing_rule的值设置为EXACTLY和MULTIPLE时,需要line_spacing属性进行设置具体的数值。

如这几个参数用PT(30)等固定行距表示,则会出现一条线的问题。

完成的效果如图:

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值