跳转到主要内容

一个真正在2024年7月运行的Pythonic接口,用于访问Google Sheets API。

项目描述

EZSheets

一个真正在2024年7月运行的Pythonic接口,用于访问Google Sheets API。

安装和设置

要使用pip安装,请运行

pip install ezsheets

要让Python脚本使用EZSheets访问和编辑Google Sheets电子表格,您需要一个凭证JSON文件和一个令牌JSON文件。如果您有Google/Gmail账户,可以这样做,并且是免费的。我强烈建议创建一个新的Google账户而不是使用现有的账户,以防止Python脚本中的错误影响到您个人Google账户中的电子表格。创建凭证有五个步骤

  1. 创建一个新的Google Cloud项目。
  2. 为您的项目启用Google Sheets API和Google Drive API。
  3. 为您的项目配置OAuth同意屏幕。
  4. 为您的项目创建凭证。
  5. 使用凭证文件登录。

这可能看起来像很多工作,但您只需要设置一次。

创建一个新的Google Cloud项目

首先,您需要设置一个Google Cloud项目。在您的浏览器中,转到 https://console.cloud.google.com 并使用您的用户名和密码登录到您的Google账户。(您的应用程序可以连接到任何Google账户,但此Google账户将管理EZSheets的Google API访问。)您将被带到入门页面。在页面顶部,单击“选择项目”。在出现的弹出窗口中,单击“新建项目”。

Navigate to new project

这会将您带到一个新的项目页面。系统会为您生成一个项目名称,例如“我的项目23135”。同时,还会随机生成一个项目ID,例如“macro-nuance-362516”。这些名称不会显示在您的Python脚本用户界面中,您可以使用任何您想要的名称。您可以在以后更改项目名称,但不能更改项目ID。我仅使用网站为我生成的默认名称。您可以将位置留为“无组织”。免费Google账户最多可以有12个项目,但您只需要一个项目来创建所有您想要的Python脚本。点击蓝色的“创建”按钮来创建项目。

Create a new project

再次点击页面顶部的“选择一个项目”,并选择您刚刚创建的项目。您将被带到该Google Cloud项目的仪表板页面。接下来,您需要为您的项目启用Google Sheets API和Google Drive API。

为您的项目启用Google Sheets API和Google Drive API

https://console.cloud.google.com页面,点击左上角的导航按钮(图标是三个横杠,通常称为“汉堡”图标)。导航到“APIs & Services”然后到“Library”,进入API库页面。有许多Google API用于Gmail、Google Maps、Google Cloud Storage和其他Google服务。我们需要允许我们的项目使用Google Sheets和Google Drive API。

Navigate to library

向下滚动并找到“Google Sheets API”,点击它,或者将“Google Sheets API”输入搜索栏中找到它。这会带您到Google Sheets API页面。点击蓝色的“启用”按钮,以使您的Google Cloud项目可以使用Google Sheets API。您将被重定向到“APIs & Services > 已启用API & Services”页面,您可以在此页面找到有关您的Python脚本使用此API频率的信息。重复此过程以启用“Google Drive API”。

接下来,您需要配置您项目的OAuth同意屏幕。

为您的项目配置OAuth同意屏幕

点击左上角的导航按钮,然后导航到“APIs & Services”然后到“OAuth同意屏幕”。当您或您的Python脚本用户第一次使用EZSheets时,将出现同意屏幕。如果您没有将免费Google账户设置为Google Workspace用户,您将不得不选择外部用户类型选项而不是内部用户类型。Google的支持页面设置OAuth同意屏幕的帮助页面对此有进一步的解释。

在第一步“OAuth同意屏幕”中,选择外部用户并点击蓝色的“创建”按钮。下一页显示了OAuth同意屏幕的外观。此屏幕在用户第一次导入ezsheets模块时出现。为应用程序名称选择一个名称(我使用一些通用的名称,如Python Google API Script),并输入用户支持电子邮件和开发者联系信息。然后点击“保存并继续”按钮。

在第二步“作用域”中,您项目的范围是该项目被允许访问的权限。点击“添加或删除作用域”按钮,在出现的新面板中,通过表格并勾选作用域复选框.../auth/drive(Google Drive API)和.../auth/spreadsheets(Google Sheets API),然后点击蓝色的“更新”按钮。然后点击“保存并继续”。

第三步“测试用户”要求您添加将Python脚本交互的电子表格所属的Google账户的Gmail电子邮件地址。在不经过Google的应用程序审核流程的情况下,您的脚本仅限于与您在此步骤中提供的电子邮件地址进行交互。点击“+添加用户”按钮,在出现的新面板中,输入您的Google账户的Gmail地址并点击蓝色的“添加”按钮。然后点击“保存并继续”。

步骤 4 "摘要" 提供了之前步骤的总结。如果所有信息看起来都正确,请点击“返回仪表板”按钮。下一步是为您的项目创建凭证。

为您的项目创建凭证

从导航侧边栏菜单中,点击“APIs & Services”然后点击“凭证”进入凭证页面。点击页面顶部的“+ 创建凭证”链接。一个下拉菜单将打开,询问您要创建哪种类型的凭证:“API密钥”、“OAuth客户端ID”或“服务帐户”。点击“OAuth客户端ID”。

Create credentials

在出现的新页面上,选择“桌面应用程序”作为“应用程序类型”,并保留“名称”为默认的“桌面客户端 1。”(如果您想的话,可以将其更改为不同的名称,但这不会显示给您的Python脚本用户。)点击蓝色的“创建”按钮。

在出现的弹出窗口中,点击“下载JSON”以下载凭证文件。此凭证JSON文件将有一个类似 client_secret_282792235794-p2o9gfcub4htibfg2u207gcomco9nqm7.apps.googleusercontent.com.json 的名称。将其放在与您的Python脚本相同的文件夹中。

使用凭证文件登录

从与凭证JSON文件相同的文件夹中运行Python交互式外壳,并运行 import ezsheets。或者,将一个 .py Python程序放在此文件夹中,并让它运行 import ezsheets。EZSheets将加载并自动检查此文件夹中的凭证JSON文件,如果找到,则打开您的网络浏览器到OAuth同意屏幕。使用您想从Python脚本访问的Google帐户登录。这必须是您在配置Google Cloud项目的OAuth同意屏幕时提供的“测试用户”的相同电子邮件地址。

您将收到一条警告消息,内容为“Google尚未验证此应用程序”,但这没关系,因为这正是您刚刚创建的应用程序(或项目)。点击继续链接。您将来到另一个页面,上面写着“Python Google API Script想要访问您的Google帐户”(或OAuth同意屏幕设置中给出的任何名称)。点击继续。

您将来到一个简单的网页,上面写着“身份验证流程已完成”。现在您可以关闭浏览器窗口。在您的凭证JSON文件相同的文件夹中,您现在将看到 token-drive.pickletoken-sheets.pickle 文件。将这些文件当作密码,不要分享:它们可以用来登录并访问您的Google Sheets电子表格。

快速入门指南

在您设置了凭证和令牌文件后,您可以使用EZSheets访问您的Google Sheets。通过使用电子表格的URL创建一个 Spreadsheet 对象。

>>> import ezsheets
>>> s = ezsheets.Spreadsheet('https://docs.google.com/spreadsheets/d/16RWH9XBBwd8pRYZDSo9EontzdVPqxdGnwM5MnP6T48c/edit#gid=0')

您也可以只提供URL中的电子表格ID部分。

>>> s = ezsheets.Spreadsheet('16RWH9XBBwd8pRYZDSo9EontzdVPqxdGnwM5MnP6T48c')

Spreadsheet 对象具有 titlespreadsheetId 属性。

>>> s.title
'Class Data Example'
>>> s.title = 'Class Data'
>>> s.title
'Class Data'
>>> s.spreadsheetId
'16RWH9XBBwd8pRYZDSo9EontzdVPqxdGnwM5MnP6T48c'

Spreadsheet 对象还具有一个 sheets 属性,它是一个包含 Sheet 对象的列表。

>>> s.sheets
(Sheet(title='Sheet3', sheetId=314007586, rowCount=1000, columnCount=26), Sheet(title='Foobar', sheetId=2075929783, rowCount=1000, columnCount=27), Sheet(title='Class Data', sheetId=0, rowCount=101, columnCount=22, frozenRowCount=1), Sheet(title='Sheet2', sheetId=880141843, rowCount=1000, columnCount=26))
>>> s.sheetTitles
('Sheet3', 'Foobar', 'Class Data', 'Sheet2')
>>> sh = s.sheets[0]

然后您可以查看工作表的尺寸和标题。

>>> sh = s.sheets[0]
>>> sh.title
'Sheet3'
>>> sh.title = 'My New Title'
>>> sh.title
'My New Title'
>>> sh.columnCount, sh.rowCount
(26, 1000)

您还可以获取或更新特定单元格、行或列中的数据。

>>> sh.get(1,1)
'fads'
>>> sh.update(1, 1, 'New cell value')
>>> sh.getRow(1)
['New cell value', 'fe', 'fa', 'ewafwe', 'f', 'ew', 'ewafawef', 'ewf', 'ewf', 'ew', 'fewa', 'f', 'ew', '', '', '', '', '', '', 'ewf', 'ewafewaf', 'ewfewf', '', 'f', 'ewfewafewaf', 'ewfew']
>>> sh.updateRow(['cell A', 'cell B', 'cell C'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: updateRow() missing 1 required positional argument: 'values'
>>> sh.updateRow(1, ['cell A', 'cell B', 'cell C'])
>>> sh.getColumn(1)
['cell A']
>>> sh.update(1, 2, 'another value')
>>> sh.getColumn(1)
['cell A', 'another value']
>>> sh.updateAll([['CELL A', 'ANOTHER VALUE', 'CELL C'], ['ANOTHER VALUE']])
>>> sh.getRows()
[['CELL A', 'ANOTHER VALUE', 'CELL C'], ['ANOTHER VALUE']]

如果Google电子表格中的数据发生变化,您可以刷新您本地数据副本。

>>> sh.refresh() # Updates the Sheet object.
>>> s.refresh()  # Updates the Spreadsheet object and all its sheets.

您还可以重新排列电子表格中工作表的顺序。

>>> s.sheetTitles
('My New Title', 'Foobar', 'Class Data', 'Sheet2')
>>> s.sheets[0].index
0
>>> s.sheets[0].index = 2
>>> s.sheetTitles
('Foobar', 'Class Data', 'My New Title', 'Sheet2')
>>> s.sheets[2].index = 0
>>> s.sheetTitles
('My New Title', 'Foobar', 'Class Data', 'Sheet2')

您还可以重新着色标签。(目前您不能将标签颜色重置为无颜色。)

贡献

如果您想为EZSheets做出贡献,请查看 https://github.com/asweigart/ezsheets

支持

如果您发现这个项目很有帮助,并想支持其开发,请考虑在 Patreon上向其创作者捐赠

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

EZSheets-2024.8.9.tar.gz (44.5 kB 查看哈希值)

上传时间

支持