求教 docx 如何按页切分成多个 docx 文件啊? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
foxthree
V2EX    程序员

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

  •  
  •   foxthree 2024-07-02 17:08:44 +08:00 2586 次点击
    这是一个创建于 514 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    应急:
    1 、打印成 PDF
    2 、WPS 自带 PDF 拆分
    3 、PDF 批量转成 Word
    loopinfor
        4
    loopinfor  
       2024-07-02 17:16:30 +08:00
    如果可以转 PDF 就转 PDF 再分页保存。
    也可以用大纲来解决,要分页的地方设置个一级大纲级别的文字,然后在大纲视图里面全选->创建->保存,就可以了。
    foxthree
        5
    foxthree  
    OP
       2024-07-02 17:20:35 +08:00
    @totoro625 脚本跑。要上生产环境的,服务器应该是 linux
    foxthree
        6
    foxthree  
    OP
       2024-07-02 17:21:23 +08:00
    @qazzz 能在服务器上跑的方法呢。。。这在本地电脑好像确实可以
    foxthree
        7
    foxthree  
    OP
       2024-07-02 17:23:32 +08:00
    @loopinfor 单纯只是切割的话,转 pdf 确实可以,但是还有后续转 md 的要求,用包转 pdf 再转成 md ,调研过也会缺失很多东西
    kmyq
        8
    kmyq  
       2024-07-02 17:31:11 +08:00
    python 有个操作 doc 的库吧,可以部署在 linux
    foxthree
        9
    foxthree  
    OP
       2024-07-02 17:41:44 +08:00
    @kmyq 又一个 python-docx 但是好像不是太好用,或者我太菜了发挥不出来..
    kasusa
        10
    kasusa  
       2024-07-02 20:48:13 +08:00
    c# de xceed 能用。github 有免费版
    heinz97
        11
    heinz97  
       2024-07-02 22:23:50 +08:00
    我专门研究 docx 的,python-docx 功能很基础,完美的开源分割解决方法不存在
    heinz97
        12
    heinz97  
       2024-07-02 22:26:57 +08:00
    @heinz97 开源作者没人会花时间研究这个,一般这类都是细分的商业场景
    iOCZS
        13
    iOCZS  
       2024-07-02 22:37:18 +08:00
    页是排版的结果吧,数据本身有页的概念吗?
    summerwar
        14
    summerwar  
       2024-07-02 22:52:43 +08:00
    跨页的表格打算如何处理?
    paopjian
        15
    paopjian  
       2024-07-02 23:02:04 +08:00
    分页是排版后的结果吧,你怎么保证这一页内容不是被上一页挤下来的?如果上一页没了那这页内容可就浮上去了
    undeflife
        16
    undeflife  
       2024-07-02 23:18:18 +08:00
    jackmod
        17
    jackmod  
       2024-07-03 00:06:26 +08:00
    docx 格式要自己计算内容高度啊,这也太痛苦了。
    如果 LibreOffice 没有相关接口的话就只能自己写个渲染器了。
    TsubasaHanekaw
        18
    TsubasaHanekaw  
       2024-07-03 00:27:58 +08:00   1
    找台 windows 服务器,安装 office,调用 com+接口效果应该最完美了
    foxthree
        19
    foxthree  
    OP
       2024-07-03 16:34:28 +08:00
    @heinz97 好像确实是这样。花时间来搞分页在我们这边没太有性价比
    foxthree
        20
    foxthree  
    OP
       2024-07-03 16:57:53 +08:00
    @paopjian 是的,类似于排版前端的功能。这让后端来搞分割缺失太痛苦了
    luzemin
        21
    luzemin  
       2024-07-03 18:49:05 +08:00
    docx 的话那就找个编程语言操作 OpenXML 就好
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     884 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 19:46 PVG 03:46 LAX 11:46 JFK 14:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86