【问题标题】:Changing column format in google sheets by gspread and google sheets API通过 gspread 和 google sheet API 更改 google sheet 中的列格式
【发布时间】:2023-03-26 07:00:01
【问题描述】:

我正在使用 gspread,并且正在寻找一种通过脚本更改列格式的正确方法。我有一个包含持续时间的列。我想将整个列的格式更改为duration。在 Google UI 中,我可以标记整个列,然后单击格式,然后编号并设置 duration。是否可以通过 gspread/google sheet 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)")

【问题讨论】:

  • 您想使用 gspread 修改单元格的格式。我认为你的目标可以实现。如果你想要一个示例脚本,我可以问你你的情况吗?您已经能够使用 gspread 和 python 获取和放置 Google 电子表格的值。我的理解正确吗?另外,你能提供你当前的脚本吗?
  • 是的,已经完成了,我通过 python 中的脚本将我的值放到了 Google 电子表格中,但是我的列格式有问题。我的示例脚本在我的问题中。
  • 感谢您的回复和补充信息。我提出了一个示例脚本。你能确认一下吗?如果我误解了您的问题并且这不是您想要的方向,我深表歉意。届时,请提供包含您期望的输入和输出的示例电子表格。借此,我想确认一下。当然,请删除您的个人信息。

标签: python google-sheets-api gspread


【解决方案1】:
  • 您想更改 Google 电子表格中列的格式。
    • 在您的情况下,列中有持续时间的值。您想更改持续时间的格式。
  • 您希望使用 gspread 和 python 来实现此目的。
  • 您已经能够使用带有 gspread 的 Sheets API 获取和放置电子表格的值。

如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

修改点:

  • 为了更改列的格式,使用 Sheets API 中的电子表格.batchUpdate 方法和电子表格.batchUpdate 方法的“RepeatCellRequest”。在gspread,电子表格.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)
  • 作为测试用例,当“A”列的第1行(单元格“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
  • 这是一个简单的示例脚本。所以请根据您的实际情况进行修改。特别是,请根据您的实际情况修改格式模式。因为我不确定你的实际情况。

参考资料:

【讨论】:

  • 像魅力一样工作!格式 [h]:mm:ss 是我要找的。非常感谢!
  • @jaro0 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
最近更新 更多