如何使用Google Sheets(v4)API修改取决于特定单元格的特定数据行?

时间:2019-08-31 05:29:22

标签: google-sheets google-sheets-api

我想找到一种方法,可以根据我提供的条件使用Google API修改特定的数据行。类似于SQL的

UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1

我曾尝试使用batchUpdateByDataFilter,但似乎无法使其正常工作。我刚刚意识到Google的查询语言,但这没有更新。

我下面有一个测试电子表格。我希望能够根据ID更新特定的列。

https://docs.google.com/spreadsheets/d/1keCaROqv4ytDaf5AhcMV13Jj3N_eZCpLfRAGt2ycwA8/edit?usp=sharing

例如在SQL中,如下所示

UPDATE SET Collected = 'Yes' WHERE ID = 1

谢谢

1 个答案:

答案 0 :(得分:0)

  • 您要从外部修改电子表格的值。
  • 您要使用SQL这样的查询来修改值。
  • 您要从外部修改值。

如果我的理解正确,那么这个答案如何?

问题:

不幸的是,在当前阶段,不能使用查询语言更新电子表格的值。您可以在here上查看查询语言的文档。 TheMaster's comment已经提到了这一点。

所以我想提出2个解决方法。

解决方法1:

在这种解决方法中,我想建议使用Sheets API。通过your latest question,我可以确认您已经能够使用Sheets API放置和获取值。那么下面的流程呢?

  1. 使用sheets.values.get方法从电子表格中检索值。
    • 在共享的电子表格中,从“ Sheet1”中检索值。
  2. 使用脚本修改检索到的值。
    • 在这种情况下,脚本是您要使用的语言。
  3. 使用sheets.values.update方法将修改后的值放入“ Sheet1”表中。

解决方法2:

在这种解决方法中,我想建议使用由Google Apps脚本创建的Web Apps。通过使用Web应用程序(如API)来修改Spreadsheet的值。

作为示例情况,我使用Web Apps实现以下查询。

UPDATE SET Collected = 'Yes' WHERE ID = 1

您共享的电子表格用作示例电子表格。在这种情况下,对于工作表“ Sheet1”,当列“ A”(ID)的值为1时,列“ L”(收集)的值将修改为Yes。 / p>

用法:

  1. 请打开要使用的电子表格的脚本编辑器。并将以下脚本复制并粘贴到脚本编辑器中。

    function doGet(e) {
      var p = e.parameter;
      var sheetName = "Sheet1";
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
      var range = sheet.getDataRange();
      var values = range.getValues();
      var headers = values.splice(0, 1)[0];
      var checkCol = headers.indexOf(p.checkKey);
      var modifyCol = headers.indexOf(p.modifyKey);
      values.forEach(function(e, i) {
        if (e[checkCol] == p.checkValue) {
          values[i][modifyCol] = p.modifyValue;
        }
      });
      values.unshift(headers);
      range.setValues(values);
      return ContentService.createTextOutput("Done");
    }
    
  2. 请部署Web Apps。

    1. 在脚本编辑器上,通过“发布”->“作为Web应用程序部署”打开一个对话框。
    2. 为“执行应用程序为:”选择“用户正在访问网络应用程序” “我”
    3. 为“谁有权访问该应用程序:”选择“任何人,甚至是匿名的” 。这是一个测试案例。
      • 如果使用Only myself,则只有您可以访问Web Apps。那时,请使用您的访问令牌。
    4. 单击“部署”按钮作为新的“项目版本”。
    5. 自动打开“需要授权”对话框。
      1. 点击“查看权限”。
      2. 选择自己的帐户。
      3. 在“此应用未验证”中单击“高级”。
      4. 点击“转到###项目名称###(不安全)”
      5. 单击“允许”按钮。
    6. 复制“当前Web应用程序URL:”。
      • 就像https://script.google.com/macros/s/#####/exec
    7. 单击“确定”。
  3. 请使用以下curl示例向Web Apps请求。当时,请使用复制的Web应用程序URL。每个值都设置为查询参数。

    curl -L "https://script.google.com/macros/s/###/exec?checkKey=ID&checkValue=1&modifyKey=Collected&modifyValue=Yes"
    
    • 或者,如果您想使用访问令牌,请在下面使用。

      curl -L "https://script.google.com/macros/s/###/exec?checkKey=ID&checkValue=1&modifyKey=Collected&modifyValue=Yes&access_token=###"
      

通过curl命令上方的“ Sheet1”工作表,当“ A”列(ID)的值为1时,“ L”列(收集)的值修改为{{1 }}。

注意:

  1. 修改Web应用程序的脚本后,请重新部署Web应用程序为新版本。这样,最新脚本将反映到Web Apps。如果即使修改了脚本也没有重新部署Web Apps,则不会使用最新的脚本。请注意这一点。

参考:

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