首页 > 解决方案 > “工作表”对象没有属性“电子表格”

问题描述

这是我第一次使用 google sheet api。所以,我试图加粗谷歌工作表的第一行。但是这样做时出现错误“工作表”对象没有属性“电子表格”。我已经提到了下面的代码。请指出我做错了什么。

import gspread
from oauth2client.service_account import ServiceAccountCredentials
from pprint import pprint
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/spreadsheets",
         "https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json",scope)

client = gspread.authorize(creds)
sheet = client.open("SheetsAPI Practice").sheet1

req = { "repeatCell": {
        "range": {
            "sheetId": 0,
            "startRowIndex": 0,
            "endRowIndex": 1
        },
        "cell": {
            "userEnteredFormat": {
                "textFormat": {
                    "bold": True        
                }
            }
        },
        "fields": "userEnteredFormat.textFormat.bold"
    }
}

sheet.spreadsheets().batchUpdate(spreadsheetId=sheet.id,body=req).execute()

错误发生在这一行 -

sheet.spreadsheets().batchUpdate(spreadsheetId=sheet.id,body=req).execute()

标签: pythonexcelgoogle-sheets-api

解决方案


  • 您想使用 Sheets API 中的 batchUpdate 方法。
  • 您想使用 gspread 和 python 来实现这一点。
  • 您已经能够获取和放置 Google 电子表格的值。

如果我的理解是正确的,这个答案怎么样?

修改点:

  • 在 gspread 中,没有spreadsheets()in的方法client.open("SheetsAPI Practice").sheet1。在您的脚本中,您正在尝试将 python 的 googleapis 方法与 gspread 一起使用。错误消息的原因是这样的。
  • gspread 具有在 Sheets API 中使用 batchUpdate 的方法。所以你可以使用这个,什么时候client = gspread.authorize(creds)可以用于你想要使用的 Google 电子表格。
  • 您的请求正文需要修改。当您使用reqbatchUpdate 方法时,请放入数组中,如{"requests": [req]}.

当以上几点反映到您的脚本时,它变成如下。

修改后的脚本:

从:
sheet = client.open("SheetsAPI Practice").sheet1

req = { "repeatCell": {
        "range": {
            "sheetId": 0,
            "startRowIndex": 0,
            "endRowIndex": 1
        },
        "cell": {
            "userEnteredFormat": {
                "textFormat": {
                    "bold": True
                }
            }
        },
        "fields": "userEnteredFormat.textFormat.bold"
    }
}

sheet.spreadsheets().batchUpdate(spreadsheetId=sheet.id,body=req).execute()
至:
spreadsheet = client.open("SheetsAPI Practice")
req = {
    "requests": [
      {
          "repeatCell": {
              "range": {
                  "sheetId": 0,
                  "startRowIndex": 0,
                  "endRowIndex": 1
              },
              "cell": {
                  "userEnteredFormat": {
                      "textFormat": {
                          "bold": True
                      }
                  }
              },
              "fields": "userEnteredFormat.textFormat.bold"
          }
      }
    ]
}
spreadsheet.batch_update(req)
  • 运行此修改后的脚本时,第一行的文本变为粗体。

笔记:

  • 此修改后的脚本假定服务帐户可以使用 Google 电子表格。请注意这一点。

参考:


推荐阅读