这就是我想要做的:
data = drive.files().get_media(fileId=fileId).execute()
csvData = [row.split(",") for row in str(data, 'latin-1').split("\n")]
ar = []
temp = []
for i, row in enumerate(csvData):
if "".join(row) != "":
temp.append(row)
else:
ar.append(temp)
temp = []
if i == len(csvData) - 1:
ar.append(temp)
# Create request body for the method of spreadsheets.create of Sheets API. [Tanaike]
sheetsObj = []
for sheet in ar:
tempRow = []
for row in sheet:
tempCol = []
for col in row:
tempCol.append({"userEnteredValue": {"stringValue": col}})
if len(tempCol) != 0:
tempRow.append({"values": tempCol})
if len(tempRow) != 0:
sheetsObj.append({"data": [{"rowData": tempRow}]})
# Request to Sheets API. [Tanaike]
body = {"properties": {"title": "spreadsheetTitle"}, "sheets": sheetsObj}
res = sheets.spreadsheets().create(body=body).execute()
print(res)
我最近问了一个有关通过Google API将文件上传到Google驱动器的问题。我在代码上取得了成功,但是现在我意识到我需要一个单独的代码,而不是将数据上传到新文件中,而是更新现有的Google表格。
我一直在努力应对batchUpdate()(https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/batchUpdate),因为我不知道如何将我的sheetsObj旧解决方案放入其中。
想法与此处相同:Google docs formatting, converting texts into sheets
我希望使用.txt格式的数据更新现有的Google表格文件,但我希望不仅更新并创建新文件,还希望更新当前具有的现有google表格文件。
ps .:发生一种奇怪的事情,我之前没有注意到:所有单元格都以'
开头,我正在尝试处理它,但是如果有人在执行之前弄清楚了,请将其包含在解决方案中。
答案 0 :(得分:2)
您要使用来自以下值的CSV数据更新现有的电子表格。值来自Google docs formatting, converting texts into sheets
ID, NAME, MOBILE, CITY, COUNTRY, BIRTHDAY,
3, NameGoesHere1, 21 98658 5548, abcity, countryNameHere, 1998-05-02,
6, SomeoneElse Joined Here, 21 98535 1218, whereland, Far far away, 1989-11-15,
5, AnotherCustomer, 21 85482 5245, somecity, Somewhereland, 1999-08-04,
ID, PRICE, STOCK, ASDF, BASDF, CASDF,
ID, NAME, PRICE, DESCRIPTION,
2, pen, 1.5, The pen is mightier than the sword,
3, pencil, 1.0, Can be used to write,
4, RPG, 150.0, well that escalated quickly, huh,
EMPTY,
names,
goofs,
ID, FLAVOR,
现有电子表格有5张,可使用5张CSV数据进行更新。
如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。
在运行脚本之前,请设置变量csvFileId
,spreadsheetId
和sheetNames
。
csvFileId = '###' # Please set the CSV file ID.
spreadsheetId = '###' # Please set the Spreadsheet ID.
sheetNames = ['Sheet1', 'Sheet2', 'Sheet3', 'Sheet4', 'Sheet5'] # Please set the sheet names in the Spreadsheet for updating.
sheets = build('sheets', 'v4', credentials=creds)
drive = build('drive', 'v3', credentials=creds)
# Retrieve data from Google Drive and parse data as an array.
data = drive.files().get_media(fileId=csvFileId).execute()
csvData = [row.split(",") for row in str(data, 'utf-8').split("\n")]
ar = []
temp = []
for i, row in enumerate(csvData):
if "".join(row) != "":
row = [v.strip() for v in row]
temp.append(row)
else:
ar.append(temp)
temp = []
if i == len(csvData) - 1:
ar.append(temp)
valuesUpdateReq = []
for i, sheet in enumerate(ar):
if bool(sheet):
sheetName = sheetNames[i]
valuesUpdateReq.append({"values": sheet, "range": sheetName, "majorDimension": "ROWS"})
# Request to Sheets API.
batch_update_values_request_body = {"data": valuesUpdateReq, "valueInputOption": "USER_ENTERED"}
res = sheets.spreadsheets().values().batchUpdate(spreadsheetId=spreadsheetId, body=batch_update_values_request_body).execute()
print(res)
如果我误解了您的问题,而这不是您想要的方向,我深表歉意。