Php 我得到一个';Google请求中出现错误';(400)对某些行使用电子表格API时出错,但对大多数行没有

Php 我得到一个';Google请求中出现错误';(400)对某些行使用电子表格API时出错,但对大多数行没有,php,google-spreadsheet-api,Php,Google Spreadsheet Api,我有一个网页,发布了将Google电子表格单元格更新为php脚本的请求。它正在为谷歌电子表格API使用asimlqt/php谷歌电子表格客户端/php包装器。大多数情况下,它工作正常。不过,对于一些单元格,它会给我一个“谷歌请求中的错误”错误。我调查发现返回的http_代码是400 我不知道更新不起作用的单元格会有什么不同。它们保存通过谷歌表单输入的自由格式文本,但有问题的单元格不是文本最长的单元格,也没有任何奇怪的字符。有100多行,我只发现了几个问题,到目前为止,我只看到了一列中的单元格的问

我有一个网页,发布了将Google电子表格单元格更新为php脚本的请求。它正在为谷歌电子表格API使用asimlqt/php谷歌电子表格客户端/php包装器。大多数情况下,它工作正常。不过,对于一些单元格,它会给我一个“谷歌请求中的错误”错误。我调查发现返回的http_代码是400

我不知道更新不起作用的单元格会有什么不同。它们保存通过谷歌表单输入的自由格式文本,但有问题的单元格不是文本最长的单元格,也没有任何奇怪的字符。有100多行,我只发现了几个问题,到目前为止,我只看到了一列中的单元格的问题,所以我非常确定凭据是正确的

错误来自以下函数:

function updateCell($row, $col, $val) {
    global $cellFeed;
    try {
        $cellFeed->editCell($row+2, $col+1, $val);
    } catch (Exception $e) {
        output('ERROR (updateCell): ' . $e->getMessage());
        return false;
    }
    return true;
}
$cellFeed
来自

$serviceRequest = new Google\Spreadsheet\DefaultServiceRequest($accessToken);
Google\Spreadsheet\ServiceRequestFactory::setInstance($serviceRequest);
$spreadsheetService = new Google\Spreadsheet\SpreadsheetService();
$spreadsheet = $spreadsheetService->getSpreadsheetById($SPREADSHEET_ID);
$worksheetFeed = $spreadsheet->getWorksheets();
$worksheet = $worksheetFeed->getByTitle($WORKSHEET_NAME);
$cellFeed = $worksheet->getCellFeed();

我也有同样的错误,当单元格值中有双引号时。 通过将其替换为&qout;进行修复

这是因为CellFeed.php中的代码:

public function editCell($rowNum, $colNum, $value)
{
    $entry = sprintf('
        <entry xmlns="http://www.w3.org/2005/Atom" xmlns:gs="http://schemas.google.com/spreadsheets/2006">
          <gs:cell row="%u" col="%u" inputValue="%s"/>
        </entry>',
        $rowNum,
        $colNum,
        $value
    );

    ServiceRequestFactory::getInstance()->post($this->getPostUrl(), $entry);
}
公共函数editCell($rowNum,$colNum,$value)
{
$entry=sprintf('
',
$rowNum,
$colNum,
美元价值
);
ServiceRequestFactory::getInstance()->post($this->getPostUrl(),$entry);
}
如您所见,这里没有$value的转换,因此当有双引号时,XML标记会损坏,如:

<gs:cell row="%u" col="%u" inputValue="my value with "quotes" in it."/>


您提到的特定列是否有可能超出范围?我看到你在做,
$col+1
当你调用
editCell
时,所以我很好奇这个范围是否没有定义。不,列索引增加了1,因为Google电子表格API使用基于1的数字模式,而可视化API(我用来显示数据)是基于0的。此外,可视化对标题行进行计数,而电子表格API不进行计数,因此该行将增加2。更新其他行中的列可以正常工作;我只是在几行的地方得到了这个错误。对我来说很好。可能是数据量问题吗?我使用批处理更新。此外,我有一个自动重试设置,因为它有时会失败。它一次只更新一个单元格,所以我认为这不是数据量的问题。到目前为止,我只在这一列中找到了它,还有其他类似的列可以很好地更新(大多数行也是如此,即使是对于这一列)。有时单元格中的文本可能很长,但有些单元格中的文本较多,可以很好地更新。重试是个好主意,但到目前为止,对于失败的行,它似乎总是失败的。回答得好。没有解决我的问题,因为无论是否有引号,都会发生,但这可能是一个问题,因此我采用您的解决方案。谢天谢地,不仅可以有引号,还可以有其他一些html字符需要转换为代码。你有“问题字符串”的例子吗?