【问题标题】:print random row from Google Spreadsheet via php通过 php 从 Google 电子表格打印随机行
【发布时间】:2011-02-19 16:09:49
【问题描述】:

我想创建一个 PHP 脚本,从 Google 电子表格中提取几行并以 html 显示。

$authService = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME;
$httpClient = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $authService);
$gdClient = new Zend_Gdata_Spreadsheets($httpClient);
$feed = $gdClient->getSpreadsheetFeed('https://spreadsheets.google.com/ccc?key=MY_DOC_KEY');
$currKey = explode('/', $feed->entries[0]->id->text);
$query = new Zend_Gdata_Spreadsheets_CellQuery();
$query->setSpreadsheetKey($this->currKey);
$query->setWorksheetId($this->currWkshtId);
$query->setMinCol(1);
$query->setMaxCol(7);
$query->setMinRow(2);
$feed = $gdClient->getCellFeed($query);

但是,这会引发非常难看的错误消息。我做错了什么?

致命错误:未捕获的异常 'Zend_Gdata_App_Exception' 与 消息 'DOMDocument 无法解析 XML: DOMDocument::loadXML() 额外内容 在实体文档的末尾, 线:23'

【问题讨论】:

  • 我这辈子没用过 Zend_Gdata,但是有什么方法可以查看从 google 实际下载的内容吗?只是为了确保它是正确的 XML。如果不是,难怪 Zend 的解析器解析不了。

标签: php google-sheets


【解决方案1】:

简答:

如果您已经知道要读取哪个电子表格,为什么还要列出这些电子表格?

长答案:

我是 Zend 和 Gdata 的新手,但尝试运行您的代码并得到相同的异常。 但在阅读文档 (http://framework.zend.com/manual/en/zend.gdata.spreadsheets.html) 后,我尝试替换:

$feed = $gdClient->getSpreadsheetFeed('https://spreadsheets.google.com/ccc?key=MY_DOC_KEY');

与:

$feed = $gdClient->getSpreadsheetFeed();

加上明显的:

foreach($feed as $cellEntry) {
  $row = $cellEntry->cell->getRow();
  $col = $cellEntry->cell->getColumn();  
  $val = $cellEntry->cell->getText();    
  echo "$row, $col = $val\n";      
}        

我得到了一些数据。

然后我明白了,这两行根本不需要:

$feed = $gdClient->getSpreadsheetFeed('https://spreadsheets.google.com/ccc?key=MY_DOC_KEY');
$currKey = explode('/', $feed->entries[0]->id->text);

所以getSpreadsheetFeed 非常有用,如果您想列出/过滤电子表格(然后提供密钥没有意义)并从已知电子表格中读取数据,只需使用Zend_Gdata_Spreadsheets_CellQuery 就足够了。

现在我学到了一些东西。

【讨论】:

    【解决方案2】:

    我设法通过 Google Spreadsheets class 实现了该脚本,该脚本包裹了 Zend Gdata 类并使其更易于使用。

    这里是功能代码:

    $ss = new Google_Spreadsheet($user,$password);
    $ss->useSpreadsheet("My Spreadsheet");
    $ss->useWorksheet('Sheet1');
    
    $rows = $ss->getRows();
    if ($rows){
        $data  = returnRandomElement($rows);
        echo 'NonBullshitCollectiveWidget.serverResponse('.json_encode($data).')';
    } 
    else {
        echo 'NonBullshitCollectiveWidget.serverResponse({"columnName":"Error!"})';
    }
    
    
    function returnRandomElement($array){
        return $array[array_rand($array,1)];
    }
    

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-19
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多