You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script:创建Google Doc时如何设置文档级属性?

问题描述

我正在开发一个Google Apps Script项目,该脚本接收参数并创建新的Google Doc,以POST API形式对外提供服务。我希望将部分请求参数存储在文档级或用户级Property Store中,但根据文档说明,PropertyService.getUserProperties()和PropertyService.getDocumentProperties()仅在用户打开活跃文档时才返回有效对象。请问是否有办法在创建文档的同时设置文档级属性?期望实现的操作类似以下代码:

function doPost(e) {
  var requestData = JSON.parse(e.postData.contents);
  var documentName = requestData.documentName;
  var documentExtId = requestData.documentExtId;
  
  var result = createDoc(documentName, documentExtId);
  return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);
}

function createDoc(documentName, documentExtId) {
  // 创建新的Google Doc
  var doc = DocumentApp.create(documentName);
    
  // 获取创建的文档ID
  var docId = doc.getId();
  
  // 获取文档编辑URL
  var docUrl = 'https://docs.google.com/document/d/' + docId + '/edit';
  
  
  // 我希望能执行类似这样的操作....
  PropertiesService.getDocumentProperties().setProperty("documentExtId", documentExtId);
  
  // 返回URL
  return {
    url: docUrl
  };
}
解决方案

你当前的代码无法实现需求,因为PropertiesService.getDocumentProperties()获取的是当前运行脚本所在项目的文档属性(你的Web App是独立脚本项目,不是绑定到新创建Doc的脚本),而非新创建的Google Doc的文档级属性。以下是两种可行的实现方式:

方法1:使用Drive API的文件自定义属性

这是最直接的方案,Drive API允许给任何Drive文件添加自定义键值对属性,无需依赖文档绑定脚本。

步骤:

  1. 在你的Apps Script项目中,启用Drive API:点击编辑器菜单「资源」>「高级Google服务」,找到Drive API并开启。
  2. 修改createDoc函数,添加设置自定义属性的代码:
function createDoc(documentName, documentExtId) {
  // 创建新的Google Doc
  var doc = DocumentApp.create(documentName);
  var docId = doc.getId();
  var docUrl = 'https://docs.google.com/document/d/' + docId + '/edit';

  // 使用Drive API设置文件自定义属性
  Drive.Files.patch(
    { properties: { documentExtId: documentExtId } },
    docId,
    { fields: 'properties' }
  );

  return { url: docUrl };
}

读取属性的方式:

如果后续需要读取该属性,可以通过Drive API获取:

function getDocumentExtId(docId) {
  var file = Drive.Files.get(docId, { fields: 'properties' });
  return file.properties ? file.properties.documentExtId : null;
}

方法2:使用绑定脚本的文档级PropertyService

如果必须使用PropertyService.getDocumentProperties(),需要先创建一个绑定了脚本的模板文档,然后通过复制模板来创建新文档,再触发绑定脚本设置属性。

步骤:

  1. 创建一个空白Google Doc,打开其脚本编辑器,添加以下代码:
// 绑定到模板文档的脚本,用于设置文档属性
function setDocumentProperty(key, value) {
  PropertiesService.getDocumentProperties().setProperty(key, value);
}

// 可选:读取属性的函数
function getDocumentProperty(key) {
  return PropertiesService.getDocumentProperties().getProperty(key);
}
  1. 保存模板文档,记录其文档ID(templateDocId)。
  2. 修改你的Web App中的createDoc函数,复制模板并调用绑定脚本的函数:
function createDoc(documentName, documentExtId) {
  var templateDocId = "你的模板文档ID";
  // 复制模板文档
  var copiedDoc = DriveApp.getFileById(templateDocId).makeCopy(documentName);
  var docId = copiedDoc.getId();
  var docUrl = 'https://docs.google.com/document/d/' + docId + '/edit';

  // 使用Apps Script API调用绑定脚本的函数设置属性
  var scriptId = "绑定到模板文档的脚本项目ID"; // 可在脚本编辑器「文件」>「项目属性」中查看
  UrlFetchApp.fetch(`https://script.googleapis.com/v1/scripts/${scriptId}:run`, {
    method: "post",
    contentType: "application/json",
    headers: { Authorization: `Bearer ${ScriptApp.getOAuthToken()}` },
    payload: JSON.stringify({
      function: "setDocumentProperty",
      parameters: ["documentExtId", documentExtId],
      devMode: true // 开发模式下使用最新代码,上线后可关闭
    })
  });

  return { url: docUrl };
}

注意:此方法需要你的Web App拥有调用Apps Script API的权限,并且需要在Google Cloud Console中启用Apps Script API。


内容的提问来源于stack exchange,提问作者sameer khalid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:54:52