【发布时间】:2021-12-01 00:10:06
【问题描述】:
我目前正在学习 Python,并且正在尝试为客户创建 Google Sheets API 和 Python 的自动化代码。到目前为止,我的自动化代码已经成功地从网站下载了一个 csv 文件,找到了该文件,并将该文件推送到了 Google 表格。我使用了来自 this 问题的 Ufos 答案中的逻辑。问题是我重复这个过程大约 10 次,谷歌表格上的 csv 数据被新数据覆盖。我的客户希望在一个地方查看所有客户的数据。我试图做附加但不能让它与检索到的 csv 信息一起工作。我已经尽我所能使用谷歌,但我似乎无法让它工作。任何帮助将不胜感激!
def insertIntoSheets(self, email, owner):
creds = service_account.Credentials.from_service_account_file(
self.SERVICE_ACCOUNT_FILE, scopes=self.SCOPES)
service = build('sheets', 'v4', credentials=creds)
# Insert CSV information into Google Sheet
sheet = service.spreadsheets()
csv_path = ""
csv_files = os.listdir(self.DOWNLOADS_PATH)
for csv_file in csv_files:
if csv_file.startswith("lead_export"):
print("CSV path found")
csv_path = os.path.join(self.DOWNLOADS_PATH, csv_file)
print(f'CSV_PATH: {csv_path}')
if csv_path == "":
print("No CSV file detected. Must not have downloaded. Please try again.")
else:
#add email and owner
values = (
(owner, email),
)
value_range_body = {
'majorDimension': 'ROWS',
'values': values
}
service.spreadsheets().values().append(spreadsheetId=self.DATA_SPREADSHEET_ID,
valueInputOption='USER_ENTERED',
range="Sheet1!A1",
body=value_range_body).execute()
#add CSV to Google Sheets
print(f'Attempting to upload CSV file for {email}')
with open(csv_path, 'r') as csv_file:
csvContents = csv_file.read()
body = {
'requests': [
{
'pasteData': {
"coordinate": {
"sheetId": [sheetId],
"rowIndex": "0", # adapt this if you need different positioning
"columnIndex": "0", # adapt this if you need different positioning
},
"data": csvContents,
"type": 'PASTE_NORMAL',
"delimiter": ',',
}
}
]
}
request = sheet.batchUpdate(spreadsheetId=self.DATA_SPREADSHEET_ID, body=body)
response = request.execute()
print(f'Deleting CSV file for {email} account')
deleted = self.removeCSV()
if deleted == 0:
print(f'No CSV files detected for {email}')
else:
print(f'{deleted} CSV files deleted for {email}.')
return response
【问题讨论】:
-
您能否更新您的代码,使其符合创建minimal reproducible example 的指南?
-
我必须为我糟糕的英语水平道歉。关于
The problem is that I repeat this process about 10 times the csv data on the Google Sheet gets overridden by the new data.,在这种情况下,当您重复您的过程少于 10 次时,工作表不会被新数据覆盖。我的理解正确吗? -
@Tanaike 不用担心!不,这个函数是循环调用的,每次都会覆盖数据。在请求中,rowIndex 和 columnIndex 保持不变,因此数据总是在 Google 表格的开头抛出。我需要以某种方式附加数据。我见过很多附加到 Google 表格的示例,但它们不使用 csv 文件。他们通常有手动为行和列输入的数据。
-
感谢您的回复。从您的回复中,我提出了一个修改点作为答案。你能确认一下吗?如果我误解了您的问题并且对您的情况没有帮助,我深表歉意。
标签: python google-sheets google-sheets-api