乐于分享
好东西不私藏

办公神器|杂乱内容一键规范排版 WPS 宏编辑

办公神器|杂乱内容一键规范排版 WPS 宏编辑

日常办公中,我们经常从网页、文档、网页资讯里复制文字粘贴到 WPS 文字,总会遇到多余空行、乱码软回车、格式错乱、标题间距过大、表格排版不统一、图片变形等问题。

反复手动调整格式耗时又费力,今天给大家分享一套定制化 WPS JS 宏脚本,一键完成全文档深度排版,适配工程、公文、资料整理等场景,功能全面、设置固定,拿来就能用。

一、宏脚本核心功能介绍

本套宏专为网页抓取内容、资料汇编、工程文档定制,所有格式参数已固化,运行后自动完成以下操作:

清理冗余内容:自动删除超链接、软回车、自动编号、隐形空白字符、连续空行;

全局段落格式:全文所有段落段前 0 磅、段后 0 磅,统一固定行距 23 磅,彻底解决标题下方大片空白、分页错乱问题;

标题排版规则:仅文档第一个大标题居中,其余分级标题(一)(二)等左对齐,标题与正文字号、字体完全统一;

正文排版规则:宋体 14 号、两端对齐、首行缩进 2 字符,符合公文阅读规范;

表格统一排版:自动适配页面横竖版、表格边框完整、单元格居中、五号宋体、固定行距 15 磅;

图片智能优化:自动等比例缩放、页面居中、前后补换行,避免图片挤压变形;

防分页错乱:关闭孤行控制、段前分页、与下段同页等功能,杜绝标题单独留在页面顶部、下方大片留白。

二、完整宏代码(直接复制使用)

javascript

运行

/**

 * WPS JS宏:网页内容一键深度排版(办公定制完整版)

 * 适配:网页复制内容、工程资料、公文汇编

 * 规则:段前段后0磅/行距23磅、仅首标题居中、其余标题靠左、表格图片统一格式

 */

function WebContentFormatter() {

    let doc = ActiveDocument;

    // 1. 清理网页超链接、软回车、自动编号

    console.log(“正在初步清理干扰项…”);

    while (doc.Hyperlinks.Count > 0) {

        doc.Hyperlinks.Item(1).Delete();

    }

    let findCr = doc.Range(0, 0).Find;

    findCr.ClearFormatting();

    findCr.Text = “^l”;

    findCr.Replacement.Text = “^p”;

    findCr.Execute(undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 2);

    doc.Range().ListFormat.RemoveNumbers();

    // 2. 深度清理空行、隐形空白符

    console.log(“正在执行深度空行清理…”);

    for (let i = doc.Paragraphs.Count; i >= 1; i–) {

        let p = doc.Paragraphs.Item(i);

        let range = p.Range;

        let textContent = range.Text.replace(/[\r\n\t\s \u00A0\u200B\uFEFF\u3000]/g, “”); 

        if (textContent === “” && range.InlineShapes.Count === 0 && range.Tables.Count === 0) {

            try { range.Delete(); } catch(e) {}

        }

    }

    // 清除连续空行

    let findDoubleP = doc.Range(0, 0).Find;

    findDoubleP.ClearFormatting();

    findDoubleP.Replacement.Text = “^p”;

    findDoubleP.Text = “^p^p”;

    while (findDoubleP.Execute(undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 2)) {}

    // 3. 表格统一格式化

    console.log(“正在优化表格…”);

    for (let i = 1; i <= doc.Tables.Count; i++) {

        let tbl = doc.Tables.Item(i);

        if (tbl.Columns.Count > 6) {

            tbl.Range.Sections.Item(1).PageSetup.Orientation = wdOrientLandscape;

        } else {

            tbl.Range.Sections.Item(1).PageSetup.Orientation = wdOrientPortrait;

        }

        tbl.AutoFitBehavior(wdAutoFitWindow);

        tbl.Rows.Alignment = wdAlignRowCenter;

        tbl.Spacing = 0; 

        tbl.Borders.Enable = true;

        let tblRange = tbl.Range;

        tblRange.Cells.VerticalAlignment = wdCellAlignVerticalCenter;

        tblRange.Font.Name = “宋体”;

        tblRange.Font.Size = 10.5;

        let tblPF = tblRange.ParagraphFormat;

        tblPF.Alignment = wdAlignParagraphLeft;

        tblPF.SpaceBefore = 0;

        tblPF.SpaceAfter = 0;

        tblPF.SpaceBeforeAuto = false;

        tblPF.SpaceAfterAuto = false;

        tblPF.LineSpacingRule = wdLineSpaceExactly;

        tblPF.LineSpacing = 15; 

        tbl.Rows.Item(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter;

        let tFind = tblRange.Find;

        tFind.ClearFormatting();

        tFind.Replacement.ClearFormatting();

        tFind.MatchWildcards = true;

        tFind.Text = “[  \u00A0]{1,}”;

        tFind.Replacement.Text = “”; 

        tFind.Execute(undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 2);

    }

    // 4. 图片智能排版与缩放

    console.log(“正在优化图片尺寸…”);

    let shapeCount = doc.InlineShapes.Count;

    for (let i = shapeCount; i >= 1; i–) {

        let shape = doc.InlineShapes.Item(i);

        let sectionSetup = shape.Range.Sections.Item(1).PageSetup;

        let availWidth = sectionSetup.PageWidth – sectionSetup.LeftMargin – sectionSetup.RightMargin;

        let availHeight = sectionSetup.PageHeight – sectionSetup.TopMargin – sectionSetup.BottomMargin – 50; 

        let picPara = shape.Range.ParagraphFormat;

        picPara.Alignment = wdAlignParagraphCenter;

        picPara.CharacterUnitFirstLineIndent = 0;

        picPara.LineSpacingRule = wdLineSpaceSingle;

        picPara.SpaceBefore = 0;

        picPara.SpaceAfter = 0;

        picPara.SpaceBeforeAuto = false;

        picPara.SpaceAfterAuto = false;

        shape.LockAspectRatio = -1;

        shape.Width = availWidth * 0.8;

        if (shape.Height > availHeight) {

            shape.Height = availHeight;

        }

        let rng = shape.Range;

        if (rng.End < doc.Range().End && doc.Range(rng.End, rng.End + 1).Text !== “\r”) {

            doc.Range(rng.End, rng.End).InsertAfter(“\n”);

        }

        if (rng.Start > 0 && doc.Range(rng.Start – 1, rng.Start).Text !== “\r”) {

            doc.Range(rng.Start, rng.Start).InsertBefore(“\n”);

        }

    }

    // 5. 正文、标题全局格式设置(核心)

    console.log(“正在排版正文及标题…”);

    for (let i = 1; i <= doc.Paragraphs.Count; i++) {

        let para = doc.Paragraphs.Item(i);

        let range = para.Range;

        if (range.Tables.Count > 0 || range.InlineShapes.Count > 0) continue;

        // 清理序号后多余空格

        let findObj = range.Find;

        findObj.ClearFormatting();

        findObj.MatchWildcards = true;

        findObj.Text = “([0-9一二三四五六七八九十]{1,3}[.、.\)])[ ]{1,}”;

        findObj.Replacement.Text = “\\1”;

        findObj.Execute(undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 2);

        let pf = para.Format;

        // 固定段前段后为0,行距23磅

        pf.SpaceBeforeAuto = false;

        pf.SpaceAfterAuto = false;

        pf.SpaceBefore = 0;

        pf.SpaceAfter = 0;

        pf.LineSpacingRule = wdLineSpaceExactly;

        pf.LineSpacing = 23;

        pf.LeftIndent = 0;

        pf.RightIndent = 0;

        pf.FarEastLineBreakControl = true;

        range.Font.ColorIndex = wdAuto;

        // 关闭分页相关,杜绝空白大间距

        pf.KeepTogether = false;

        pf.KeepWithNext = false;

        pf.PageBreakBefore = false;

        pf.WidowControl = false;

        // 区分大标题、分级标题、正文

        let text = range.Text.trim();

        if (i === 1) {

            // 首个大标题:居中、黑体16号

            range.Font.Name = “黑体”;

            range.Font.Size = 16;

            pf.Alignment = wdAlignParagraphCenter;

            pf.CharacterUnitFirstLineIndent = 0;

        } else if (text.match(/^([一二三四五六七八九十]+)/)) {

            // (一)(二)分级标题:靠左、宋体14号、无缩进

            range.Font.Name = “宋体”;

            range.Font.Size = 14;

            pf.Alignment = wdAlignParagraphLeft;

            pf.CharacterUnitFirstLineIndent = 0;

        } else {

            // 正文:两端对齐、首行缩进2字符

            range.Font.Name = “宋体”;

            range.Font.Size = 14;

            pf.Alignment = wdAlignParagraphJustify;

            pf.CharacterUnitFirstLineIndent = 2;

        }

    }

    // 全局兜底:二次强制统一格式

    console.log(“格式最终校验…”);

    for (let i = 1; i <= doc.Paragraphs.Count; i++) {

        let pf = doc.Paragraphs.Item(i).Format;

        pf.SpaceBeforeAuto = false;

        pf.SpaceAfterAuto = false;

        pf.SpaceBefore = 0;

        pf.SpaceAfter = 0;

        pf.KeepTogether = false;

        pf.KeepWithNext = false;

        pf.PageBreakBefore = false;

        pf.WidowControl = false;

    }

    alert(“排版完成!\n1. 全文段前段后0磅,行距统一23磅\n2. 仅首标题居中,其余标题靠左\n3. 空行、表格、图片全部优化完毕”);

}

三、WPS 宏安装 & 使用步骤(图文式讲解,公众号友好)

第一步:打开 WPS 文字,启用开发工具

打开需要排版的 Word/WPS 文档;

点击顶部菜单栏 开发工具(如未显示,点击「视图」→ 勾选「开发工具」)。

第二步:新建 JS 宏文件

在开发工具栏目中,点击 宏;

在弹出窗口中,点击 新建,文件类型选择 JS 宏;

删除编辑器内默认的空白代码。

第三步:粘贴代码并保存

复制上文完整的宏代码,粘贴到代码编辑窗口;

Ctrl+S 保存,自定义宏名称(例如:网页一键排版),关闭编辑器。

第四步:运行宏完成排版

回到文档界面,再次点击「开发工具」→「宏」;

选中刚才保存的宏名称,点击 运行;

等待几秒,弹出 “排版完成” 提示框即操作结束。

四、常见问题解答

1. 运行后标题下方仍有大片空白?

该问题是分页设置导致,宏已自动关闭相关选项;若仍异常:选中段落 → 右键【段落】→【换行和分页】,取消所有勾选即可。

2. 宏按钮是灰色无法使用?

WPS 默认限制宏功能,需进入 WPS 设置 → 信任中心 → 宏设置,启用所有宏(仅在自用办公设备开启)。

3. 格式参数可以自行修改吗?

可以。代码内可直接修改:字号、行距、缩进、对齐方式、字体等参数,按需微调即可。

五、适用场景总结

✅ 网页复制新闻、资料、科普文案快速排版

✅ 工程资料、公文、汇报材料统一格式

✅ 带表格、图片的混合文档批量规整

✅ 长期固定格式办公,告别重复手动调格式

一套宏搞定全文档排版,大幅提升办公效率,推荐大家收藏使用!