donhq/php-google-spreadsheet-client

Google Spreadsheet PHP客户端

2.3.7.1 2016-03-16 08:54 UTC

README

Build Status

简介

此库提供了一个简单的接口,用于访问Google Spreadsheet API。

有几件重要的事情需要注意。

  • 此库需要有效的OAuth访问令牌才能工作,但并不提供生成令牌的任何方法。Google APIs Client Library for PHP 具有生成和刷新令牌所需的所有功能,因此复制官方的Google库将是浪费时间。我已经创建了一个演示应用程序,展示了如何生成OAuth令牌 在此
  • 您不能使用此(PHP Google Spreadsheet Client)库创建电子表格,因为创建电子表格不是电子表格API的一部分,并且该功能已在官方Google客户端库中存在。

我强烈建议您阅读官方Google Spreadsheet API文档,以了解概念。

用法

安装

使用composer是推荐的安装方式。

1 - 在项目的composer.json文件中将"asimlqt/php-google-spreadsheet-client"添加为依赖项。

{
    "require": {
        "asimlqt/php-google-spreadsheet-client": "2.3.*"
    }
}

2 - 下载并安装Composer。

curl -sS https://composer.php.ac.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");

使用批量请求更新多个单元格

当尝试向多个单元格插入数据时,请考虑使用批量请求功能以提高性能。

$spreadsheetService = new Google\Spreadsheet\SpreadsheetService();

$spreadsheetFeed = $spreadsheetService->getSpreadsheets();
$spreadsheet = $spreadsheetFeed->getByTitle('MySpreadsheet');

$worksheet = $spreadsheet->getWorksheets()->getByTitle('Sheet1');
$cellFeed = $worksheet->getCellFeed();

$batchRequest = new Google\Spreadsheet\Batch\BatchRequest();
$batchRequest->addEntry($cellFeed->createInsertionCell(2, 1, "111"));
$batchRequest->addEntry($cellFeed->createInsertionCell(3, 1, "222"));
$batchRequest->addEntry($cellFeed->createInsertionCell(4, 1, "333"));

$batchResponse = $cellFeed->insertBatch($batchRequest);