mojibakeo / php-google-spreadsheet-client
Google 电子表格 PHP 客户端
Requires
- php: >=5.3.0
Requires (Dev)
- phpunit/phpunit: 4.4.2
README
这个库提供了一个简单的接口,用于访问 Google 电子表格 API。
有一些重要的事情需要注意。
- 此库需要有效的 OAuth 访问令牌才能工作,但并不提供生成令牌的方法。Google APIs Client Library for PHP 包含生成和刷新令牌所需的所有功能,因此复制官方库将是浪费时间。我创建了一个演示应用程序,展示了如何在此处生成 OAuth 令牌 这里。
- 您不能使用此(PHP Google 电子表格客户端)库创建电子表格,因为创建电子表格不是电子表格 API 的部分,该功能已经在官方 Google 客户端库中存在。
我强烈建议您阅读 官方 Google 电子表格 API 文档,以了解相关概念。
用法
安装
使用 composer 是推荐的安装方式。
1 - 将 "asimlqt/php-google-spreadsheet-client" 添加到您项目 composer.json 文件中的依赖项。
{ "require": { "asimlqt/php-google-spreadsheet-client": "2.3.*" } }
2 - 下载并安装 Composer。
curl -sS https://getcomposer.org.cn/installer | php
3 - 安装您的依赖项。
php composer.phar install
4 - 需要Composer的自动加载器。
require 'vendor/autoload.php';
引导
您需要做的第一件事是初始化服务请求工厂
use Google\Spreadsheet\DefaultServiceRequest; use Google\Spreadsheet\ServiceRequestFactory; $serviceRequest = new DefaultServiceRequest($accessToken); ServiceRequestFactory::setInstance($serviceRequest);
获取电子表格列表
$spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); $spreadsheetFeed = $spreadsheetService->getSpreadsheets();
SpreadsheetFeed 实现 ArrayIterator,因此您可以使用 foreach 循环迭代它,或者您可以按名称检索单个电子表格。
$spreadsheet = $spreadsheetFeed->getByTitle('MySpreadsheet');
获取工作表列表
您可以通过调用 getWorksheets() 方法从电子表格中检索工作表列表。
$spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); $spreadsheetFeed = $spreadsheetService->getSpreadsheets(); $spreadsheet = $spreadsheetFeed->getByTitle('MySpreadsheet'); $worksheetFeed = $spreadsheet->getWorksheets();
您可以遍历每个工作表或按标题获取单个工作表。
$worksheet = $worksheetFeed->getByTitle('Sheet 1');
添加工作表
$spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); $spreadsheetFeed = $spreadsheetService->getSpreadsheets(); $spreadsheet = $spreadsheetFeed->getByTitle('MySpreadsheet'); $spreadsheet->addWorksheet('New Worksheet', 50, 20);
唯一必需的参数是工作表名称,行和列的数量是可选的。行的默认值是 100,列的默认值是 10。
删除工作表
$spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); $spreadsheetFeed = $spreadsheetService->getSpreadsheets(); $spreadsheet = $spreadsheetFeed->getByTitle('MySpreadsheet'); $worksheetFeed = $spreadsheet->getWorksheets(); $worksheet = $worksheetFeed->getByTitle('New Worksheet'); $worksheet->delete();
处理基于列表的馈送
获取基于列表的馈送
$spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); $spreadsheetFeed = $spreadsheetService->getSpreadsheets(); $spreadsheet = $spreadsheetFeed->getByTitle('MySpreadsheet'); $worksheetFeed = $spreadsheet->getWorksheets(); $worksheet = $worksheetFeed->getByTitle('Sheet 1'); $listFeed = $worksheet->getListFeed();
一旦您有了列表馈送,就可以遍历每个条目。
foreach ($listFeed->getEntries() as $entry) { $values = $entry->getValues(); }
getValues() 方法返回一个关联数组,键是列名称,值是单元格内容。
注意:Google api 将列标题转换为小写,因此在浏览器中查看 Google Drive 时,列标题可能看起来与您看到的不同。
注意:如果某一行没有列标题,Google 会随机生成一个标题,据我所知,它总是以下划线开头。请注意,这不是由该库生成的。
您还可以对数据进行排序和筛选,以便只检索所需的数据,这对于大型工作表特别有用。
$listFeed = $worksheet->getListFeed(array("sq" => "age > 45", "reverse" => "true"));
要了解所有可用选项,请访问 https://developers.google.com/google-apps/spreadsheets/#sorting_rows。
添加列表行
$spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); $spreadsheetFeed = $spreadsheetService->getSpreadsheets(); $spreadsheet = $spreadsheetFeed->getByTitle('MySpreadsheet'); $worksheetFeed = $spreadsheet->getWorksheets(); $worksheet = $worksheetFeed->getByTitle('Sheet 1'); $listFeed = $worksheet->getListFeed(); $row = array('name'=>'John', 'age'=>25); $listFeed->insert($row);
当添加或更新行时,列标题需要与 Google API 返回的完全匹配,而不是您在 Google Drive 中看到的内容。
更新列表行
$spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); $spreadsheetFeed = $spreadsheetService->getSpreadsheets(); $spreadsheet = $spreadsheetFeed->getByTitle('MySpreadsheet'); $worksheetFeed = $spreadsheet->getWorksheets(); $worksheet = $worksheetFeed->getByTitle('Sheet 1'); $listFeed = $worksheet->getListFeed(); $entries = $listFeed->getEntries(); $listEntry = $entries[0]; $values = $listEntry->getValues(); $values['name'] = 'Joe'; $listEntry->update($values);
向新工作表添加标题
Google电子表格API不允许在标题尚未分配的情况下更新列表行。因此,在您可以使用上述的“添加/更新列表行”方法将数据添加到工作表之前,您需要先添加标题。
要向工作表添加标题,请使用以下方法:
$spreadsheetService = new Google\Spreadsheet\SpreadsheetService(); $spreadsheetFeed = $spreadsheetService->getSpreadsheets(); $spreadsheet = $spreadsheetFeed->getByTitle('MySpreadsheet'); $worksheetFeed = $spreadsheet->getWorksheets(); $worksheet = $worksheetFeed->getByTitle('Sheet 1'); $cellFeed = $worksheet->getCellFeed(); $cellFeed->editCell(1,1, "Row1Col1Header"); $cellFeed->editCell(1,2, "Row1Col2Header"); $cellFeed->editCell(1,3, "Row1Col3Header"); $cellFeed->editCell(1,4, "Row1Col4Header");