我正在尝试通过PHP / Zend脚本从Google电子表格中获取所有行。这是我正在使用的脚本:
$service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME;
$client = Zend_Gdata_ClientLogin::getHttpClient('xxxxxxxxx', 'xxxxxxx', $service);
$spreadsheetService = new Zend_Gdata_Spreadsheets($client);
// Get spreadsheet key
$spreadsheetsKey = 'xxxxxxxxxxxxx';
$worksheetId = 'xxx';
// Get cell feed
$query = new Zend_Gdata_Spreadsheets_CellQuery();
$query->setSpreadsheetKey($spreadsheetsKey);
$query->setWorksheetId($worksheetId);
$cellFeed = $spreadsheetService->getCellFeed($query);
// Build an array of entries:
$ssRows = array();
$ssRow = array();
$titleRow = array();
$tableRow = 1;
foreach($cellFeed as $cellEntry) {
$row = $cellEntry->cell->getRow();
$col = $cellEntry->cell->getColumn();
$val = $cellEntry->cell->getText();
// Add each row as a new array:
if ($row != $tableRow) {
array_push($ssRows, $ssRow);
$ssRow = array();
// Move to the next row / new array
$tableRow = $row;
}
// Build the array of titles:
if ($row == 1) {
$titleRow[$col] = $val;
}
// Build the array of results with the title as the key:
else {
$key = $titleRow[$col];
$ssRow[$key] = $val;
}
}
// Pass the results array:
return array_reverse($ssRows);
这构建了一个包含电子表格中大部分详细信息的数组,但是它总是错过最后一个条目 - 任何人都可以看到我做错了什么,或者有更好的方法从电子表格中获取所有数据?
表格是3部分形式,基于不同的答案。在填写一个部分时,我想显示一个返回到表单的URL,预填充的第一个表单中的一些细节使表单的第二部分更快填写。这一切都很好,它只是缺少的最后一个条目,这是主要的问题!
谢谢!
答案 0 :(得分:1)
您的代码的工作方式如下:
if (next_row) {
data[] = current_row
current_row = array();
}
if (first_row) {
title_row logic
} else {
add cell to current_row
}
因此,只有在转到下一行后才会将行添加到收藏夹中。这将错过最后一行,因为你会错过最后一次过渡。
简单的解决方法是在array_push($ssRows, $ssRow);
循环后立即添加foreach
。您需要添加0
行的检查,然后应该跳过。
或许更合适的解决方法是按行迭代,然后按单元格迭代,而不是按单元格迭代。