如何使用 Google 工作表 API 和 Python 附加 CSV 数据
How to append CSV data with Google Sheets API and Python
我目前正在学习 Python,我正在尝试为客户创建 Google Sheets API 和 Python 的自动化代码.到目前为止,通过我的自动化代码,我已经成功地从网站下载了一个 csv 文件,找到了该文件,并将该文件推送到 Google 个工作表。我从 问题的 Ufos 的回答中使用了我的逻辑。问题是我重复这个过程大约 10 次 Google Sheet 上的 csv 数据被新数据覆盖。我的客户想在一个地方查看所有客户的数据。我曾尝试执行附加操作,但无法使其与检索到的 csv 信息一起使用。我已通过使用 Google 尽力而为,但我似乎无法让它发挥作用。任何帮助将不胜感激!
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
我相信你的目标如下。
- 您想将文件中的 CSV 数据附加到 Google Spreadsheet。
- 您想要使用 googleapis 实现此目的 python。
- 您已经能够使用 Sheets API.
获取和放置 Google Spreadsheet 的值
这样的话,下面的修改怎么样?
修改后的脚本:
请按如下方式修改您的脚本。
发件人:
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()
收件人:
with open(csv_path, newline='') as f:
reader = csv.reader(f)
values = list(reader)
response = service.spreadsheets().values().append(spreadsheetId=spreadsheetId, valueInputOption='USER_ENTERED', range="Sheet1", body={"values": values}).execute()
- 在此修改中,使用
import csv
。
- 请根据实际情况修改
"Sheet1"
的sheet名称。
- 在此修改中,CSV 数据作为列表从文件中检索,并使用 spreadsheets.values.append 方法将该列表作为附加值放入 Spreadsheet。
参考:
我目前正在学习 Python,我正在尝试为客户创建 Google Sheets API 和 Python 的自动化代码.到目前为止,通过我的自动化代码,我已经成功地从网站下载了一个 csv 文件,找到了该文件,并将该文件推送到 Google 个工作表。我从
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
我相信你的目标如下。
- 您想将文件中的 CSV 数据附加到 Google Spreadsheet。
- 您想要使用 googleapis 实现此目的 python。
- 您已经能够使用 Sheets API. 获取和放置 Google Spreadsheet 的值
这样的话,下面的修改怎么样?
修改后的脚本:
请按如下方式修改您的脚本。
发件人:
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()
收件人:
with open(csv_path, newline='') as f:
reader = csv.reader(f)
values = list(reader)
response = service.spreadsheets().values().append(spreadsheetId=spreadsheetId, valueInputOption='USER_ENTERED', range="Sheet1", body={"values": values}).execute()
- 在此修改中,使用
import csv
。 - 请根据实际情况修改
"Sheet1"
的sheet名称。 - 在此修改中,CSV 数据作为列表从文件中检索,并使用 spreadsheets.values.append 方法将该列表作为附加值放入 Spreadsheet。