我想创建一个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'
答案 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)];
}