跳到主要内容

拷贝粘贴

场景说明

在文档中进行内容的复制粘贴操作,支持两种实现方式:

WebClipboard 方式

通过剪贴板 API 进行复制粘贴,通过属性赋值操作 WebClipboard.CopyWebClipboard.Paste,直接复制粘贴文档内容。

Content 方式

使用 getContent/setContent 方法,可以获取到 JSON 格式的内容数据并进行存储,适用于需要持久化保存文档格式的场景。

相关 API 文档

示例代码

WebClipboard 方式 - 通过剪贴板复制

async function copyViaClipboard() {
// 从源文档获取书签内容
const sourceBookmark = await app1.ActiveDocument.Bookmarks.item('sourceBookmark');
const sourceRange = await sourceBookmark.range;

// 复制到剪贴板:将 Range 对象赋值给 Copy 属性
app1.ActiveDocument.WebClipboard.Copy = sourceRange;
console.log('内容已复制到剪贴板');

// 从剪贴板粘贴到目标文档
const targetBookmark = await app2.ActiveDocument.Bookmarks.item('targetBookmark');
const targetRange = await targetBookmark.range;

// 粘贴:将目标 Range 对象赋值给 Paste 属性
app2.ActiveDocument.WebClipboard.Paste = targetRange;
console.log('内容已从剪贴板粘贴');
}

Content 方式 - 获取 JSON 数据并存储

// 假设已经初始化了两个文档应用
let app1; // 源文档
let app2; // 目标文档

async function copyBetweenDocuments() {
// 从源文档获取书签内容(包含格式)
const bookmark1 = await app1.ActiveDocument.Bookmarks.item('sourceBookmark');
const content = await bookmark1.getContent();

// 设置到目标文档的书签位置
const bookmark2 = await app2.ActiveDocument.Bookmarks.item('targetBookmark');
const success = await bookmark2.setContent(content.data);

if (success) {
console.log('复制成功(保留格式)');
}
}

两种方式的主要区别在于:Content 方式可以获取到 JSON 格式的内容数据并进行存储

特性WebClipboard 方式Content 方式
操作方式属性赋值(Copy/Paste)方法调用(getContent/setContent)
数据格式剪贴板数据JSON 对象
数据存储依赖浏览器剪贴板可存储到数据库/文件
适用场景直接复制粘贴文档内容需要持久化保存文档格式

注意事项

WebClipboard 方式

  • 通过剪贴板 API 进行复制粘贴操作
  • WebClipboard 是 Application.ActiveDocument 下的属性
  • Application.ActiveDocument.WebClipboard.Copy = range 将 Range 复制到剪贴板(属性赋值)
  • Application.ActiveDocument.WebClipboard.Paste = range 将剪贴板内容粘贴到指定 Range(属性赋值)
  • 依赖浏览器剪贴板权限
  • 某些浏览器可能限制剪贴板访问

Content 方式

  • 使用 getContent()setContent() 方法进行内容复制
  • getContent() 获取书签的完整内容对象(JSON 格式)
  • setContent(content.data) 设置书签内容
  • 返回的内容对象包含格式、样式等完整信息
  • 核心优势:可以将获取的 JSON 数据存储到数据库或文件系统

通用说明

  • 粘贴操作会替换目标 Range 的内容
  • 根据实际需求选择合适的方式