Я получаю сообщение об ошибке «Ошибка в запросе Google» (400) с использованием API электронных таблиц для некоторых строк, но не для большинства

У меня есть веб-страница, на которой публикуются запросы на обновление ячейки электронной таблицы Google до сценария php. Он использует оболочку asimlqt / php-google-spreadsheet-client / PHP для API Google Spreadsheet. Большую часть времени он работает нормально. Однако для нескольких ячеек это выдает ошибку «Ошибка в запросе Google». Я проверил и обнаружил, что возвращаемый http_code равен 400.

Я не могу понять, что может отличаться в ячейках, где обновление не работает. Они содержат текст произвольной формы, введенный через форму Google, но у проблемных ячеек нет тех, у которых самый длинный текст, и нет никаких странных символов. Есть более 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();

1

Решение

У меня была такая же ошибка, когда в значении ячейки были двойные кавычки.
Это было исправлено путем замены их на &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);
}

Как вы можете видеть, здесь нет преобразования $ value, поэтому при наличии двойных кавычек тег XML теряется, например:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]