V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
jbue520
V2EX  ›  Python

Python 的 word 占位符批量插入图片,新手..不知道代码哪里出问题

  •  
  •   jbue520 · 2022-04-25 20:13:50 +08:00 · 2492 次点击
    这是一个创建于 978 天前的主题,其中的信息可能已经有所发展或是发生改变。
    from docx import  Document
    from docx.shared import Inches
    import glob
    from os import listdir
    from docx.oxml.ns import qn
    from docx.enum.text import WD_ALIGN_PARAGRAPH
    
    
    def center_insert_img(doc,img):
        """插入图片"""
        for paragraph in doc.paragraphs:
            # 根据文档中占位符定位图片插入的位置
            if '<<img1>>' in paragraph.text:
                paragraph.text = paragraph.text.replace('<<img1>>', '')
                run = paragraph.add_run('')
                run.add_break()
    
                run.add_picture(img, width=Inches(6.2))
    
    
    def save_img_to_doc(img):
        tpl_doc = r'D:\py\归档模版.docx'
        res_doc = r'D:\py\空港.docx'
    
        document = Document(tpl_doc)
    
        center_insert_img(document,img)
    
        document.save(res_doc)
    
    
    def main():
        path = r'C:\Users\durpa\Desktop\身份证\*.jpg'
        # img = 'C:\\Users\\durpa\\Desktop\\身份证\\75+'
        for img in glob.glob(path):
            print(img)
    
    
    
        save_img_to_doc(img)
    
    
    if __name__ == '__main__':
        main()
    

    代码能运行,但是只能插入一张图...还请大神指教一下..感谢

    13 条回复    2022-04-26 15:57:29 +08:00
    paopjian
        1
    paopjian  
       2022-04-25 20:43:55 +08:00
    save_img_to_doc(img)得在 for 范围里
    jbue520
        2
    jbue520  
    OP
       2022-04-25 21:05:01 +08:00
    @paopjian 你说的是上面的 for 还是下面的 for? 我缩进都已经做了,但是还只能插入一张图,并不能把目录下的图片全插入进去
    zhzy
        3
    zhzy  
       2022-04-25 22:16:47 +08:00
    根据你的代码 main() 里面的 save_img_to_doc(img) 只运行了一次, 也就是只插入了最后一个 img
    jbue520
        4
    jbue520  
    OP
       2022-04-25 22:18:24 +08:00
    @zhzy 哦,那就是 save_img_to_doc(img) 需要在做一个循环...我先试试,,感谢感谢
    zhzy
        5
    zhzy  
       2022-04-25 22:18:29 +08:00
    save_img_to_doc(img) 和 print(img) 要保持一样的缩进
    jbue520
        6
    jbue520  
    OP
       2022-04-25 22:25:03 +08:00
    @zhzy 已经一样的缩进了,但是却还是只插入了一张图..
    kokutou
        7
    kokutou  
       2022-04-26 07:50:47 +08:00 via Android
    每运行一次 save_img_to_doc ,都把源模板 docx 插入 1 张图片,然后保存到了目标 docx 。。。
    每次都是用的源模板。。。

    这样说你应该懂了吧
    jbue520
        8
    jbue520  
    OP
       2022-04-26 09:50:21 +08:00
    @kokutou 听是听懂了,但是菜鸟还在想怎么解决....不知道大神能否告知?
    kasusa
        9
    kasusa  
       2022-04-26 10:23:45 +08:00
    是想要把 word 中所有 的<<img1>> 都换成同一张图片嘛
    如果是的话,单看我是没看出来有啥问题。不过如果你需要进一步的协助,
    kasusa
        10
    kasusa  
       2022-04-26 10:24:13 +08:00
    你可以把文件和代码都传到 github 上面建一个项目我下载下来试试才知道哪里有问题
    jbue520
        11
    jbue520  
    OP
       2022-04-26 14:42:13 +08:00
    @kasusa 我想把文件夹里的匹配的.JPG 文件全部插入到<<img1>>,其实这部分只是我要做的事情的其中之一, 我把详细的上传到百度网盘了,代码我只实现了一部分,其他的还请大神指教 链接: https://pan.baidu.com/s/1fGIW9heQq-41AkBx53HWAg
    提取码:kccx
    kasusa
        12
    kasusa  
       2022-04-26 15:34:22 +08:00
    emm 我还是不管那么多了,你想往一个<<img1>>里面插入多张图片对吧,我有空了试着做做看。
    而且对于 word 操作我更推荐你用 c#而不是 python ,py 的 docx 库有很多坑
    jbue520
        13
    jbue520  
    OP
       2022-04-26 15:57:29 +08:00
    @kasusa 突然感觉被抛弃了..... =.=!!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2786 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:55 · PVG 20:55 · LAX 04:55 · JFK 07:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.