通过 gspread 和 google 工作表 API 更改 google 工作表中的列格式
Changing column format in google sheets by gspread and google sheets API
我正在使用 gspread,我正在寻找一种通过脚本更改列格式的正确方法。我有一列持续时间。我想将整个列的格式更改为 duration
。在 Google UI 中,我可以标记整个列,然后单击格式,然后单击编号并设置 持续时间 。 gspread/google张API可以做到吗?
编辑
client = gspread.authorize(credentials)
try:
sheet = client.open(sys.argv[1]).sheet1
except (gspread.SpreadsheetNotFound, IndexError):
print("Spreadsheet not found")
sys.exit()
try:
tags = sheet.col_values(13)
tags.remove('Tags')
unique_tags = list(dict.fromkeys(tags))
except ValueError:
print("Your spreadsheet cannot be modified and should contain original
columns from toggle reports.")
sys.exit()
START_INDEX = 7
sheet.update_cell(6, 15, "SUM")
for tag in unique_tags:
sheet.update_cell(START_INDEX, 15, tag)
sheet.update_cell(START_INDEX, 16, "=SUMIF(M2:M; " + '"' + tag + '"' + ";
L2:L)")
START_INDEX += 1
sheet.update_cell(6, 16, "=SUM(P7:P15)")
- 您想更改 Google 电子表格中列的格式。
- 在您的情况下,一列中有持续时间的值。您想要更改持续时间的格式。
- 您想使用带有 python 的 gspread 来实现此目的。
- 您已经能够使用表格 API 和 gspread 为电子表格获取和放置值。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 为了改变列的格式,使用了SheetsAPI中spreadsheets.batchUpdate的方法和spreadsheets.batchUpdate的方法"RepeatCellRequest"。在gspread,spreadsheets.batchUpdate的方法可以作为
batch_update(body)
.
修改后的脚本:
在此修改中,使用了您问题中脚本的顶部。
try:
spreadsheet = client.open(sys.argv[1]) # Modified
sheet = spreadsheet.sheet1 # Added
except (gspread.SpreadsheetNotFound, IndexError):
print("Spreadsheet not found")
sys.exit()
# I added below script.
requests = [{
"repeatCell": {
"range": {
"startColumnIndex": 0,
"endColumnIndex": 1,
"sheetId": sheet._properties['sheetId']
},
"cell": {
"userEnteredFormat": {
"numberFormat": {
"type": "TIME",
"pattern": "[m]:s"
}
}
},
"fields": "userEnteredFormat.numberFormat"
}
}]
body = {
'requests': requests
}
res = spreadsheet.batch_update(body)
print(res)
- 作为测试用例,当第 1 列 "A"(单元格 "A1")的持续时间为
1:23:45
时,上面的脚本(格式模式为[m]:s
.) 是 运行,1:23:45
变成 83:45
。
- 顺便说一句,
1:23:45
的格式模式作为持续时间是[h]:mm:ss
。
- 如果格式模式为
[s]
,1:23:45
变为 5025
。
注:
- 当您使用此脚本时,我建议使用示例电子表格。因为格式被脚本改变了。
- 在上述修改后的脚本中,
sys.argv[1]
电子表格名称中第一个选项卡上的列 "A" 的持续时间格式更改为 [m]:s
。
- 这是一个简单的示例脚本。所以请根据自己的实际情况进行修改。特别是,请根据您的实际情况修改格式模式。因为我不确定你的实际情况。
参考文献:
- batch_update(body)
- Method: spreadsheets.batchUpdate
- RepeatCellRequest
对于时长的模式,官方文档是这样说的
[h+]
: Number of elapsed hours in a time duration. Number of letters indicates minimum number of digits (adds leading 0s).
[m+]
: Number of elapsed minutes in a time duration. Number of letters indicates minimum number of digits (adds leading 0s).
[s+]
: Number of elapsed seconds in a time duration. Number of letters indicates minimum number of digits (adds leading 0s).
我正在使用 gspread,我正在寻找一种通过脚本更改列格式的正确方法。我有一列持续时间。我想将整个列的格式更改为 duration
。在 Google UI 中,我可以标记整个列,然后单击格式,然后单击编号并设置 持续时间 。 gspread/google张API可以做到吗?
编辑
client = gspread.authorize(credentials)
try:
sheet = client.open(sys.argv[1]).sheet1
except (gspread.SpreadsheetNotFound, IndexError):
print("Spreadsheet not found")
sys.exit()
try:
tags = sheet.col_values(13)
tags.remove('Tags')
unique_tags = list(dict.fromkeys(tags))
except ValueError:
print("Your spreadsheet cannot be modified and should contain original
columns from toggle reports.")
sys.exit()
START_INDEX = 7
sheet.update_cell(6, 15, "SUM")
for tag in unique_tags:
sheet.update_cell(START_INDEX, 15, tag)
sheet.update_cell(START_INDEX, 16, "=SUMIF(M2:M; " + '"' + tag + '"' + ";
L2:L)")
START_INDEX += 1
sheet.update_cell(6, 16, "=SUM(P7:P15)")
- 您想更改 Google 电子表格中列的格式。
- 在您的情况下,一列中有持续时间的值。您想要更改持续时间的格式。
- 您想使用带有 python 的 gspread 来实现此目的。
- 您已经能够使用表格 API 和 gspread 为电子表格获取和放置值。
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
修改点:
- 为了改变列的格式,使用了SheetsAPI中spreadsheets.batchUpdate的方法和spreadsheets.batchUpdate的方法"RepeatCellRequest"。在gspread,spreadsheets.batchUpdate的方法可以作为
batch_update(body)
.
修改后的脚本:
在此修改中,使用了您问题中脚本的顶部。
try:
spreadsheet = client.open(sys.argv[1]) # Modified
sheet = spreadsheet.sheet1 # Added
except (gspread.SpreadsheetNotFound, IndexError):
print("Spreadsheet not found")
sys.exit()
# I added below script.
requests = [{
"repeatCell": {
"range": {
"startColumnIndex": 0,
"endColumnIndex": 1,
"sheetId": sheet._properties['sheetId']
},
"cell": {
"userEnteredFormat": {
"numberFormat": {
"type": "TIME",
"pattern": "[m]:s"
}
}
},
"fields": "userEnteredFormat.numberFormat"
}
}]
body = {
'requests': requests
}
res = spreadsheet.batch_update(body)
print(res)
- 作为测试用例,当第 1 列 "A"(单元格 "A1")的持续时间为
1:23:45
时,上面的脚本(格式模式为[m]:s
.) 是 运行,1:23:45
变成83:45
。- 顺便说一句,
1:23:45
的格式模式作为持续时间是[h]:mm:ss
。
- 顺便说一句,
- 如果格式模式为
[s]
,1:23:45
变为5025
。
注:
- 当您使用此脚本时,我建议使用示例电子表格。因为格式被脚本改变了。
- 在上述修改后的脚本中,
sys.argv[1]
电子表格名称中第一个选项卡上的列 "A" 的持续时间格式更改为[m]:s
。 - 这是一个简单的示例脚本。所以请根据自己的实际情况进行修改。特别是,请根据您的实际情况修改格式模式。因为我不确定你的实际情况。
参考文献:
- batch_update(body)
- Method: spreadsheets.batchUpdate
- RepeatCellRequest
对于时长的模式,官方文档是这样说的
[h+]
: Number of elapsed hours in a time duration. Number of letters indicates minimum number of digits (adds leading 0s).[m+]
: Number of elapsed minutes in a time duration. Number of letters indicates minimum number of digits (adds leading 0s).[s+]
: Number of elapsed seconds in a time duration. Number of letters indicates minimum number of digits (adds leading 0s).