V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
foxthree
V2EX  ›  程序员

求教 docx 如何按页切分成多个 docx 文件啊?

  •  
  •   foxthree · 162 天前 · 1832 次点击
    这是一个创建于 162 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问了 gpt 。只会让用 python-docx ,但是用这个包切出来都是缺失格式的,图片跟表格都丢了,而且分不了页,用了下 aspose 的包,确实可以不丢格式,但是那是商用的。大家有知道的吗

    21 条回复    2024-07-03 18:49:05 +08:00
    whatv3
        1
    whatv3  
       162 天前
    用 word 里的 vbs 宏,之前写过一个脚本帮助专利同事自动把文档分割成专利五书...
    qazzz
        2
    qazzz  
       162 天前
    不知道,但是 gpt 告诉我的:
    使用宏自动拆分
    以下是一个示例 VBA 宏,它可以自动将 Word 文档按页拆分为多个 .docx 文件:

    打开宏编辑器:

    打开你的 Word 文档。
    按 Alt + F11 打开宏编辑器。
    插入新模块:

    在宏编辑器中,选择“插入” > “模块”,然后将以下代码粘贴到新模块中:
    vba
    复制代码
    Sub SplitDocumentByPages()
    Dim doc As Document
    Dim page As Range
    Dim newDoc As Document
    Dim i As Integer
    Dim pageNumber As Integer

    Set doc = ActiveDocument
    pageNumber = doc.ComputeStatistics(wdStatisticPages)

    For i = 1 To pageNumber
    Set page = doc.Range.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=i)
    page.End = doc.Range.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=i + 1).Start
    page.End = page.End - 1

    Set newDoc = Documents.Add
    newDoc.Range.FormattedText = page.FormattedText
    newDoc.SaveAs2 FileName:=doc.Path & "\Page" & i & ".docx"
    newDoc.Close
    Next i
    End Sub
    运行宏:
    关闭宏编辑器。
    按 Alt + F8 打开宏列表。
    选择 SplitDocumentByPages 并运行它。
    这个宏将会自动将当前打开的 Word 文档按页拆分,并将每一页保存为一个新的 .docx 文件。这些文件将保存到与原始文档相同的文件夹中,文件名格式为 Page1.docx 、Page2.docx ,以此类推。
    totoro625
        3
    totoro625  
       162 天前
    临时用还是要写脚本跑大量数据?

    应急:
    1 、打印成 PDF
    2 、WPS 自带 PDF 拆分
    3 、PDF 批量转成 Word
    loopinfor
        4
    loopinfor  
       162 天前
    如果可以转 PDF 就转 PDF 再分页保存。
    也可以用大纲来解决,要分页的地方设置个一级大纲级别的文字,然后在大纲视图里面全选->创建->保存,就可以了。
    foxthree
        5
    foxthree  
    OP
       162 天前
    @totoro625 脚本跑。要上生产环境的,服务器应该是 linux
    foxthree
        6
    foxthree  
    OP
       162 天前
    @qazzz 能在服务器上跑的方法呢。。。这在本地电脑好像确实可以
    foxthree
        7
    foxthree  
    OP
       162 天前
    @loopinfor 单纯只是切割的话,转 pdf 确实可以,但是还有后续转 md 的要求,用包转 pdf 再转成 md ,调研过也会缺失很多东西
    kmyq
        8
    kmyq  
       162 天前
    python 有个操作 doc 的库吧,可以部署在 linux
    foxthree
        9
    foxthree  
    OP
       162 天前
    @kmyq 又一个 python-docx 但是好像不是太好用,或者我太菜了发挥不出来..
    kasusa
        10
    kasusa  
       161 天前
    c# de xceed 能用。github 有免费版
    heinz97
        11
    heinz97  
       161 天前
    我专门研究 docx 的,python-docx 功能很基础,完美的开源分割解决方法不存在
    heinz97
        12
    heinz97  
       161 天前
    @heinz97 开源作者没人会花时间研究这个,一般这类都是细分的商业场景
    iOCZS
        13
    iOCZS  
       161 天前
    页是排版的结果吧,数据本身有页的概念吗?
    summerwar
        14
    summerwar  
       161 天前
    跨页的表格打算如何处理?
    paopjian
        15
    paopjian  
       161 天前
    分页是排版后的结果吧,你怎么保证这一页内容不是被上一页挤下来的?如果上一页没了那这页内容可就浮上去了
    undeflife
        16
    undeflife  
       161 天前
    jackmod
        17
    jackmod  
       161 天前
    docx 格式要自己计算内容高度啊,这也太痛苦了。
    如果 LibreOffice 没有相关接口的话就只能自己写个渲染器了。
    TsubasaHanekaw
        18
    TsubasaHanekaw  
       161 天前   ❤️ 1
    找台 windows 服务器,安装 office,调用 com+接口效果应该最完美了
    foxthree
        19
    foxthree  
    OP
       161 天前
    @heinz97 好像确实是这样。花时间来搞分页在我们这边没太有性价比
    foxthree
        20
    foxthree  
    OP
       161 天前
    @paopjian 是的,类似于排版前端的功能。这让后端来搞分割缺失太痛苦了
    luzemin
        21
    luzemin  
       160 天前
    docx 的话那就找个编程语言操作 OpenXML 就好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3060 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:48 · PVG 18:48 · LAX 02:48 · JFK 05:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.