通过php从Google Spreadsheet打印随机行

时间:2011-02-19 16:09:49

标签: php google-sheets

我想创建一个PHP脚本,从Google Spreadsheets中提取几行并以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'

2 个答案:

答案 0 :(得分: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,那么{{1}}非常有用

现在我学到了一些东西。

答案 1 :(得分:0)

我设法通过一个包含Zend Gdata类的Google Spreadsheets class来实现脚本,并且使它更容易使用。

以下是功能代码:

$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)];
}