Нужна помощь в обновлении ячейки электронной таблицы Google с использованием Zend gdata с PHP. Я продолжаю получать сообщение об ошибке с функцией updateCell
Я пытался обновить ячейку в электронной таблице Google. Я использую 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->Выполнить HttpRequest("ПОМЕСТИТЬ", "Массив", "поместить(объект(zend_gdata_spreadsheets_cellentry), НУЛЬ, НУЛЬ, НУЛЬ, Массив) #2/volume1/web/Zend/Gdata/App/Entry.php (209): zend_gdata_app->updateentry (Объект(zend_gdata_spreadsheets_cellentry), НУЛЬ, НУЛЬ, Массив) #3 /volume1/web/Zend/Gdata/Spreadsheets.php (307): Zend_Gdata_App_Entry->сохранить() #4/volume1/web/gss.php (19): Таблицы Zend_Gdata_Spreadsheets->Ячейка обновления('1', '1', ' тест", "1zocs23pkzqxptb...", "od6") #5 {основной} добавлено/volume1/web/Zend/Gdata/App.php в строке 717
Кажется, что все работает отлично, пока я не попытаюсь записать строку 'test'
в электронную таблицу с помощью вызова updateCell
. Кто-нибудь может помочь?
<?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 = "[email protected]";
$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);
?>
2 answers
Я только что нашел ваш вопрос и с некоторой дополнительной информацией нашел действительно простое решение, поэтому я подумал, что тоже поделюсь им.
Проблема, по-видимому, заключается в том, что для правильной работы скрипта должен быть установлен 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'=> '*'));
Запросы являются теперь работает на меня, как и раньше.
После нескольких часов устранения этой же проблемы я в конце концов понял, что это ошибка или недостающая функция в "новых" электронных таблицах Google.
Смотрите комментарии к этому сообщению: Обновление ячейки в электронных таблицах Google возвращает ошибку "Отсутствует идентификатор версии ресурса"/ "Удаленный сервер вернул ошибку: (400) Неверный запрос."
Информация о "новых" таблицах Google: https://support.google.com/drive/answer/3541068
На этой странице это ссылка, которая позволяет вам создать новую электронную таблицу, используя "старые" листы: https://g.co/oldsheets
Моим решением было создать новый "старый" лист. Теперь я могу использовать updateCell без проблем!