【问题标题】:Retrieve only specific columns of spreadsheet with zend gdata from gdocs仅使用来自 gdocs 的 zend gdata 检索电子表格的特定列
【发布时间】:2012-07-17 22:31:51
【问题描述】:

我正在处理来自 gdocs 的相对较大的电子表格,并通过 zend 库访问它们。我在任何给定时间只需要某些列,因此为了节省内存,使用基于列表的提要仅检索这些特定列而不是整个电子表格会很有帮助。我使用的基本查询是根据 zend 文档

$query = new Zend_Gdata_Spreadsheets_ListQuery();
$query->setSpreadsheetKey($spreadsheetKey);
$query->setWorksheetId($worksheetId); 
$listFeed = $spreadsheetService->getListFeed($query);

我有机会通过$query->setSpreadsheetQuery('name=someName'); 发送结构化查询,但据我所知,这仅适用于限制返回的行数,而不是列数。有没有办法以某种方式使用它来获取特定的列?或者,仅获取电子表格的某些先前指定的行以便仅检索电子表格的块并同时精简一个块将是有帮助的。无论哪种方式,我都需要避免在任何给定时间将整个电子表格放在内存中。

感谢您的帮助。

【问题讨论】:

    标签: php zend-framework gdata google-spreadsheet-api google-docs


    【解决方案1】:

    我设法使用基于单元的提要解决了这个问题。基本上我所做的是首先获取特定列标题的列号,如下所示

    $query = new Zend_Gdata_Spreadsheets_CellQuery();
    $query->setSpreadsheetKey($spreadsheetkey);
    $query->setWorksheetId($wworksheetkey);
    $query->setMinRow(1);
    $query->setMaxRow(1);
    $headerFeed = $spreadsheetService->getCellFeed($query);
    
    foreach($headerFeed as $cellEntry){
        if(strcasecmp($cellEntry->cell->getText(), $column) ==  0){
            $colNr = $cellEntry->cell->getColumn();
            break;
        }
    }
    

    这将为我提供$column 列的列号。然后,我将继续获取给定列号的特定行范围,以便我可以逐块读取整个列,而无需将整个电子表格(或列)放在内存中。这可以这样做

    $query->setMinCol($colNr);
    $query->setMaxCol($colNr);
    $query->setMinRow($startingRow);
    $query->setMaxRow($endingRow);
    
    $columnFeed = $spreadsheetService->getCellFeed($query);
    foreach($columnFeed as $cellEntry){
        $result[$cellEntry->cell->getRow()] = $cellEntry->cell->getText();
    }
    

    通过更改$startingRow$endingRow,我可以遍历该列。但是,必须小心选择这些,因为如果它们“越界”,google api 将返回一个 http 400 代码。单元格不必在其中具有值,但它们必须存在(向下滚动电子表格,您看到的最后一个行号应该是两个值的最大值)。我认为默认情况下会创建一个包含 100(空)行的电子表格。

    这可能不是最优雅或最快的解决方案,但它对我有用。

    【讨论】:

      猜你喜欢
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 2011-02-04
      • 1970-01-01
      相关资源
      最近更新 更多