• 请不要在回答技术问题时复制粘贴 AI 生成的内容
foxthree
V2EX  ›  程序员

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

  •  
  •   foxthree · Jul 2, 2024 · 3761 views
    This topic created in 855 days ago, the information mentioned may be changed or developed.

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

    21 replies  •  2024-07-03 18:49:05 +08:00
    whatv3
    whatv3
    Jul 2, 2024
    1
    用 word 里的 vbs 宏,之前写过一个脚本帮助专利同事自动把文档分割成专利五书...
    qazzz
    qazzz
    Jul 2, 2024
    2
    不知道,但是 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
    totoro625
    Jul 2, 2024
    3
    临时用还是要写脚本跑大量数据?

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