吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8454|回复: 142
上一主题 下一主题
收起左侧

[其他原创] Word文档批量自动排版工具,样式可自定义

    [复制链接]
跳转到指定楼层
楼主
pythonfun 发表于 2025-11-2 18:35 回帖奖励
一、软件名称:Word文档自动排版工具

二、软件简介:
本软件主要解决办公人员在处理Word文档时格式不统一、排版效率低下的痛点。
通过智能识别文档结构并应用标准化格式,大幅提升文档排版效率和质量,确保文档格式规范统一。

三、软件功能
本软件是一款专门用于批量自动排版Word文档的工具,主要功能包括:
1. 批量处理:支持拖拽多个Word文档(doc/docx格式)进行批量排版
2. 智能样式识别:自动识别文档中的标题层级和正文内容
3. 自动定义和应用题目、各级标题、正文等标准样式
4. 统一设置字体、字号、颜色、段落间距等格式
5. 表格自动格式化:智能设置表格样式,区分表头和表格内容
6. 图片格式处理:自动调整图片为浮动型并设置合适尺寸和环绕方式
7. 非破坏性操作:排版后另存为新文件,保留原始文件

四、使用方法和操作步骤:
1. 将需要排版的Word文档(一个或多个)直接拖拽到本脚本文件上
2. 程序自动在后台运行,不显示Word界面
3. 处理完成后弹出提示框,在原文件同目录下生成排版后的新文件,文件名格式为"原文件名_formatted.扩展名"
4. 生成排版规范的新Word文档,保持原有文档内容不变,仅调整格式
5. 各层级标题、正文、表格、图片均按标准格式重新排版

五、运行环境
  • 系统要求:Windows操作系统,已安装Microsoft Word软件
  • 运行方式:直接拖拽Word文件到脚本文件上运行


六、排版规则说明
1. 样式定义:
  • 题目:黑体16磅,加粗,居中,前后间距10磅
  • 标题1:黑体14磅,加粗,左对齐,前后间距7磅
  • 标题2:楷体12磅,加粗,左对齐,前后间距5磅
  • 标题3:仿宋11磅,加粗,左对齐,前后间距5磅
  • 正文:仿宋12磅,两端对齐,首行缩进2字符

2. 标题识别规则:
  • 标题1:识别"一、"、"二、"等格式
  • 标题2:识别"(一)"、"(二)"等格式
  • 标题3:识别"1."、"2."等数字加点格式

3. 表格格式化:
  • 表格整体居中,自动调整列宽
  • 表头:黑体12磅,加粗,居中
  • 表格内容:仿宋11磅,居中对齐

4. 图片处理:
  • 转换为浮动型图片
  • 设置四周环绕
  • 页面居中显示
  • 按比例缩放至合适尺寸


七、特色亮点
  • 操作简便:拖拽即可使用,无需复杂配置
  • 批量处理:支持同时处理多个文档
  • 智能识别:自动判断文档结构和标题层级
  • 格式统一:确保所有文档符合统一的排版规范
  • 安全可靠:保留原始文件,生成新的排版文件
  • 处理全面:涵盖文字、表格、图片等各类元素格式调整
  • 代码开源:可以用记事本打开源码,进行自助修改,如自定义格式等。


八、注意事项
本软件运行中不显示界面,需要拖动文件到vbs文件个执行,双击无法执行操作。
注意:本工具适用于一般办公文档排版,对于特殊格式要求的专业文档,建议在自动排版基础上进行手动调整。

九、代码展示
[Visual Basic] 纯文本查看 复制代码
' =========================================
' AutoFormatDocuments.vbs
' 功能:自动排版 Word 文档(支持拖拽多个 doc/docx 文件),排版后另存为新文件
' =========================================

Option Explicit

Dim args, i
Set args = WScript.Arguments

If args.Count = 0 Then
    MsgBox "请将一个或多个 Word 文件拖到本脚本上进行自动排版。", vbInformation, "提示"
    WScript.Quit
End If

Dim wordApp
Set wordApp = CreateObject("Word.Application")
wordApp.Visible = False ' 不显示 Word 窗口

For i = 0 To args.Count - 1
    AutoFormatDocument args(i)
Next

wordApp.Quit
Set wordApp = Nothing

MsgBox "所有文档排版完成!新文件已生成。", vbInformation, "完成"


' =========================================
' 自动排版主过程
' =========================================
Sub AutoFormatDocument(filePath)
    On Error Resume Next
    Dim doc, fso, folderPath, baseName, ext, newFilePath

    Set fso = CreateObject("Scripting.FileSystemObject")
    folderPath = fso.GetParentFolderName(filePath)
    baseName = fso.GetBaseName(filePath)
    ext = fso.GetExtensionName(filePath)
    newFilePath = folderPath & "\" & baseName & "_formatted." & ext

    Set doc = wordApp.Documents.Open(filePath)

    If doc Is Nothing Then
        MsgBox "无法打开文件: " & filePath, vbExclamation, "错误"
        Exit Sub
    End If

    ' 1. 清除格式
    doc.Content.WholeStory
    doc.Content.ClearFormatting

    ' 2. 定义样式
    DefineStyles doc

    ' 3. 应用样式
    ApplyStylesToDocument doc

    ' 4. 格式化表格
    FormatTables doc

   '5. 格式化图片
    FormatPictures doc

    ' 6. 另存为新文件
    doc.SaveAs2 newFilePath
    doc.Close False

  
End Sub


' =========================================
' 定义样式
' =========================================
Sub DefineStyles(doc)
    Dim blackColor
    blackColor = RGB(0, 0, 0)

    ' 自定义“题目”样式
    With doc.Styles.Add("题目", 1)
        .AutomaticallyUpdate = False
        With .Font
            .Name = "黑体"
            .Size = 16
            .Bold = True
            .Color = blackColor
        End With
        With .ParagraphFormat
            .Alignment = 1
            .SpaceBefore = 10
            .SpaceAfter = 10
        End With
    End With

    ' 标题 1
    With doc.Styles("标题 1").Font
        .Name = "黑体"
        .Size = 14
        .Bold = True
        .Color = blackColor
    End With
    With doc.Styles("标题 1").ParagraphFormat
        .SpaceBefore = 7
        .SpaceAfter = 7
        .Alignment = 0
        .OutlineLevel = 1
    End With

    ' 标题 2
    With doc.Styles("标题 2").Font
        .Name = "楷体"
        .Size = 12
        .Bold = True
        .Color = blackColor
    End With
    With doc.Styles("标题 2").ParagraphFormat
        .SpaceBefore = 5
        .SpaceAfter = 5
        .Alignment = 0
        .OutlineLevel = 2
    End With

    ' 标题 3
    With doc.Styles("标题 3").Font
        .Name = "仿宋"
        .Size = 11
        .Bold = True
        .Color = blackColor
    End With
    With doc.Styles("标题 3").ParagraphFormat
        .SpaceBefore = 5
        .SpaceAfter = 5
        .Alignment = 0
        .OutlineLevel = 3
    End With

    ' 正文
    With doc.Styles("正文").Font
        .Name = "仿宋"
        .Size = 12
        .Bold = False
        .Color = blackColor
    End With
    With doc.Styles("正文").ParagraphFormat
        .SpaceBefore = 0
        .SpaceAfter = 0
        .Alignment = 3
        .FirstLineIndent = doc.Application.CentimetersToPoints(0.74)
        .LineSpacingRule = 3
    End With
End Sub


' =========================================
' 应用样式到段落
' =========================================
Sub ApplyStylesToDocument(doc)
    Dim para, text, index
    index = 1

    For Each para In doc.Paragraphs
        text = Trim(para.Range.Text)
        If Len(text) > 1 Then
            If index = 1 Then
                para.Style = "题目"
            ElseIf IsHeading1(text) Then
                para.Style = "标题 1"
            ElseIf IsHeading2(text) Then
                para.Style = "标题 2"
            ElseIf IsHeading3(text) Then
                para.Style = "标题 3"
            Else
                para.Style = "正文"
            End If
        End If
        index = index + 1
    Next
End Sub


' =========================================
' 判断标题级别
' =========================================
Function IsHeading1(text)
    If Len(text) >= 2 Then
        IsHeading1 = (Mid(text, 2, 1) = "、")
    Else
        IsHeading1 = False
    End If
End Function

Function IsHeading2(text)
    If Len(text) >= 3 Then
        IsHeading2 = (Left(text, 1) = "(" And Mid(text, 3, 1) = ")")
    Else
        IsHeading2 = False
    End If
End Function

Function IsHeading3(text)
    If Len(text) >= 2 And Len(text) <= 16 Then
        IsHeading3 = (IsNumeric(Left(text, 1)) And Mid(text, 2, 1) = ".")
    Else
        IsHeading3 = False
    End If
End Function


' =========================================
' 完整表格格式化宏
' =========================================
Sub FormatTables(doc)
    Dim tbl, r, c
    Dim headerFontSize, bodyFontSize

    headerFontSize = 12 ' 表头字号
    bodyFontSize = 11   ' 正文字号

    For Each tbl In doc.Tables
        ' 表格整体居中,允许自动调整宽度
        tbl.Alignment = 1
        tbl.AllowAutoFit = True
        tbl.Rows.HeightRule = 1

        ' 1?设置正文(第2行及以后)
        If tbl.Rows.Count > 1 Then
            For r = 2 To tbl.Rows.Count
                For Each c In tbl.Rows(r).Cells
                    With c.Range
                        .Font.Name = "仿宋"
                        .Font.Size = bodyFontSize
                        .Font.Bold = False
                        .ParagraphFormat.Alignment = 1 ' 水平居中
                    End With
                    c.VerticalAlignment = 1 ' 垂直居中
                Next
            Next
        End If

        ' 2 设置表头(第一行)
        If tbl.Rows.Count >= 1 Then
            tbl.Rows(1).HeadingFormat = True ' 显式标记表头
            For Each c In tbl.Rows(1).Cells
                With c.Range
                    .Font.Name = "黑体"
                    .Font.Size = headerFontSize
                    .Font.Bold = True
                    .ParagraphFormat.Alignment = 1 ' 水平居中
                End With
                c.VerticalAlignment = 1 ' 垂直居中
            Next
        End If
    Next
End Sub


' =========================================
' 将所有行内图片转换为浮动型并居中
' =========================================
Sub ConvertPicturesToFloating(doc)
    Dim pic, shp
    Dim targetHeight, maxWidth

    targetHeight = doc.Application.CentimetersToPoints(6) ' 高度 6cm
    maxWidth = doc.Application.CentimetersToPoints(15)    ' 最大宽度 15cm

    ' 遍历所有行内图片
    For Each pic In doc.InlineShapes
        ' 转换为浮动型 Shape
        Set shp = pic.ConvertToShape

        ' 设置自动换行为四周环绕(Square)
        shp.WrapFormat.Type = 3 ' wdWrapSquare

        ' 居中页面
        shp.Left = -999995   ' wdShapeCenter
        shp.Top = -999995    ' wdShapeTop (可选)

        ' 按比例缩放
        shp.LockAspectRatio = True
        shp.Height = targetHeight
        If shp.Width > maxWidth Then
            shp.Width = maxWidth
        End If
    Next
End Sub


十、源文件下载
自动排版.zip (2.38 KB, 下载次数: 1349)

免费评分

参与人数 31吾爱币 +34 热心值 +26 收起 理由
xlaohu + 1 + 1 谢谢@Thanks!
ghjjkkl22 + 1 + 1 谢谢@Thanks!
changsha0034 + 1 + 1 谢谢@Thanks!
TTAlien + 1 谢谢@Thanks!
zemu1 + 1 谢谢@Thanks!
superlaomao + 2 + 1 谢谢@Thanks!
xiaozhiboy + 1 + 1 我很赞同!
hctttx + 1 + 1 我很赞同!
fyz2007 + 1 + 1 谢谢@Thanks!
花心乞丐 + 1 鼓励转贴优秀软件安全工具和文档!
0464tcx + 1 + 1 谢谢@Thanks!
luozi1653 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
Mr_Hain + 1 + 1 我很赞同!
是不二的七七啊 + 1 + 1 我很赞同!
sodeep + 1 + 1 谢谢@Thanks!
mazh369 + 1 我很赞同!
shhsshsh + 1 谢谢@Thanks!
xiaohang621 + 1 谢谢@Thanks!
jimjinhu + 1 + 1 谢谢@Thanks!
山田凉粉 + 1 + 1 我很赞同!
GL49927 + 1 谢谢@Thanks!
chinawolf2000 + 1 + 1 热心回复!
hrh123 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
atpjcom + 1 + 1 谢谢@Thanks!
rxk3620 + 1 谢谢@Thanks!
MQ19781011 + 1 + 1 希望可以搞出个界面,方便调整。
yinghua_163 + 1 + 1 谢谢@Thanks!
wangpj520 + 1 + 1 谢谢@Thanks!
Clarence210 + 1 + 1 我很赞同!
shenquanwusheng + 1 我很赞同!
zhangpengyu318 + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
rdhj 发表于 2025-11-2 21:20
楼主能否再做个范文格式采集工具,然后把参数传递给自动排版工具。
推荐
ouzhzh0 发表于 2025-11-3 08:55
本帖最后由 ouzhzh0 于 2025-11-3 09:10 编辑

试验了一下,不能自己调,这是一大弱点,虽然可以用记事本打开,自己编辑,但是不方便。  界面应该弄成直观的。有些文章排版会复杂些,这个不能满足要求。
推荐
r1k2r3k4 发表于 2025-11-2 21:16
针对于数据量大,屎山样式的文档,如果使用vba通过读取来操作,有时会卡的无响应。
如果楼主可以优化为对xml文件直接解析处理,相信功能会更强大
沙发
大器晚成0125 发表于 2025-11-2 18:47
谢谢分享666
3#
3423542xzq 发表于 2025-11-2 18:53
感谢楼主分享,非常需要的
4#
qqyyh 发表于 2025-11-2 19:02
谢谢分享,来使用看看。
5#
zoe6699 发表于 2025-11-2 19:28
能不能改成公文格式的自动排版的啊
6#
wi_xue2008 发表于 2025-11-2 19:29
有多个文档的话,拖动就进行统一格式排版了是吧,效率高了,
谢谢分享!
7#
czxbzw 发表于 2025-11-2 20:09
能否做个图形界面,各项目内容可以自定义
8#
 楼主| pythonfun 发表于 2025-11-2 20:11 |楼主
czxbzw 发表于 2025-11-2 20:09
能否做个图形界面,各项目内容可以自定义

这是个vbs程序,没有复杂的界面。要定义去修改一下里面的代码,有注释的。
9#
temp2005 发表于 2025-11-2 20:12
有了这个,方便多了
10#
Fll136884 发表于 2025-11-2 20:13
谢谢分享,效率提高
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-6-13 04:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表