【问题标题】:Google Sheet PHP API v.4: how can I add a "stop" row in a Sheet?Google Sheet PHP API v.4:如何在工作表中添加“停止”行?
【发布时间】:2021-12-13 22:20:46
【问题描述】:

我不确定要使用的正确术语,但我需要在 Google 表格中添加一行,以“阻止”PHP API v.4 从表格中获取更多数据。

我有一张表格,其中包含通过 API 获取的数百行数据,在我想要的行下方是一些我不想要的公式字段(我无法更改它们在表格中的位置或删除它们。)

如何在一行中的 A 单元格中添加类似“99999”的内容,以告知 API 在其前一行停止?

或者有没有更好的方法来告诉 API 停止?

这就是我在 Sheets v.4 PHP API 中用来从工作表中获取行的方法。数据由\n换行符分隔。

// authentication not shown
$range = 'Sheet3!AD2:Z';
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$values = $response->getValues();

// This explode strings into array
foreach($values as $val) {
$valuearray = explode("\n", implode($val));

// This assigns variables that are used to echo the data
$firstname = $valuearray[0];
$lastname = $valuearray[1];
$address = $valuearray[2];
$city = $valuearray[3];
$state = $valuearray[4];
$zip = $valuearray[5];

这给了我这样的输出:

Joe\nSmith\n123 Dogpatch Lane\nDog Town\n阿拉巴马州\n34567

John\nJones\n456 Cat Hollow\nCat Town\nArkansas\n12345

不断……

我需要做的是在 A 单元格中添加一行内容(例如 999999),以停止前一行的 API。

21 年 12 月 15 日更新--------

我一定是想多了;这可行并且尽可能简单:

// This explode strings into array
foreach($values as $val) {
$valuearray = explode("\n", implode($val));

// This assigns variables that are used to echo the data
$firstname = $valuearray[0];
$lastname = $valuearray[1];
$address = $valuearray[2];
$city = $valuearray[3];
$state = $valuearray[4];
$zip = $valuearray[5];

if($firstname==='999999') { break; } // Break on 999999 in the firstname field

echo '<h1 class="firstname">' . $firstname . '</h1>';
......

【问题讨论】:

  • 感谢您的回复。不幸的是,我无法复制I still get those errors。当我测试我提出的脚本时,没有发生错误。这是因为我的技术不好。我对此深表歉意。对于This all may have to do with possibly a not good way that I explode/implode the arrays and assign variables.,我深表歉意,我提出的答案没有用。从此,我必须删除我的答案。因为我不想混淆其他用户。我为我糟糕的技术深表歉意。如果您能原谅我拙劣的技能,我将不胜感激。我认为我必须越来越多地学习。
  • 您在寻找if($firstname==='999999') { break; }吗?
  • @Tanaike 你显然非常熟练,拥有 118K 代表! :) 我正在尝试做一些非常不寻常的事情,并且可能无法以干净的方式进行。我感谢您的帮助!我为你提供了帮助。谢谢!
  • 感谢您的回复。为了确认您当前的问题,我可以再次询问您我提出的脚本吗?在我提议的脚本中,I get Warning: Undefined array key 0 and Undefined array key 2041 on the line if (strval($v[$i][0]) == "99999") and also Undefined array key 1, etc. right after the 99999 from the sheet. 的错误发生在哪里?
  • 我检查了@Tanaike 的答案,您共享的电子表格对我有用。你能确认这也对你有用吗?

标签: php google-sheets google-sheets-api


【解决方案1】:

我相信你的目标如下。

  • 您想通过检查“A”列的值是否为99999 来检索值。当“A”列的值为99999 时,您不希望检索此行之后的值。
  • 您希望使用 googleapis for php 来实现此目的。

很遗憾,在现阶段,我认为使用 Sheets API 无法直接实现您的目标。那么,在这种情况下,下面的示例脚本呢?

示例脚本:

$range = 'Sheet3!AD2:Z';
$response = $service->spreadsheets_values->get($spreadsheetId, $range);

// --- I added below script.
$v = $response['values'];
$values = [];
for($i = 0; $i <= count($v); $i++){
    if (strval($v[$i][0]) == "99999") {
        break;
    }
    array_push($values, $v[$i]);
}
// ---

// This explode strings into array
foreach($values as $val) {
$valuearray =explode("\n", implode($val));
  • 这样,可以通过检查“A”列的值来检索值。

参考:

补充:

关于您的以下更新脚本,

// authentication not shown
$range = 'Sheet3!AD2:Z';
$response = $service->spreadsheets_values->get($spreadsheetId, $range);
$values = $response->getValues();

// This explode strings into array
foreach($values as $val) {
$valuearray = explode("\n", implode($val));

// This assigns variables that are used to echo the data
$firstname = $valuearray[0];
$lastname = $valuearray[1];
$address = $valuearray[2];
$city = $valuearray[3];
$state = $valuearray[4];
$zip = $valuearray[5];

在您的脚本中,$values 是二维数组。当使用图像的示例电子表格时,它就像[["Joe","Null","blah blah","Smith","123 Dogpatch Lane","Dog Town","Alabama",34567],,,]。所以当$valuearray = explode("\n", implode($val)); 运行时,["Joe","Null","blah blah","Smith","123 Dogpatch Lane","Dog Town","Alabama",34567] 被转换为["JoeNullblah blahSmith123 Dogpatch LaneDog TownAlabama34567"]。这样,$firstname = $valuearray[0] 不会发生错误。但是$lastname$zip 出现错误。因为数组长度是1。我认为这可能是您的问题的原因。如果要把$firstname的每个值都放到$zip,下面的修改怎么样?

发件人:

foreach($values as $val) {
$valuearray = explode("\n", implode($val));

// This assigns variables that are used to echo the data
$firstname = $valuearray[0];
$lastname = $valuearray[1];
$address = $valuearray[2];
$city = $valuearray[3];
$state = $valuearray[4];
$zip = $valuearray[5];

收件人:

foreach($values as $val) {
    if (count($val) > 0 && $val[0] == 99999) {
        break;
    }
    list($firstname, $lastname, $address, $city, $state, $zip) = $val;
}

$v = $values;
$values = [];
for($i = 0; $i <= count($v); $i++){
    if (count($v[$i]) > 0 && $v[$i][0] == 99999) {
            break;
    }
    array_push($values, $v[$i]);
}
foreach($values as $val) {
    list($firstname, $lastname, $address, $city, $state, $zip) = $val;
}

【讨论】:

  • 谢谢!这是个好主意。 API中似乎没有办法做到这一点。但我收到警告:未定义的数组键 0 和未定义的数组键 2041 在行 if (strval($v[$i][0]) == "99999") 以及未定义的数组键 1 等。
  • @BlueDogRanch 感谢您的回复。我带来的不便表示歉意。不幸的是,当我测试我提出的脚本时,没有发生错误。我无法复制你的情况。我为此道歉。那么为了正确了解您目前的情况,您能否提供示例电子表格?借此,我想确认一下。
  • 感谢您的帮助。我将使用示例数据设置一个公共工作表并将其链接到此处。我正在使用的工作表是私有的,需要授权,但与公共工作表测试应该没有太大区别。
  • @BlueDogRanch 感谢您的回复。当我可以使用示例电子表格复制您当前的问题时,将有助于考虑解决方案。
  • 感谢您的帮助。这是一个示例 csv 文件;当然,您需要将 $valuearray 中的 \n 更改为 ,。 shorturl.at/vDRU1
猜你喜欢
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多