WPS文档中自动编号所有图表标题,避免手动查找图表刷新样式,适用与标书、学位论文图表格式快速整理。
使用多级列表+宏
找到文档中所有图表,并依据章节编号为图标标题自动编号,以“图1-X图标题”、“表1-X表标题”为例。
- 设置样式和多级列表 :右键->项目符号和编号->多级编号->1.、1.1、1.1.1形式,点击“自定义”按钮->在弹出菜单中按下图设置,注意在“将级别链接到样式”选项中分别将图标题连接到标题4,表标题链接到标题5:
- 运行宏 :以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生成,已测可用