我一直在尝试更新谷歌电子表格中的一个单元格。我使用的是ZendFramework-1.12.6和PHP版本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'=> '*'));
请求现在和以前一样对我有效。