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

2024-07-02 17:08:44 +08:00
 foxthree

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

2412 次点击
所在节点    程序员
21 条回复
whatv3
2024-07-02 17:10:03 +08:00
用 word 里的 vbs 宏,之前写过一个脚本帮助专利同事自动把文档分割成专利五书...
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
2024-07-02 17:16:20 +08:00
临时用还是要写脚本跑大量数据?

应急:
1 、打印成 PDF
2 、WPS 自带 PDF 拆分
3 、PDF 批量转成 Word
loopinfor
2024-07-02 17:16:30 +08:00
如果可以转 PDF 就转 PDF 再分页保存。
也可以用大纲来解决,要分页的地方设置个一级大纲级别的文字,然后在大纲视图里面全选->创建->保存,就可以了。
foxthree
2024-07-02 17:20:35 +08:00
@totoro625 脚本跑。要上生产环境的,服务器应该是 linux
foxthree
2024-07-02 17:21:23 +08:00
@qazzz 能在服务器上跑的方法呢。。。这在本地电脑好像确实可以
foxthree
2024-07-02 17:23:32 +08:00
@loopinfor 单纯只是切割的话,转 pdf 确实可以,但是还有后续转 md 的要求,用包转 pdf 再转成 md ,调研过也会缺失很多东西
kmyq
2024-07-02 17:31:11 +08:00
python 有个操作 doc 的库吧,可以部署在 linux
foxthree
2024-07-02 17:41:44 +08:00
@kmyq 又一个 python-docx 但是好像不是太好用,或者我太菜了发挥不出来..
kasusa
2024-07-02 20:48:13 +08:00
c# de xceed 能用。github 有免费版
heinz97
2024-07-02 22:23:50 +08:00
我专门研究 docx 的,python-docx 功能很基础,完美的开源分割解决方法不存在
heinz97
2024-07-02 22:26:57 +08:00
@heinz97 开源作者没人会花时间研究这个,一般这类都是细分的商业场景
iOCZS
2024-07-02 22:37:18 +08:00
页是排版的结果吧,数据本身有页的概念吗?
summerwar
2024-07-02 22:52:43 +08:00
跨页的表格打算如何处理?
paopjian
2024-07-02 23:02:04 +08:00
分页是排版后的结果吧,你怎么保证这一页内容不是被上一页挤下来的?如果上一页没了那这页内容可就浮上去了
undeflife
2024-07-02 23:18:18 +08:00
jackmod
2024-07-03 00:06:26 +08:00
docx 格式要自己计算内容高度啊,这也太痛苦了。
如果 LibreOffice 没有相关接口的话就只能自己写个渲染器了。
TsubasaHanekaw
2024-07-03 00:27:58 +08:00
找台 windows 服务器,安装 office,调用 com+接口效果应该最完美了
foxthree
2024-07-03 16:34:28 +08:00
@heinz97 好像确实是这样。花时间来搞分页在我们这边没太有性价比
foxthree
2024-07-03 16:57:53 +08:00
@paopjian 是的,类似于排版前端的功能。这让后端来搞分割缺失太痛苦了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1054301

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX