需要帮助使用PHP更新Zend-gdata的谷歌电子表格单元格.updateCell函数一直出错


Need help updating a google spreadsheet cell using Zend gdata with PHP. I keep getting an error with the updateCell function

我一直在尝试更新谷歌电子表格中的一个单元格。我使用的是ZendFramework-1.12.6PHP版本5.5.9。使用代码得到的响应是:

错误:应为响应代码200,实际为400找不到此URL的电子表格。确保你有正确的URL,并且电子表格的所有者没有删除它。

如果我去掉错误陷阱,我会得到这样的消息:

致命错误:未捕获异常"Zend_Gdata_App_HttpException",消息为"预期响应代码200,得到400缺少/volume1/web/Zend/Gdata/App.php:717堆栈跟踪:#0/volume1/web/Zend-Gdata/App.php(933):Zend_Gdata _App->performHttpRequest('PUT',',Array,'PUT(Object(Zend_Gdat_Spreadsheets_CellEntry),NULL,NULL,数组)#2/volume1/web/Zend/Gdata/App/Entry.php(209):Zend_Gdata_App->updateEntry(对象(Zend_Gdata Spreadsheets_CellEntry),NULL,数组)#3/volume1/web/Zend/Gdata/Spreadsheets.php(307):Zend_Gdata_App_Entry->save()#4/volume1/web/gss.php

似乎一切都很好,直到我尝试用updateCell调用将字符串'test'写入电子表格。有人能帮忙吗?

<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_Spreadsheets');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
// set credentials for ClientLogin authentication
$user = "mygmailaccount@gmail.com";
$pass = "mypassword";
// connect to API
$service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME;
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
$service = new Zend_Gdata_Spreadsheets($client);
// set target spreadsheet and worksheet
$ssKey = '1zoCs23pKaQXPtB2rT5Rn6KVzJalIoR5VYBnlURJRRLs';
$wsKey = 'od6';
$service->updateCell('1', '1', 'test', $ssKey, $wsKey);   
?>

经过几个小时的故障排除,我最终发现这是"新"谷歌电子表格中的一个错误或缺少的功能。

请参阅这篇文章的评论:更新谷歌电子表格中的单元格返回错误";缺少资源版本ID"/"远程服务器返回错误:(400)错误请求"

关于"新"谷歌表单的信息:https://support.google.com/drive/answer/3541068

该页面上有一个链接,允许您使用"旧"表格创建新的电子表格:https://g.co/oldsheets

我的解决方案是创建一个新的"旧"图纸。我现在可以毫无问题地使用updateCell了!

我刚刚找到了你的问题,通过一些额外的信息,我找到了一个非常简单的解决方案,所以我想我也分享一下。

问题似乎是,skript需要一个Etag集才能正确执行。这个Etag是

array('If-Match'=> '*')

要将其作为标头添加到每个UpdateCell请求,请进入库路径中的源文件:

library/Zend/Gdata/Spreadsheets.php

并从更改UpdateCell方法定义

    $entry = $this->getCellEntry($query);
    $entry->setCell(new Zend_Gdata_Spreadsheets_Extension_Cell(null, $row, $col, $inputValue));
    $response = $entry->save();

    $entry = $this->getCellEntry($query);
    $entry->setCell(new Zend_Gdata_Spreadsheets_Extension_Cell(null, $row, $col, $inputValue));
    $response = $entry->save(null,null,array('If-Match'=> '*'));

请求现在和以前一样对我有效。