带有php的Google Sheets API-查找单元格值

StripyTiger:

我正在将Google Sheets API与PHP结合使用并阅读表格,我需要查找一行并更新其内容。

我目前正在遍历各行,寻找值,但是随着工作表的增长,这似乎效率很低。有没有一种方法可以搜索单元格,以检索行,以便随后进行更新?

我要迭代的代码如下。

        $spreadsheet = (new Google\Spreadsheet\SpreadsheetService)
           ->getSpreadsheetFeed()
           ->getById("xxx sheet id xxx");

        $worksheets = $spreadsheet->getWorksheetFeed()->getEntries();
        $worksheet = $worksheets[0];

        $CellFeed = $worksheet->getCellFeed();

        foreach ($CellFeed->getEntries() as $E)
        {
            $r = $E->getRow();
            /* ...... */
        }
Tanaike :

我相信您的目标如下。

  • 您要从电子表格中的特定列中搜索值,并要检索搜索到的行的行号。
  • 您想使用PHP来实现。

问题和解决方法:

不幸的是,在那种情况下,当使用Sheets API时,在当前阶段,需要执行以下流程。

  1. 从您要搜索的工作表中检索所有值。
  2. 从检索到的值中检索行号和列号。

这可能与您当前的脚本相同。因为在当前阶段,尚没有直接在Sheets API中搜索值的方法。因此,在此答案中,我想建议使用由Google Apps脚本创建的Web Apps。使用Google Apps脚本时,可以通过TextFinder(内置方法)检索搜索到的行号。而且,TextFinder的处理成本很低。所以我提出了。

用法:

请执行以下流程。

1.创建一个新的Google Apps脚本项目。

Web Apps的示例脚本是Google Apps脚本。因此,请创建一个Google Apps脚本项目。

如果您想直接创建它,请访问https://script.new/在这种情况下,如果您尚未登录Google,则会打开“登录”屏幕。因此,请登录到Google。这样,将打开Goog​​le Apps脚本的脚本编辑器。

必须将此Google Apps脚本项目放入您要使用的电子表格的相同Google Drive中。

2.准备脚本。

请复制以下脚本(Google Apps脚本)并将其粘贴到脚本编辑器中。该脚本适用于Web Apps。

function doGet(e) {
  const sheet = SpreadsheetApp.openById(e.parameter.spreadsheetId).getSheetByName(e.parameter.sheetName);
  const res = sheet.getRange(1, 2, sheet.getLastRow()).createTextFinder(e.parameter.searchValue).findAll().map(r => r.getRow());
  return ContentService.createTextOutput(JSON.stringify({rowNumbers: res})).setMimeType(ContentService.MimeType.JSON);
}

3.部署Web应用程序。

  1. 在脚本编辑器上,通过“发布”->“部署为Web应用程序”打开一个对话框。
  2. “将应用程序执行为:”中选择“我
    • 这样,脚本将作为所有者运行。
  3. “谁有权访问该应用程序:”中选择“所有人,甚至匿名
  • 在这种情况下,不需要请求访问令牌。我认为我建议使用此设置来测试此变通办法。
  • 当然,您也可以使用访问令牌。使用访问令牌时,请包括Drive API的作用域之一,例如https://www.googleapis.com/auth/drive.readonly
  • 而且,我认为可以将键值而不是访问令牌用作查询参数。
  1. 单击“部署”按钮作为新的“项目版本”。
  2. 自动打开“需要授权”对话框。
    1. 点击“查看权限”。
    2. 选择自己的帐户。
    3. 在“此应用未验证”中,单击“高级”。
    4. 单击“转到###项目名称###(不安全)”
    5. 点击“允许”按钮。
  3. 点击“确定”。
  4. 复制Web Apps的URL。就像https://script.google.com/macros/s/###/exec
    • 修改Google Apps脚本后,请重新部署为新版本。这样,修改后的脚本将反映到Web Apps。请注意这一点。

4.使用PHP脚本测试Web Apps。

请将您的Web应用程序的URL设置为以下脚本。并且,请设置电子表格ID,工作表名称。根据您的答复,在此示例中,搜索值和列号分别为Pj/567822of searchColumn表示“ B”列。

<?php
$url = 'https://script.google.com/macros/s/###/exec';  // Please set the URL of Web Apps.
$q = array(
  'spreadsheetId' => '###',  // Please set the Spreadsheet ID.
  'sheetName' => 'Sheet1',
  'searchValue' => 'Pj/5678',
  'searchColumn' => 2
);

$curl = curl_init();
$option = [
  CURLOPT_URL => $url . '?' . http_build_query($q),
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_RETURNTRANSFER => true
];
curl_setopt_array($curl, $option);
$res = curl_exec($curl);
$obj = json_decode($res);
print_r($obj);
curl_close($curl);
?>
结果:

当运行上述脚本时,将返回以下值。返回搜索到的行的行号。

{"rowNumbers":[###, ###,,,]}

注意:

  • 修改Web Apps脚本时,请重新部署Web Apps作为新版本。这样,最新脚本将反映到Web Apps。请注意这一点。

参考文献:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Google Sheets API(PHP)更改单元格颜色

Google Sheets API:从公开表中读取单个单元格值

如何将获取的单元格数据的值读取为日期Google Sheets API

Google Sheets api (java) - 如何访问单元格的删除线值

使用Google Sheets API检索单元格中的图像

如何通过Google Sheets API更新多个单元格?

如何将单元格与Google Sheets API合并?

Google Sheets API-更新了0个单元格

如何识别单元格与Google Sheets API合并的单元格

使用Google Sheets API将图片插入Google Sheets单元格

如何在NodeJS中不清除先前值的情况下更新单元格数据(google-sheets-api)

如何使用Google Sheets API和PHP合并单元格?

Google-Sheets-根据单元格值打破循环

使用Google API V4按值查找单元格(Google表格)

通过 Google Sheets API v4 使用 c# 检查 Google Sheets 中的空单元格

在 Google Sheets Java Api 中为文本单元格设置 http 链接

使用 Google Sheets REST API 编辑一行的单元格数据?

Java Google Sheets API获取注释/链接表格单元格

如何使用Google Sheets API v4和Go格式化单元格?

Google Sheets API v4-单元格的粗体部分

使用Google Sheets Node.js API更新单元格颜色

如何从Google Sheets API获取“单元格中的图像” URL

如何使用Google Sheets API从单元格中获取评论

使用 Google Sheets API 刷新令牌对表格单元格使用更新方法

根据条件设置 Google Sheets 单元格值时出错 - Google Sheets Script

Google Sheets - If 语句填充单元格

Google Scripts / Sheets:如何根据一个单元格的值隐藏 3 个单元格?

使用公式更新单元格值会在Sheets API中产生撇号前缀

Google Sheets Script 在范围内查找单元格错误