繁体   English   中英

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

[英]How can I use the Google Sheets (v4) API to modify a specific row of data dependent on a specific cell?

我想找到一种使用 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
  • 您想从外部修改电子表格的值。
  • 您想使用 SQL 之类的查询修改值。
  • 您想从外部修改值。

如果我的理解是正确的,这个答案怎么样?

问题:

不幸的是,在当前阶段,Spreadsheet 的值无法使用查询语言更新。 您可以在此处查看查询语言的文档。 TheMaster的评论已经提到了这一点

所以我想提出两种解决方法。

解决方法 1:

在这个解决方法中,我想建议使用 Sheets API。 根据您的最新问题,我可以确认您已经能够使用 Sheets API 放置和获取值。 那么下面的流程呢?

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

解决方法 2:

在这个解决方法中,我想建议使用由 Google Apps Script 创建的 Web Apps。 电子表格的值通过使用 Web 应用程序(如 API)进行修改。

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

UPDATE SET Collected = 'Yes' WHERE ID = 1

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

用法:

  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 应用程序。

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

笔记:

  1. 当您修改 Web Apps 的脚本时,请将 Web Apps 重新部署为新版本。 这样,最新的脚本就会反映到 Web Apps 中。 如果即使修改了脚本也不重新部署 Web Apps,则不会使用最新的脚本。 请注意这一点。

参考:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM