推荐学习书目
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 · Apr 25, 2022 · 3166 views
    This topic created in 1504 days ago, the information mentioned may be changed or developed.
    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 replies    2022-04-26 15:57:29 +08:00
    paopjian
        1
    paopjian  
       Apr 25, 2022
    save_img_to_doc(img)得在 for 范围里
    jbue520
        2
    jbue520  
    OP
       Apr 25, 2022
    @paopjian 你说的是上面的 for 还是下面的 for? 我缩进都已经做了,但是还只能插入一张图,并不能把目录下的图片全插入进去
    zhzy
        3
    zhzy  
       Apr 25, 2022
    根据你的代码 main() 里面的 save_img_to_doc(img) 只运行了一次, 也就是只插入了最后一个 img
    jbue520
        4
    jbue520  
    OP
       Apr 25, 2022
    @zhzy 哦,那就是 save_img_to_doc(img) 需要在做一个循环...我先试试,,感谢感谢
    zhzy
        5
    zhzy  
       Apr 25, 2022
    save_img_to_doc(img) 和 print(img) 要保持一样的缩进
    jbue520
        6
    jbue520  
    OP
       Apr 25, 2022
    @zhzy 已经一样的缩进了,但是却还是只插入了一张图..
    kokutou
        7
    kokutou  
       Apr 26, 2022 via Android
    每运行一次 save_img_to_doc ,都把源模板 docx 插入 1 张图片,然后保存到了目标 docx 。。。
    每次都是用的源模板。。。

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