首页 > 解决方案 > 如何找到具有某些值的单元格的位置

问题描述

我需要在我的电子表格中找到包含一些数据的行并将其删除。我所知道的是行中单元格内的 id。

如何使用 google REST API 搜索单元格的位置

例如:

GET https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values:find?value=123456

response:
 sheet1! B2:B2

另外: 我还想支持从一张纸到另一张纸的剪切和粘贴。所以将元数据放在行上是行不通的,因为在将单元格从行复制到另一行时它会丢失。(没有 REST API 可以将维度(行||列)从一张纸剪切并粘贴到另一张纸上。

如果有一种方法可以在工作表之间复制和粘贴尺寸,我可以简单地使用


POST https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values:batchGetByDataFilter

{
  "dataFilters": [
    {
      object (DataFilter)
    }
  ],
  "majorDimension": enum (Dimension),
  "valueRenderOption": enum (ValueRenderOption),
  "dateTimeRenderOption": enum (DateTimeRenderOption)
}

找到该行并将其删除。

标签: restgoogle-apps-scriptgoogle-sheetsgoogle-sheets-api

解决方案


  • 您想通过使用 Sheets API 搜索值来检索行号。
  • 您想通过使用 Sheets API 搜索值来删除行。

如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

问题和解决方法:

不幸的是,在当前阶段,无法通过 Sheets API 搜索值直接检索行号。此外,无法通过使用 Sheets API 搜索值来删除行。我不确定这些是否会在未来的更新中添加。那么在当前的变通方法中,以下变通方法怎么样?

解决方法 1:

此解决方法的流程如下。

  1. 使用 Sheets API 中的“spreadsheets.get”方法检索所有工作表名称和工作表 ID。
  2. 使用“spreadsheets.values.batchGet”Sheets API 的方法从电子表格中的工作表中检索所有值。
  3. 使用值从检索到的值中搜索工作表名称和行号。
    • 在这种情况下,需要准备一个脚本。
  4. 使用 Sheets API 中的“spreadsheets.batchUpdate”方法删除行。

通过这个流程,您的目标可以实现。

解决方法 2:

在此解决方法中,由 Google Apps 脚本创建的 Web 应用程序用作 API。

1. 新建 Google Apps Script 项目。

Web Apps 的示例脚本是 Google Apps 脚本。所以请创建一个 Google Apps Script 项目。

如果要直接创建,请访问https://script.new/。在这种情况下,如果您没有登录 Google,则会打开登录屏幕。所以请登录谷歌。至此,Google Apps Script 的脚本编辑器被打开。

2. 准备脚本。

请将以下脚本复制并粘贴到脚本编辑器中。此脚本适用于 Web 应用程序。在此脚本中,使用了 Sheets API。因此,请在高级 Google 服务中启用 Sheets API。

function doGet(e) {
  var findText = e.parameter.value;
  var spreadsheetId = e.parameter.spreadsheetId;
  var deleteRows = e.parameter.deleteRows && e.parameter.deleteRows.toLowerCase() === "true";
  var ss = SpreadsheetApp.openById(spreadsheetId);
  var ranges = ss.createTextFinder(findText).findAll();
  if (deleteRows === true) {
    var requests = ranges.reverse().map(r => ({deleteDimension:{range:{dimension:"ROWS",sheetId:r.getSheet().getSheetId(),startIndex:r.getRow() - 1,endIndex:r.getRow()}}}));
    Sheets.Spreadsheets.batchUpdate({requests: requests}, spreadsheetId);
  }
  var res = ranges.map(r => ({range: `'${r.getSheet().getSheetName()}'!${r.getA1Notation()}`, sheetId: r.getSheet().getSheetId()}));
  return ContentService.createTextOutput(JSON.stringify(res));
}
  • 在这种情况下,使用 GET 方法。当您想通过提供大数据来运行该功能时,您可以使用doPost()代替doGet().

3. 部署 Web 应用程序。

  1. 在脚本编辑器上,通过“发布”->“部署为 Web 应用程序”打开一个对话框。
  2. “将应用程序执行为:”选择“我” 。
    • 这样,脚本作为所有者运行。
    • 此处,当设置“任何人”时,脚本将作为每个用户运行。在这种情况下,需要将脚本共享给每个用户。并且需要使用访问令牌。请注意这一点。
  3. “谁有权访问应用程序:”选择“任何人,甚至匿名” 。
    • 在这种情况下,不需要请求访问令牌。我认为作为测试用例,我推荐这个设置。
    • 当然,您也可以使用访问令牌。届时,请将此设置为“任何人”
  4. 单击“部署”按钮作为新的“项目版本”。
  5. 自动打开“需要授权”对话框。
    1. 单击“查看权限”。
    2. 选择自己的帐户。
    3. 在“此应用未验证”中单击“高级”。
    4. 点击“转到###项目名称###(不安全)”
    5. 单击“允许”按钮。
  6. 单击“确定”。
  7. 复制 Web 应用程序的 URL。就像https://script.google.com/macros/s/###/exec
    • 当您修改 Google Apps 脚本时,请重新部署为新版本。这样,修改后的脚本就会反映到 Web 应用程序中。请注意这一点。

3. 使用 Web Apps 运行该功能。

这是使用 Web 应用程序的示例 curl 命令。请设置您的 Web Apps URL、电子表格 ID 和搜索值。

curl -GL \
  -d "spreadsheetId=###" \
  -d "value=sample" \
  "https://script.google.com/macros/s/###/exec"
  • 何时spreadsheetId=###value=sample用作 处的查询参数doGet(e)。例如,您可以spreadsheetId使用e.parameter.spreadsheetId.
  • 在上面的 Web Apps 脚本中,当运行此 curl 命令时,[{"range":"'Sheet1'!A1","sheetId":0},{"range":"'Sheet2'!B2","sheetId":###}]会返回 like 的值。这是通过搜索 的值的结果sample

    • 作为示例,从电子表格中的所有工作表中搜索该值。关于这一点,您可以根据自己的实际情况修改脚本。
  • 如果deleteRows=true像下面这样使用,则从电子表格中的所有工作表中搜索该值,并删除搜索到的行。

    curl -GL \
      -d "spreadsheetId=###" \
      -d "value=sample" \
      -d "deleteRows=true" \
      "https://script.google.com/macros/s/###/exec"
    

笔记:

  • 此示例脚本与 V8 一起使用。

参考:

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


推荐阅读