python导入excel到access_如何使用Python访问(读取和写入)Google表格电子表格?

鲁阳焱
2023-12-01

我想知道是否可以为我提供一个使用python从Google文档/电子表格读取/写入的示例。

我确实在这里https://developers.google.com/google-apps/spreadsheets/上查看了google docs API,但不确定是否点击了正确的链接。 一个例子也会有很大帮助。

我想做的是根据不同的列查询电子表格,更像是SQL查询,然后对数据进行一些下游解析,然后将其放入Google文档中的另一个电子表格或文档中。

最好,

-阿比

code.google.com/p/gdata-python-client

(2016年6月12日)现在,这里的大多数答案已过时:1)GData API是上一代Google API,因此@Josh Brown很难找到旧的GData Docs API文档。尽管并非所有GData API都已被弃用,但所有较新的Google API均未使用Google Data协议; 2)Google发布了新的Google Sheets API(不是GData)。为了使用新的API,您需要获取适用于Python的Google API客户端库(对于pip install -U google-api-python-client [或对于Python 3为pip3一样简单)),并使用最新的Sheets API v4 +,其功能要强大得多并且比旧版API更灵活。

这是官方文档中的一个代码示例,可帮助您入门。但是,以下是您可以从中学习到的使用API??的更长,更多的"实际"示例(视频和博客文章):

将SQL数据迁移到工作表以及代码深入研究帖子

使用Sheets API和代码深入探讨帖子来格式化文本

根据电子表格数据以及代码深入潜水帖子生成幻灯片

最新的Sheets API提供了较早版本中不可用的功能,即为开发人员提供了以编程方式访问Sheet的功能,就好像您正在使用用户界面一样(创建冻结的行,执行单元格格式,调整行/列的大小,添加数据透视表,创建图表等) 。),但并不是好像您可以对数据库进行搜索并从中获取选定的行一样。您基本上必须在执行此操作的API之上构建查询层。一种替代方法是使用Google Charts Visualization API查询语言,它确实支持类似SQL的查询。您还可以从工作表本身进行查询。请注意,此功能在v4 API之前就已存在,并且安全模型已于2016年8月进行了更新。要了解更多信息,请检查我的Google+分享项,以征询Google Developer Expert的全文。

另请注意,Sheets API主要用于如上所述以编程方式访问电子表格的操作和功能,但是要执行文件级访问(例如导入/导出,复制,移动,重命名等),请改用Google Drive API。使用Drive API的示例:

在Google云端硬盘中列出您的文件并进行代码深入探讨

Google云端硬盘:上传和下载文件以及"穷人的纯文本转换为PDF转换器"代码的深入探讨(*)

仅将Google表格导出为CSV博客文章

(*)-TL; DR:将纯文本文件上传到云端硬盘,导入/转换为Google文档格式,然后将该文档导出为PDF。以上发布内容使用Drive API v2;此后续帖子介绍了将其迁移到Drive API v3的过程,这是一个结合了"穷人转换者"帖子的开发人员视频。

要了解有关一般如何将Google API与Python结合使用的更多信息,请查看我的博客以及我制作的各种Google开发人员视频(系列1和系列2)。

ps。就Google Docs而言,目前尚没有REST API,因此以编程方式访问Doc的唯一方法是使用Google Apps脚本(像Node.js一样,它是浏览器之外的JavaScript,但不是这些应用程序运行在Node服务器上,则运行在Google的云中;还请查看我的介绍视频。)使用Apps脚本,您可以构建Docs应用程序或Docs附加组件(以及表格和表单等其他内容)。

2018年7月更新:上面的" ps"。不再是真的。 G Suite开发人员团队在Google Cloud NEXT '18上宣布了新的Google Docs REST API。有兴趣加入新API的早期访问计划的开发人员应在https://developers.google.com/docs上注册。

2019年2月更新:去年7月启动预览的Docs API现在对所有人都可用...阅读启动文章以了解更多详细信息。

谢谢wescpy,这需要解决。

看看GitHub-gspread。

我发现它非常易于使用,因为您可以通过以下方式检索整列

first_col = worksheet.col_values(1)

一整排

second_row = worksheet.row_values(2)

您可以或多或少地构建一些基本选择...,其中... = ...容易。

注意:gspread似乎没有删除行,单元格或列的功能-它只能调整电子表格的大小或清除单元格。这使它对我的目的毫无用处。

我不相信它的gspread就是问题...它的API。较早的Sheets API版本(v1-v3)没有提供该功能。新的v4 API可以删除。请参阅我的答案以获取更多信息。

试试gspread api v4端口pygsheets-在这里作者

我知道这个线程现在已经很旧了,但是这里有一些关于Google Docs API的不错的文档。很难找到它,但是非常有用,所以也许会对您有所帮助。 http://pythonhosted.org/gdata/docs/api.html。

我最近在一个项目中使用gspread来绘制员工时间数据图。我不知道它对您有什么帮助,但是这里有代码链接:https://github.com/lightcastle/employee-timecards

Gspread使我的工作变得很轻松。我还能够添加逻辑来检查各种条件,以创建本月至今的日期和本年至今的结果。但是我只是导入了整个dang电子表格,然后从那里进行了解析,因此我不确定100%是否正是您所要的。祝你好运。

现在第二个链接重定向到第一个

该答案现在已过期。请参阅wescpys答案。

看看api v4的gspread端口-pygsheets。 它应该非常易于使用,而不是使用Google客户端。

样例

import pygsheets

gc = pygsheets.authorize()

# Open spreadsheet and then workseet

sh = gc.open('my new ssheet')

wks = sh.sheet1

# Update a cell with value (just to let him know values is updated ;) )

wks.update_cell('A1',"Hey yank this numpy array")

# update the sheet with array

wks.update_cells('A2', my_nparray.to_list())

# share the sheet with your friend

sh.share("myFriend@gmail.com")

请参阅此处的文档。

在这里写。

pygsheets是gspread的端口还是完整的重写?

它完全重写,尽管api保持几乎相似

很高兴我向下滚动。到目前为止,这对我来说是最简单的解决方案。有关如何创建凭据以授权使用Google表格的一些信息将很有用,例如themarketingtechnologist.co/

@Katu看一下文档,那里有详细的内容。 pygsheets.readthedocs.io/zh-CN/latest/authorizing.html

最新的Google api文档记录了如何使用python写入电子表格,但是导航起来有些困难。这里是一个如何添加示例的链接。

以下代码是我第一次成功附加到Google电子表格的尝试。

import httplib2

import os

from apiclient import discovery

import oauth2client

from oauth2client import client

from oauth2client import tools

try:

import argparse

flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()

except ImportError:

flags = None

# If modifying these scopes, delete your previously saved credentials

# at ~/.credentials/sheets.googleapis.com-python-quickstart.json

SCOPES = 'https://www.googleapis.com/auth/spreadsheets'

CLIENT_SECRET_FILE = 'client_secret.json'

APPLICATION_NAME = 'Google Sheets API Python Quickstart'

def get_credentials():

"""Gets valid user credentials from storage.

If nothing has been stored, or if the stored credentials are invalid,

the OAuth2 flow is completed to obtain the new credentials.

Returns:

Credentials, the obtained credential.

"""

home_dir = os.path.expanduser('~')

credential_dir = os.path.join(home_dir, '.credentials')

if not os.path.exists(credential_dir):

os.makedirs(credential_dir)

credential_path = os.path.join(credential_dir,

'mail_to_g_app.json')

store = oauth2client.file.Storage(credential_path)

credentials = store.get()

if not credentials or credentials.invalid:

flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)

flow.user_agent = APPLICATION_NAME

if flags:

credentials = tools.run_flow(flow, store, flags)

else: # Needed only for compatibility with Python 2.6

credentials = tools.run(flow, store)

print('Storing credentials to ' + credential_path)

return credentials

def add_todo():

credentials = get_credentials()

http = credentials.authorize(httplib2.Http())

discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'

'version=v4')

service = discovery.build('sheets', 'v4', http=http,

discoveryServiceUrl=discoveryUrl)

spreadsheetId = 'PUT YOUR SPREADSHEET ID HERE'

rangeName = 'A1:A'

# https://developers.google.com/sheets/guides/values#appending_values

values = {'values':[['Hello Saturn',],]}

result = service.spreadsheets().values().append(

spreadsheetId=spreadsheetId, range=rangeName,

valueInputOption='RAW',

body=values).execute()

if __name__ == '__main__':

add_todo()

该问题的唯一具体答案。

您可以看看Sheetfu。 以下是自述文件中的示例。 它提供了一种超级简单的语法,可以像与数据库表一样与电子表格进行交互。

from sheetfu import Table

spreadsheet = SpreadsheetApp('path/to/secret.json').open_by_id('')

data_range = spreadsheet.get_sheet_by_name('people').get_data_range()

table = Table(data_range, backgrounds=True)

for item in table:

if item.get_field_value('name') == 'foo':

item.set_field_value('surname', 'bar')              # this set the surname field value

age = item.get_field_value('age')

item.set_field_value('age', age + 1)

item.set_field_background('age', '#ff0000')             # this set the field 'age' to red color

# Every set functions are batched for speed performance.

# To send the batch update of every set requests you made,

# you need to commit the table object as follow.

table.commit()

免责声明:我是这个图书馆的作者。

该线程似乎已经很旧了。

如果仍然有人在寻找,这里提到的步骤非常有效:https://github.com/burnash/gspread。

import gspread

from oauth2client.service_account import ServiceAccountCredentials

import os

os.chdir(r'your_path')

scope = ['https://spreadsheets.google.com/feeds',

'https://www.googleapis.com/auth/drive']

creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)

gc = gspread.authorize(creds)

wks = gc.open("Trial_Sheet").sheet1

wks.update_acell('H3',"I'm here!")

确保将凭据json文件拖放到当前目录中。 将其重命名为client_secret.json。

如果您未使用当前凭据启用Google Sheet API,则可能会遇到错误。

我认为您正在查看该API文档页面中基于单元的提要部分。然后,您可以使用commands.getstatusoutput或subprocess在Python脚本中使用PUT / GET请求。

 类似资料: