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
colatea
V2EX  ›  Python

有没有批量将 DOCX 保留图表和图片转换为 HTML 的方法?

  •  
  •   colatea · 2022-03-04 14:53:25 +08:00 · 3000 次点击
    这是一个创建于 999 天前的主题,其中的信息可能已经有所发展或是发生改变。

    单位有近万个 docx 文档需要批量转换为 html,并需要保留图表(可转换为图片)

    目前做过的尝试

    1.WPS 可以完美转换,但不能批量,尚未找到能调用的接口

    2.pydocx,无法保留图表

    3,pandoc,无法保留图表及图片

    4,mammoth,没装,看文档是无法保留图表的

    5,LibreOffice,我已经急病乱投医了,这个转完的文件像一坨屎一样糊在我的桌面上,而且打开以后更是屎....

    目前的想法有两条路

    1,第三方代码解决,貌似够呛了

    2,控制 WPS 或 WORD 等编辑工具进行批量另存

    请大神指点一二

    第 1 条附言  ·  2022-03-04 15:34:56 +08:00
    找到办法了
    https://blog.csdn.net/lzl001/article/details/8435048

    pip install pypiwin32

    app = Dispatch('Word.Application')
    doc = app.Documents.open('D:\\doc\\test.docx')
    doc.SaveAs('D:\\html\\test.html', 8)
    doc.Close()
    app.Quit()
    12 条回复    2022-03-05 12:01:24 +08:00
    lneoi
        1
    lneoi  
       2022-03-04 14:56:39 +08:00
    围观 之前找的也是没办法保留表格
    RickyC
        2
    RickyC  
       2022-03-04 14:57:47 +08:00
    猜想用 宏或者 COM 接口 操作 WPS 或 Word 的接口,用 Save as 保存为网页
    xylophone21
        3
    xylophone21  
       2022-03-04 15:00:06 +08:00
    @RickyC 如果文件个数很多,一个一个的打开,点宏也还是蛮大的工作量的
    RickyC
        4
    RickyC  
       2022-03-04 15:00:17 +08:00
    https://docs.microsoft.com/zh-tw/office/vba/api/word.saveas2

    参考以上,但未测试是否可保留图表
    RickyC
        5
    RickyC  
       2022-03-04 15:00:59 +08:00
    @xylophone21 当然不是手动打开;用宏可以批量,用别的语言操作 com 也可以批量。
    cwcc
        6
    cwcc  
       2022-03-04 15:01:57 +08:00
    同求,不过我的看法是现在 Word 格式虽然是开放的但还是很复杂,复杂就有点私有那味了,也就是不能完全通过自己的代码来操控 DOCX 文件内的每一个细节。

    我之前是尝试使用各种语言的各种库生成 DOCX ,但反过来就很难。(因为有时候你永远也不能确定这份 Word 文档的一段简单的文字格式有多复杂)
    MuSeCanYang
        7
    MuSeCanYang  
       2022-03-04 15:16:43 +08:00
    Aspose. Words
    murmur
        8
    murmur  
       2022-03-04 15:24:34 +08:00
    libreoffice 转 pdf 可以啊,为什么非得 html ,要求 html 本身就是过分,文档预览都用的 canvas 渲染
    colatea
        9
    colatea  
    OP
       2022-03-04 15:31:08 +08:00
    找到办法了
    https://blog.csdn.net/lzl001/article/details/8435048

    pip install pypiwin32

    app = Dispatch('Word.Application')
    doc = app.Documents.open('D:\\doc\\test.docx')
    doc.SaveAs('D:\\html\\test.html', 8)
    doc.Close()
    app.Quit()
    colatea
        10
    colatea  
    OP
       2022-03-04 15:33:10 +08:00
    @murmur 我要把 docx 打散,把里面的内容提取出来入数据库的
    yangyaofei
        11
    yangyaofei  
       2022-03-04 16:26:48 +08:00
    可以用 libreoffice + Jodconvert 转换格式 如果是 linux 的话, win 下用 win32 确实最好了

    但是,你要提取内容为啥不直接用类似 POI 的库去读,或者更暴力点,解压开了之后里面就是一堆 xml 和图片,随便搞
    shayuvpn0001
        12
    shayuvpn0001  
       2022-03-05 12:01:24 +08:00
    这个需求其实最好是用微软亲儿子来实现,简单的 VBA ,复杂的上 VSTO 。你上面的语句也是背后启动了 Word ,调用 word 的另存为功能实现的。

    如果一切顺利,这个确实是可以跑到天荒地老。一旦碰到文档有问题,比如编码不对,死机没及时保存等,python 可能跑到这里就自动终止了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1017 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:22 · PVG 04:22 · LAX 12:22 · JFK 15:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.