2 回答

TA貢獻1862條經驗 獲得超7個贊
您想將一行追加到電子表格最后一行的下一行。
您想附加一行,如日期值
dd/mm/yyyy
、數據驗證、0%
格式數和數字。您想將 的值
05/05/2019, UK, 8%, 9
作為顯示值。您想使用 gspread 和 python 來實現這一點。
您已經能夠使用 Sheets API 獲取和放置電子表格的值。
如果我的理解是正確的,那么這個示例腳本怎么樣?在這個示例腳本中,我使用了batch_update
gspread 的方法。gspread 的方法batch_upate
是 Sheets API 的電子表格.batchUpdate 方法。該行由 appendCells 請求附加。
示例腳本:
示例腳本如下。在運行腳本之前,請設置電子表格 ID 和工作表名稱。在此腳本中,Tab One
用作工作表名稱。
gc = gspread.authorize(credentials)
spreadsheet_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
sheetName = "Tab One"
spreadsheet = gc.open_by_key(spreadsheet_id)
sheetId = spreadsheet.worksheet(sheetName)._properties['sheetId']
body = {'requests':
[
{
'appendCells':
{
'rows':
[
{
'values':
[
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'DATE',
'pattern': 'dd/mm/yyyy'
}
},
'dataValidation':
{
'condition':
{
'type': 'DATE_IS_VALID'
},
'strict': True
},
'userEnteredValue':
{
'numberValue': 43590 # This is the serial number of "05/05/2019".
}
},
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'NUMBER',
'pattern': '#,##0.00'
},
'verticalAlignment': 'BOTTOM'
},
'dataValidation':
{
'condition':
{
'type': 'ONE_OF_LIST',
'values':
[
{
'userEnteredValue': 'UK'
},
{
'userEnteredValue': 'ES'
},
{
'userEnteredValue': 'IT'
},
{
'userEnteredValue': 'DE'
},
{
'userEnteredValue': 'AT'
},
{
'userEnteredValue': 'NL'
}
]
},
'showCustomUi': True
},
'userEnteredValue':
{
'stringValue': 'UK'
}
},
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'PERCENT',
'pattern': '0%'
}
},
'userEnteredValue':
{
'numberValue': 0.08
}
},
{
'userEnteredValue':
{
'numberValue': 9
}
}
]
}
],
'sheetId': sheetId,
'fields': '*'
}
}
]
}
res = spreadsheet.batch_update(body)
print(res)
筆記:
當05/05/2019作為格式的日期輸入時dd/mm/yyyy,請輸入編號為43590序號。
添加:
當你想在for循環(huán)中使用請求體時,下面的腳本怎么樣?batchUpdate 方法可以與數組一起使用。
gc = gspread.authorize(credentials)
spreadsheet_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
sheetName = "Tab One"
spreadsheet = gc.open_by_key(spreadsheet_id)
sheetId = spreadsheet.worksheet(sheetName)._properties['sheetId']
requests = []
for x in range(len(new_values)): # Please set "new_values".
body = {
'appendCells':
{
'rows':
[
{
'values':
[
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'DATE',
'pattern': 'dd/mm/yyyy'
}
},
'dataValidation':
{
'condition':
{
'type': 'DATE_IS_VALID'
},
'strict': True
},
'userEnteredValue':
{
'numberValue': new_values[x][0]
}
},
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'NUMBER',
'pattern': '#,##0.00'
},
'verticalAlignment': 'BOTTOM'
},
'dataValidation':
{
'condition':
{
'type': 'ONE_OF_LIST',
'values':
[
{
'userEnteredValue': 'UK'
},
{
'userEnteredValue': 'ES'
},
{
'userEnteredValue': 'IT'
},
{
'userEnteredValue': 'DE'
},
{
'userEnteredValue': 'AT'
},
{
'userEnteredValue': 'NL'
}
]
},
'showCustomUi': True
},
'userEnteredValue':
{
'stringValue': new_values[x][1]
}
},
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'PERCENT',
'pattern': '0%'
}
},
'userEnteredValue':
{
'numberValue': new_values[x][2]
}
},
{
'userEnteredValue':
{
'numberValue': new_values[x][2]
}
}
]
}
],
'sheetId': sheetId,
'fields': '*'
}
}
requests.append(body)
res = spreadsheet.batch_update({'requests':requests})
print(res)

TA貢獻1864條經驗 獲得超6個贊
我的版本基于 Tanaike 的回答:
#List of rows with values
new_values = [[43590,'UK',0.08,9],[43590,'DE',0.07,8]]
#connect to the google sheet and tab
sheetName = "Tab One"
spreadsheet = gc.open_by_key(spreadsheet_id)
sheetId = spreadsheet.worksheet(sheetName)._properties['sheetId']
#Add each value/row
for x in range(len(new_values)):
#print(new_values[x])
body = {'requests':
[
{
'appendCells':
{
'rows':
[
{
'values':
[
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'DATE',
'pattern': 'dd/mm/yyyy'
}
},
'dataValidation':
{
'condition':
{
'type': 'DATE_IS_VALID'
},
'strict': True
},
'userEnteredValue':
{
'numberValue': new_values[x][0] # This is the serial number of "05/05/2019".
}
},
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'NUMBER',
'pattern': '#,##0.00'
},
'verticalAlignment': 'BOTTOM'
},
'dataValidation':
{
'condition':
{
'type': 'ONE_OF_LIST',
'values':
[
{
'userEnteredValue': 'UK'
},
{
'userEnteredValue': 'ES'
},
{
'userEnteredValue': 'IT'
},
{
'userEnteredValue': 'DE'
},
{
'userEnteredValue': 'AT'
},
{
'userEnteredValue': 'NL'
}
]
},
'showCustomUi': True
},
'userEnteredValue':
{
'stringValue': new_values[x][1]
}
},
{
'userEnteredFormat':
{
'numberFormat':
{
'type': 'PERCENT',
'pattern': '0%'
}
},
'userEnteredValue':
{
'numberValue': new_values[x][2]
}
},
{
'userEnteredValue':
{
'numberValue': new_values[x][3]
}
}
]
}
],
'sheetId': sheetId,
'fields': '*'
}
}
]
}
res = spreadsheet.batch_update(body)
身體在每個循環(huán)中都被拉動。如果您認為這不是最好的方法(循環(huán)身體),您可以評論任何替代方案。有一個循環(huán)并將values數組附加到 body 對象中可能更容易。
添加回答
舉報