WPS文档中自动编号所有图表标题

WPS文档中自动编号所有图表标题,避免手动查找图表刷新样式,适用与标书、学位论文图表格式快速整理。

使用多级列表+宏

找到文档中所有图表,并依据章节编号为图标标题自动编号,以“图1-X图标题”、“表1-X表标题”为例。

  1. 设置样式和多级列表 :右键->项目符号和编号->多级编号->1.、1.1、1.1.1形式,点击“自定义”按钮->在弹出菜单中按下图设置,注意在“将级别链接到样式”选项中分别将图标题连接到标题4,表标题链接到标题5:
    在这里插入图片描述
    在这里插入图片描述
  2. 运行宏 :以mac电脑为例,工具->运行宏->WPS宏编辑器,左上角“工程”->“代码”->右键插入模块,分别复制如下代码然后点击上方“运行宏”(△)
    在这里插入图片描述

定位文档中的所有图形,并将图形后的图标题自动编号:

function Main() {
    setStyleAfterImages();
}

function setStyleAfterImages() {
    try {
        var doc = Application.ActiveDocument;
        var shapes = doc.InlineShapes;
        var counter = 0;
        
        for (var i = 1; i <= shapes.Count; i++) {
            var shape = shapes.Item(i);
            if (shape.Type === 3) {
                var imgEnd = shape.Range.End;
                var postRange = doc.Range(imgEnd, imgEnd);
                
                if (postRange.Move(4, 1) === 1) {
                    var targetPara = postRange.Paragraphs.Item(1);
                    if (targetPara.Range.Text.trim().length > 0) {
                        targetPara.Style = "标题 4";
                        counter++;
                        Application.StatusBar = "正在处理第" + counter + "个段落";
                    }
                }
            }
        }
        
        // 在文档末尾插入结果
        var endRange = doc.Range(doc.Content.End - 1, doc.Content.End);
        endRange.InsertAfter("\n[宏通知] 成功设置" + counter + "个图片后段落为标题4样式");
        endRange.Font.Color = 13056; // 蓝色文字
        
        Application.StatusBar = "任务完成"; // 清空状态栏
        
    } catch (e) {
        // 错误信息插入文档开头
        var errRange = doc.Range(0, 0);
        errRange.InsertBefore("[宏错误] " + e.message + "\n");
        errRange.Font.Color = 255; // 红色文字
    }
}

定位文档中的所有表格,并将表格前的表标题自动编号:

function SetTableHeading() {
    const doc = ActiveDocument;
    const tables = doc.Tables;
    const targetStyle = "标题 5"; 

    function debugLog(message) {
        doc.Content.InsertAfter(`[DEBUG] ${message}\n`);
    }

    try {
        // 验证样式对象
        const style = doc.Styles.Item("标题 5");
        
        // 逆向处理表格的增强逻辑
        for (let i = tables.Count; i >= 1; i--) {
            let tableProcessed = false;
            try {
                const table = tables.Item(i);
                debugLog(`\n处理表格#${i} 起始位置:${table.Range.Start}`);

                // 方法1:精确段落搜索
                let searchRange = table.Range.Duplicate;
                searchRange.Collapse(wdCollapseStart); // 折叠到表格起始点
                searchRange.MoveStart(wdCharacter, -1); // 前移一个字符

                // 搜索最近的段落
                let prevPara = null;
                while (searchRange.MoveStart(wdCharacter, -1) !== 0) {
                    if (searchRange.Paragraphs.Count > 0) {
                        prevPara = searchRange.Paragraphs.Item(1);
                        const paraText = prevPara.Range.Text.trim();
                        
                        debugLog(`扫描位置:${searchRange.Start} 内容:"${paraText.substr(0,15)}..."`);
                        
                        if (paraText !== "") {
                            debugLog("✅ 找到有效段落");
                            break;
                        }
                    }
                }

                // 方法2:备用定位方案
                if (!prevPara) {
                    debugLog("尝试备用定位方案");
                    prevPara = table.Range.Previous(wdParagraph).Paragraphs.Item(1);
                }

                if (prevPara && prevPara.Range.Text.trim() !== "") {
                    debugLog("应用样式前检查:");
                    debugLog(`原样式: ${prevPara.Style.NameLocal}`);
                    debugLog(`段落内容: ${prevPara.Range.Text.substr(0,20)}...`);
                    
                    // 强制解除锁定
                    prevPara.Range.Locked = false;
                    
                    // 应用样式
                    prevPara.Style = style;
                    
                    // 验证应用结果
                    debugLog(`新样式: ${prevPara.Style.NameLocal}`);
                    if (prevPara.Style.NameLocal !== "标题 5") {
                        debugLog("⚠️ 样式未生效!");
                    }
                    tableProcessed = true;
                }

            } catch (e) {
                debugLog(`处理异常: ${e.message}`);
            } finally {
                debugLog(tableProcessed ? "处理成功" : "未找到有效段落");
            }
        }

    } catch (globalError) {
        debugLog(`全局错误: ${globalError.message}`);
    }
}

上述代码由WPS灵犀ai生成,已测可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值