我试图使用谷歌api(v4)的电子表格阅读个人电子表格。
我在更改电子表格ID,范围名称和范围时,从谷歌提供的示例中复制了代码
无论我做什么(将电子表格公开等),我都会遇到HttpError:找不到404请求的实体。
我的代码:
import httplib2
import os
from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage
SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly',
'https://www.googleapis.com/auth/spreadsheets',
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/drive.readonly']
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'python'
def get_credentials():
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,
'sheets.googleapis.com-python.json')
store = 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
credentials = tools.run_flow(flow, store, None)
return credentials
def main():
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 = 'ID'
rangeName = 'RANGE'
result = service.spreadsheets().values().get(
spreadsheetId = spreadsheetId, range = rangeName).execute()
答案 0 :(得分:3)
您尚未设置文件/电子表格ID或有效的单元格范围。你还有很多额外的代码,可能包括比你需要的更多的范围。这是一个较短的一个你可以借用,只是转出一个工作表的内容,只需要RO范围:
from pprint import pprint
from apiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
SCOPES = 'https://www.googleapis.com/auth/spreadsheets.readonly'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
creds = tools.run_flow(flow, store)
SHEETS = discovery.build('sheets', 'v4', http=creds.authorize(Http()))
SHEET_ID = 'YOUR_SHEET_DRIVE_FILE_ID'
rows = SHEETS.spreadsheets().values().get(spreadsheetId=SHEET_ID,
range='Sheet1', fields='values').execute().get('values', [])
pprint(rows)
在你运行它之前(它将在没有修改的情况下在Python 2和3上运行),确保你已经......
YOUR_SHEET_DRIVE_FILE_ID
替换为您的实际工作表ID
range
变量更改为指向您要在A1 notation中提取的确切范围 - 我执行了整个默认工作表(名为Sheet1
)如果您仍然遇到任何类型的错误,请将其作为上述OP的更新发布。 FWIW,我已经制作了几个视频,展示了Sheets API的其他用途,以防其他代码示例提供帮助。
(所有较新的视频都将成为this video series的一部分,专注于各种G Suite API。)
答案 1 :(得分:0)
在问题和前面的答案中看到了很多样板代码看似简单的任务我想用pygsheets分享我的食谱。
为了能够从Python脚本访问Google表格API,我已在Google API信息中心注册并选择了Authorizing pygsheets中描述的签名凭据选项。
我已经下载了一个带有Google API凭据的json文件,并将其保存在与我的Python脚本相同的目录中。 json文件包含一个看起来像
的专用电子邮件地址 x-...updater@x...updater.iam.gserviceaccount.com
为了让脚本能够访问我的Google表格,我已经使用json文件中包含的电子邮件地址共享了我的工作表(使用默认设置“可以编辑”)。
然后,访问Google表格的Python代码可能如下所示:
import pygsheets
import pandas as pd
gc = pygsheets.authorize(service_file='service_creds.json')
sh = gc.open('Export Data')
wks_export = sh.worksheet(property='title', value='Export by Month')
# Google worksheet as Pandas dataframe.
export_df = wks_export.get_as_df()
# Here can be done some local operations on the dataframe.
# Updating the worksheet with the values from the modified dataframe.
wks_export.set_dataframe(export_df, start='A1', fit=True)