Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何使用Sheets API在最后一列之后插入列?_Google Apps Script_Google Sheets_Google Sheets Api - Fatal编程技术网

Google apps script 如何使用Sheets API在最后一列之后插入列?

Google apps script 如何使用Sheets API在最后一列之后插入列?,google-apps-script,google-sheets,google-sheets-api,Google Apps Script,Google Sheets,Google Sheets Api,我有一张带有一张桌子的spreasheet: 调用此:POST'https://sheets.googleapis.com/v4/spreadsheets/{my_id}/values/Sheet1!E1:append?valueInputOption=用户\使用POST方法和以下标题输入“: Authorization: Bearer {valid_auth_token} Accept: application/json Content-Type: application/json 本机构

我有一张带有一张桌子的spreasheet:

调用此:
POST'https://sheets.googleapis.com/v4/spreadsheets/{my_id}/values/Sheet1!E1:append?valueInputOption=用户\使用POST方法和以下标题输入“

Authorization: Bearer {valid_auth_token}
Accept: application/json
Content-Type: application/json
本机构:

{
    "majorDimension": "COLUMNS",
    "values": [
        ["Header", "Hello"]
    ]
}
将添加
标题,Hello
作为
E
中的一列。我的问题是:如何在不指定新范围的情况下在最后一列之后追加新列(本例中为E1)?有什么办法吗

通过此呼叫:
https://sheets.googleapis.com/v4/spreadsheets/{my_id}
我可以获取图纸名称,但无法获取范围,我如何知道范围?

  • 您希望将
    Header
    Hello
    的值放入电子表格最后一列的下一列,而不直接给出范围
  • 您希望使用Sheets API实现这一点
  • 您已经能够使用Sheets API获取和输入Google电子表格的值
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

问题和解决方法: 不幸的是,在当前阶段,Sheets API中没有直接检索数据范围的方法。虽然有spreadsheets.values.append方法和spreadsheets.batchUpdate方法的AppendCellsRequest,但这些方法可用于将值放入工作表最后一行的下一行。这不是专栏。同样在这种情况下,无法检索数据范围。因此,为了实现上述目标,我想提出以下解决方法

在此解决方案中,Web应用程序用作包装器。客户端访问Web应用程序,Web应用程序检索数据范围并将值放入电子表格上最后一列的下一列。在这种情况下,访问Web应用程序时不需要设置范围

用法: 此解决方法的用法如下所示

1.创建谷歌应用程序脚本的新项目。 Web应用程序的示例脚本是Google应用程序脚本。因此,请创建一个谷歌应用程序脚本项目

如果要直接创建,请访问。在这种情况下,如果您没有登录Google,则会打开登录屏幕。所以请登录谷歌。这样,谷歌应用程序脚本的脚本编辑器就打开了

2.复制并粘贴脚本。 请复制并粘贴以下脚本

function doPost(e) {
  var obj = JSON.parse(e.postData.contents);
  var sheet = SpreadsheetApp.openById(obj.spreadsheetId).getSheetByName(obj.sheetName);
  var values = obj.values;
  sheet.getRange(1, sheet.getLastColumn() + 1, values.length, values[0].length).setValues(values);
  return ContentService.createTextOutput("ok");
}
  • 此示例脚本将值放入电子表格上最后一列的下一列
3.部署Web应用程序。
  • 在脚本编辑器上,通过“发布”->“部署为web应用”打开对话框
  • 选择“我”以执行应用程序:“”
  • 对于有权访问应用程序的用户:,请选择“仅限我自己”。
    • 当“任何人,甚至匿名”设置为“谁有权访问应用:”时,不需要使用访问令牌
  • 单击“部署”按钮作为新的“项目版本”
  • 自动打开“需要授权”对话框。
  • 单击“查看权限”
  • 选择自己的帐户
  • 单击“此应用未验证”处的“高级”
  • 单击“转到####项目名称###(不安全)”
  • 单击“允许”按钮
  • 单击“确定”
  • 复制Web应用程序的URL。就像
    https://script.google.com/macros/s/###/exec
    • 当您修改Google Apps脚本时,请重新部署为新版本。这样,修改后的脚本将反映到Web应用程序中。请注意这一点。
  • 4.样本卷曲。 为了测试访问Web应用程序的权限,请使用以下curl命令

    curl -L \
      -H "Authorization: Bearer ###" \
      -d '{"spreadsheetId": "###", "sheetName": "Sheet1", "values": [["Header"], ["Hello"]]}' \
      "https://script.google.com/macros/s/###/exec"
    
    • 请设置上面检索到的Web应用的URL、电子表格ID和工作表名称
    • 在这种情况下,范围不需要包含在请求正文中。因为数据范围是在Web应用程序的脚本中检索的
    • 当运行上述curl命令时,将
      “Header”
      “Hello”
      的值置于“Sheet1”工作表上最后一列的下一列
    注:
    • 例如,如果发生授权错误,请将“任何人,甚至匿名”设置为“谁有权访问应用:”。在这种情况下,不需要使用访问令牌
    • 或者,请包括
      https://www.googleapis.com/auth/drive.readonly
      和/或
      https://www.googleapis.com/auth/drive
      访问令牌
    参考资料:

    如果我误解了你的问题,而这不是你想要的方向,我道歉。

    谢谢。你的帖子很有帮助。我是手工输入数据的,所以我想用编程的方式来完成。@assembler谢谢您的回复。我很高兴你的问题解决了。