Skip to main content

修改书签内容

场景说明

修改书签内容是文档处理中的核心功能,可以实现文档内容的动态填充和更新。

适用场景:

  • 合同模板字段填充
  • 表单数据自动填充
  • 文档内容批量更新
  • 个性化文档生成

相关 API 文档

示例代码

修改书签文本内容(完整参数)

async function modifyBookmarkText() {
// 获取指定书签
const bookmark = await Application.ActiveDocument.Bookmarks.item('bookmarkName');

// 直接使用书签的 setText 方法设置新文本内容
// 参数:content - 书签位置的文本(必填)
const success = await bookmark.setText('新的书签内容');

if (success) {
console.log('书签内容修改成功');
}
}

batchSetText 批量修改书签(推荐)

async function batchSetTextExample() {
// 使用 batchSetText 方法一次性设置多个书签
const result = await Application.ActiveDocument.Bookmarks.batchSetText([
{ key: 1, text: '第一个书签的内容' }, // 通过序号设置
{ key: '甲方', text: 'A公司' }, // 通过名称设置
{ key: '乙方', text: 'B公司' },
{ key: '签订日期', text: '2026-01-28' },
{ key: '合同金额', text: '100,000元' }
]);

console.log('批量设置结果:', result);

// 处理返回结果
if (result.success) {
console.log(`全部成功!共设置了 ${result.successCount} 个书签`);
} else {
console.log(`部分成功:成功 ${result.successCount} 个,失败 ${result.failureCount}`);

// 处理失败的书签
result.details.forEach(item => {
if (!item.success) {
console.error(`书签 ${item.key} 设置失败: ${item.error}`);
}
});
}
}

batchSetText 优势:

  • ✅ 一次性设置多个书签,性能更好
  • ✅ 返回详细的执行结果,便于错误处理
  • ✅ 支持通过名称或序号混合设置
  • ✅ 自动处理不存在的书签,不会中断执行

在书签中追加内容

async function appendToBookmark() {
const bookmark = await Application.ActiveDocument.Bookmarks.item('bookmarkName');
const range = await bookmark.range;

// 在书签末尾追加内容(需要通过 Range 对象操作)
await range.appendText('追加的内容');
console.log('内容追加成功');
}

在书签中插入内容

async function insertIntoBookmark() {
const bookmark = await Application.ActiveDocument.Bookmarks.item('bookmarkName');
const range = await bookmark.range;

// 在书签开头插入内容(offset 为 0)
await range.insertText(0, '插入的前缀内容');
console.log('内容插入成功');
}

为书签添加预设值

async function setBookmarkCandidates() {
// 为书签添加下拉预设值
// **重要:对象的 key 必须是已存在的书签名称**
const success = await Application.ActiveDocument.Bookmarks.setTextCandidates({
'甲方': ['A公司', 'B公司', 'C公司'], // '甲方' 是书签名称
'乙方': ['X公司', 'Y公司', 'Z公司'], // '乙方' 是书签名称
'合同类型': ['采购合同', '销售合同', '服务合同'] // '合同类型' 是书签名称
});

if (success) {
console.log('预设值添加成功');
}
}

注意事项

  • setText() 会替换书签的全部内容
  • appendText()insertText()clear() 等方法需要通过 Range 对象操作
  • appendText() 在书签末尾追加内容
  • insertText() 可以在指定偏移位置插入内容
  • setTextCandidates() 方法:对象的 key 必须是已存在的书签名称,value 是预设值数组
  • 预设值功能需要光标进入书签区域后才能看到下拉按钮