插入外部数据
下图和步骤说明了在ONLYOFFICE 文档中如何通过外部链接将一个电子表格的数据插入到另一个电子表格中。
- 用户从源电子表格的文档编辑器中将单元格值复制到剪贴板。连同可见内容,特殊元数据也会被复制。
- 用户将复制的数据粘贴到目标电子表格的文档编辑器中。
- 文档编辑器将元数据发送到文档管理器,请求源文件的链接。
- 文档管理器将源电子表格的链接返回给文档编辑器。
- 文档编辑器向文档编辑服务发送下载请求。
- 文档编辑服务从文档存储服务下载源电子表格。
- 文档编辑服务将必要的数据发送回目标电子表格的文档编辑器以供显示。
实际操作方法
-
创建要从中复制数据的源电子表格。
-
在源电子表格的初始化配置中指定
document.referenceData参数:const config = {document: {referenceData: {fileKey: "BCFA2CED",instanceId: "https://example.com",},},};const docEditor = new DocsAPI.DocEditor("placeholder", config); -
当用户从源电子表格复制数据时,剪贴板会接收到以下内容:
- 工作表名称和单元格范围——稍后用于刷新复制的数据;
document.referenceData对象——用于验证是否可以通过外部链接向目标电子表格插入数据;- 文件名——用于在编辑器中显示公式。
-
创建要插入外部数据的目标电子表格。
-
在目标电子表格的初始化配置中指定
onRequestReferenceData事件处理程序。这将启用粘贴链接和更新值按钮:const config = {events: {onRequestReferenceData,},};const docEditor = new DocsAPI.DocEditor("placeholder", config); -
如果剪贴板包含步骤3中的源电子表格元数据,并且目标电子表格配置包含
onRequestReferenceData处理程序,则粘贴链接按钮将出现在粘贴对话框中。
-
当用户点击粘贴链接时,公式将插入到当前单元格中,并且
referenceData对象将保存到目标文件中。公式格式如下:='[fileName]sheetName'!cell参数 类型 示例 描述 cell string E5 从中复制数据的单元格。 fileName string new.xlsx 从中复制数据的文件名。 sheetName string Sheet1 从中复制数据的工作表名称。 数据更新请求将发送到源文件URL。
备注您也可以手动输入此格式的公式——外部数据将以相同方式插入。但在这种情况下,
onRequestReferenceData事件仅使用path参数触发。 -
当用户点击数据选项卡中外部链接对话框的更新值按钮以刷新源文件数据时,
onRequestReferenceData事件将触发。data参数包含一个对象,其中包含来自源文件的唯一文件数据、文件路径或名称以及文件URL。备注要将数据发送到
setReferenceData方法,请首先通过referenceData搜索文件。如果该字段不存在或找不到文件,则回退到path或link参数。function onRequestReferenceData(event) {const link = event.data.link;const referenceData = event.data.referenceData;const path = event.data.path;}
-
要刷新数据,请调用
setReferenceData方法。调用时必须包含token以验证参数。备注此方法仅在用户对源文件具有权限时执行。
docEditor.setReferenceData({fileType: "xlsx",key: "Khirz6zTPdfd7",path: "sample.xlsx",referenceData: {fileKey: "BCFA2CED",instanceId: "https://example.com",},token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmaWxlVHlwZSI6Inhsc3giLCJwYXRoIjoic2FtcGxlLnhsc3giLCJyZWZlcmVuY2VEYXRhIjp7ImZpbGVLZXkiOiJCQ0ZBMkNFRCIsImluc3RhbmNlSWQiOiJodHRwczovL2V4YW1wbGUuY29tIn0sInVybCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vdXJsLXRvLWV4YW1wbGUtZG9jdW1lbnQueGxzeCJ9.UXosmM-E_Cu9j9QGSlcj9FEoSu5m-zCS4b6FxO_2k7w",url: "https://example.com/url-to-example-document.xlsx",});其中
example.com是安装了文档管理器和文档存储服务的服务器名称。有关ONLYOFFICE 文档服务客户端-服务器交互的更多信息,请参阅工作原理部分。
使用外部链接
-
在初始化配置中指定
onRequestOpen事件处理程序,以显示打开源按钮。当用户点击打开源打开外部链接时,此事件将触发。data参数包含一个对象,其中包含唯一文件数据、文件路径和新浏览器选项卡名称。要在新选项卡中打开引用的外部文件,请使用源URL和windowName调用window.open。
示例:
function onRequestOpen(event) {const path = event.data.path;const referenceData = event.data.referenceData;const windowName = event.data.windowName;window.open("https://example.com/external-url.docx", windowName);}const config = {events: {onRequestOpen,},};const docEditor = new DocsAPI.DocEditor("placeholder", config);其中
example.com是安装了文档管理器和文档存储服务的服务器名称。有关ONLYOFFICE 文档服务客户端-服务器交互的更多信息,请参阅工作原理部分。 -
在初始化配置中指定
onRequestReferenceSource事件处理程序,以显示更改源按钮。当用户点击更改源更改外部链接时,此事件将触发。如果未声明该事件,更改源按钮将不会显示。data参数包含一个对象,其中包含唯一文件数据和文件路径或名称。点击按钮时,调用setReferenceSource方法来更改外部数据的源。调用时必须包含token以验证参数。备注要将数据发送到
setReferenceSource方法,请首先通过referenceData搜索文件。如果该字段不存在或找不到文件,则回退到path参数。
示例:
function onRequestReferenceSource(event) {const referenceData = event.data.referenceData;const path = event.data.path;docEditor.setReferenceSource({fileType: "xlsx",key: "Khirz6zTPdfd7",path: "sample.xlsx",referenceData: {fileKey: "BCFA2CED",instanceId: "https://example.com",},token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmaWxlVHlwZSI6Inhsc3giLCJwYXRoIjoic2FtcGxlLnhsc3giLCJyZWZlcmVuY2VEYXRhIjp7ImZpbGVLZXkiOiJCQ0ZBMkNFRCIsImluc3RhbmNlSWQiOiJodHRwczovL2V4YW1wbGUuY29tIn0sInVybCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vdXJsLXRvLWV4YW1wbGUtZG9jdW1lbnQueGxzeCJ9.UXosmM-E_Cu9j9QGSlcj9FEoSu5m-zCS4b6FxO_2k7w",url: "https://example.com/url-to-example-document.xlsx",});}const config = {events: {onRequestReferenceSource,},};const docEditor = new DocsAPI.DocEditor("placeholder", config);