Нужна помощь в обновлении ячейки электронной таблицы 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);   
?>
Author: yizzlez, 2014-04-26

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'=> '*'));

Запросы являются теперь работает на меня, как и раньше.

 0
Author: Ben, 2014-05-18 21:00:44

После нескольких часов устранения этой же проблемы я в конце концов понял, что это ошибка или недостающая функция в "новых" электронных таблицах Google.

Смотрите комментарии к этому сообщению: Обновление ячейки в электронных таблицах Google возвращает ошибку "Отсутствует идентификатор версии ресурса"/ "Удаленный сервер вернул ошибку: (400) Неверный запрос."

Информация о "новых" таблицах Google: https://support.google.com/drive/answer/3541068

На этой странице это ссылка, которая позволяет вам создать новую электронную таблицу, используя "старые" листы: https://g.co/oldsheets

Моим решением было создать новый "старый" лист. Теперь я могу использовать updateCell без проблем!

 1
Author: Luther, 2017-05-23 10:26:06