使用API和cURL调用Google应用程序脚本函数

使用API和cURL调用Google应用程序脚本函数,curl,google-apps-script,Curl,Google Apps Script,如果这个问题太简单,我很抱歉,但我是一个使用cURL的新手。我在谷歌应用程序脚本中创建了一个函数,用于合并来自两个谷歌文档的文本。其功能是: function mergeGoogleDocs(doc1, doc2) { var BaseDoc = DocumentApp.openById(doc1); var body = BaseDoc.getActiveSection(); var otherBody = DocumentApp.openById(doc2).getActiveSecti

如果这个问题太简单,我很抱歉,但我是一个使用cURL的新手。我在谷歌应用程序脚本中创建了一个函数,用于合并来自两个谷歌文档的文本。其功能是:

function mergeGoogleDocs(doc1, doc2) {

var BaseDoc = DocumentApp.openById(doc1);
var body = BaseDoc.getActiveSection();

var otherBody = DocumentApp.openById(doc2).getActiveSection();
var totalElements = otherBody.getNumChildren();
for( var j = 0; j < totalElements; ++j ) {
var element = otherBody.getChild(j).copy();
var type = element.getType();
if( type == DocumentApp.ElementType.PARAGRAPH )
  { 
  body.appendParagraph(element); 
  }
else if( type == DocumentApp.ElementType.TABLE )
{
body.appendTable(element);
}
else if( type == DocumentApp.ElementType.LIST_ITEM )
{
body.appendListItem(element);
}
else
{
throw new Error("Error de Formato: "+type);
}
}

}
我需要将两个
文档ID
作为参数,因此基于上一篇文章中的信息,我创建了以下序列:

curl -X POST -L \
-H 'Authorization: Bearer ##access token##' \
-H "Content-Type: application/json" \
-d '{"function": "##function name##", "parameters": {"doc1":"##docID1##,"doc2":"##docID2##"}, devMode: true}' \ 
"https://script.googleapis.com/v1/scripts/### script ID ###:run"
但是,当我运行序列时,会收到以下错误消息:

{
  "done": true,
  "error": {
    "code": 3,
    "message": "ScriptError",
    "details": [
      {
        "@type": "type.googleapis.com/google.apps.script.v1.ExecutionError",
        "scriptStackTraceElements": [
          {
            "function": "##function name##",
            "lineNumber": 3
          }
        ],
        "errorMessage": "Exception: Document is missing (perhaps it was deleted, or you don't have read access?)",
        "errorType": "ScriptError"
      }
    ]
  }
}
有人能帮我把程序脚本的工作顺序正确吗

多谢各位


沃迪亚姆

我相信你的目标和你目前的状况如下

  • 您希望将
    ##docID1###
    #docID2##
    的值赋予Google应用程序脚本项目中的
    合并Google文档(doc1,doc2)
    功能
  • 您希望使用CURL命令运行该函数
  • 在您的情况下,在Google Apps脚本API中使用“scripts.run”方法的准备工作已经完成
  • 你的谷歌应用程序脚本运行良好
修改点:
  • 为了给函数mergeGoogleDocs(doc1,doc2){提供两个参数,请给
    #docID1##
    #docID2###
    参数数组提供
    的值,如
    “parameters”:[“#docID1#”、“#docID2”
    。在这种情况下,当使用
    “参数”:[“##docID1###”、“##docID2##”]
    时,数组的每个元素都对应于Google应用程序脚本中函数的每个参数
  • 例如,如果要将
    ##docID1###
    ##docID2##
    的值作为
    合并谷歌文档(doc1,doc2)
    的参数提供给函数,请将值设置为
    “参数”:[“#docID1#”、“#docID2”
  • 顺便说一下,在第二个curl命令中,当使用
    {“doc1”:“#######,doc2”:“###docID2#############
    时,
当上述点反映到curl命令时,它将变成如下所示

修改的curl命令: 注:
  • 当您想使用
    {“doc1”:“##docID1###”、“doc2”:“##docID2###”}
    作为arcuments时,您还可以使用以下curl命令

      curl -X POST \
      -H 'Authorization: Bearer ### access token ###' \
      -H "Content-Type: application/json" \
      -d '{"function": "##function name##", "parameters": [{"doc1":"##docID1##","doc2":"##docID2##"}], devMode: true}' \
      "https://script.googleapis.com/v1/scripts/### script ID ###:run"
    
    • 在这种情况下,请在Google Apps脚本端修改您的脚本,如下所示

      •   function mergeGoogleDocs(doc1, doc2) {
        
      •   function mergeGoogleDocs({doc1, doc2}) {
        
  • 当参数只有一个时,似乎可以使用
    “参数”:“值”
    。即,我确认
    “参数”:“值”
    的结果与
    “参数”:[“值”]
    的结果相同

参考:

首先,我深表歉意,我的回答对您的情况没有帮助。我想问你一个问题。不幸的是,从
我不知道它是否会起作用
,我无法理解您当前的问题。我为我糟糕的英语水平道歉。我可以问一下您当前问题的细节吗?我正在Xojo中开发一个web应用程序,我使用libcURL与Google Drive进行通信。我有一个文件夹(“模板”),里面有几个我用作模板的谷歌文档。根据用户的选择,我需要合并其中两个文档。由于我无法直接从cURL执行此任务,我想在应用程序脚本中使用此函数来组合文档,但我需要使用cURL从Xojo调用此函数,因此我请求帮助。感谢您的回复和添加更多信息。根据你最新的问题,我提出了一个答案。你能确认一下吗?如果这不是你期望的方向,我道歉。非常感谢塔奈克,这正是我需要的。最后,我使用了您的第一个cURL命令(修改的cURL),非常感谢Tanaike,这正是我所需要的。最后,我使用了您的第一个cURL命令(修改的cURL)@Wardiam Welcome。谢谢你让我知道。我很高兴你的问题解决了。如果您的问题已解决,请按“接受”按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为你的问题和解决方案对他们会有帮助。如果你找不到按钮,尽管告诉我。好了,谢谢你,塔奈克
  function mergeGoogleDocs(doc1, doc2) {
  function mergeGoogleDocs({doc1, doc2}) {