python - 如何使用 pygsheets(带或不带 Pandas)将 Excel 表格或 CSV 插入 Google 表格?
问题描述
我在 Excel 工作表中有一些数据,我需要通过一个简短的 python 脚本以编程方式将其插入到 Google 工作表中。我正在使用 pygsheets 和 pandas(如果我需要的话)。我已经设置了身份验证内容,并且可以访问要在其中插入数据的工作表;这只是我遇到问题的使用 pygsheets 的实际插入。这是一些代码:
from google.oauth2 import service_account
import pygsheets
import pandas as pd
import json
# set settings file
settings_file = open("/Users/user/Desktop/settings.json", "r").read()
settings = json.loads(settings_file)
creds = settings['oauth_creds']
credentials = service_account.Credentials.from_service_account_info(creds)
scoped_credentials = credentials.with_scopes(
['https://www.googleapis.com/auth/spreadsheets']
)
# set dataframe as excel sheet (saved on Desktop)
new_data = pd.read_excel('/Users/user/Desktop/test-data.xlsx', None)
# instantiate pygsheets with credentials
gc = pygsheets.authorize(custom_credentials=scoped_credentials)
# open spreadsheet with URL
sheet_url = settings['sheet_url']
sh = gc.open_by_url(sheet_url)
# activate correct sheet
sheet_name = settings['data_sheet']
wks = sh.worksheet_by_title(sheet_name)
# empty active sheet
wks.clear()
# add dataframe to active sheet
wks.set_dataframe(new_data,(1,1))
当我运行脚本时,最后一行出现错误:AttributeError: 'OrderedDict' object has no attribute 'replace'
. 知道如何正确地将数据发送到工作表吗?另外,如果它更容易,我可以使用 CSV 来做到这一点;我也不必使用熊猫,如果没有它会更容易。任何帮助表示赞赏!
解决方案
使用 Google 表格生成凭证文件并将其命名为creds.json
:
- 如果您还没有为项目启用 API 访问权限。
- 转到“APIs & Services > Credentials”并选择“Create credentials > Service account key”。
- 填写表格
- 点击“创建密钥”</li>
- 选择“JSON”并点击“创建”</li>
然后尝试:
import pygsheets
def upload_to_gsheet(df, sheet_number):
gc = pygsheets.authorize(service_file=/path/to/creds.json)
sh = gc.open_by_key(spreadsheet_id)
wks = sh[sheet_number]
wks.set_dataframe(df, (1, 1))
推荐阅读
- python - 使用 sqlalchemy ORM 在 Postgres 中插入两个相关表(一对多)
- django - 如何 DJANGO Web 令牌和保存过程 (POST)?
- r - R中的循环颜色图
- google-chrome-extension - 如何在 Chrome 扩展程序中使用 Google Analytics?
- java - Spring Boot 部署到 Heroku:无法访问 jarfile 目标/springApp-0.0.1-SNAPSHOT.jar
- java - 如何更改此代码以使其容易受到 CRLF 注入的影响?
- c# - 请参阅对象的数据类型
- c# - EF Core 3.1 过滤的通用表达式在 .Any(...) 上引发异常
- r - R:按第一个字符的出现次数计数
- python - `pandas.DataFrame.groupby` 的非聚合更新