PHP / Zend / Google Spreadsheet没有获得所有行

时间:2014-06-13 16:26:21

标签: php zend-framework google-sheets gdata

我正在尝试通过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,预填充的第一个表单中的一些细节使表单的第二部分更快填写。这一切都很好,它只是缺少的最后一个条目,这是主要的问题!

谢谢!

1 个答案:

答案 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行的检查,然后应该跳过。


或许更合适的解决方法是按行迭代,然后按单元格迭代,而不是按单元格迭代。