使用 gspread 库检查工作簿是否存在?

问题描述 投票:0回答:2

如何使用 gspread 库检查工作簿是否存在? 我的问题是,如果我第二次运行 gspread.create(title) 它不会重写前一个文件,而是创建另一个同名文件。知道如何避免吗?

谢谢。 石油

google-drive-api gspread
2个回答
2
投票

您可以使用 try/except + gc.open():

检查
from gspread.exceptions import SpreadsheetNotFound

spreadsheetName = '' # Enter your spreadsheet name
gc = gspread.authorize(credentials)

try:
    gc.open(spreadsheetName)
    # Code if spreadsheet exists:
    print("Spreadsheet exists")
except SpreadsheetNotFound:
    # Code if spreadsheet doesn't exist:
    print("Spreadsheet doesn't exist")

如果存在电子表格,则 gc.open() 返回值并运行 try 块。

如果电子表格不存在,则 gc.open() 引发错误“SpreadsheetNotFound”并且运行 except 块。


1
投票

我相信你的目标如下。

  • 您想使用电子表格名称检查电子表格是否存在。
  • 当Spreadsheet不存在时,想要创建新的Spreadsheet,并检索创建的Spreadsheet。
  • 当电子表格存在时,您想要检索现有的电子表格。
  • 您想使用 gspread.

在这种情况下,为了使用电子表格名称检查电子表格是否存在,需要使用Drive API。示例脚本如下

示例脚本:

请复制粘贴以下脚本。此脚本不包含授权脚本。所以,请添加您的脚本来检索

client = gspread.authorize(credentials)
.

spreadsheetName = "sample Spreadsheet name" # Please set the Spreadsheet name you want to check.

client = gspread.authorize(credentials)
url = "https://www.googleapis.com/drive/v3/files?q=mimeType%3D%27application%2Fvnd.google-apps.spreadsheet%27%20and%20name%3D%27" + spreadsheetName + "%27%20"
res = requests.get(url, headers={"Authorization": "Bearer " + credentials.access_token})
files = res.json().get("files")
spreadsheet = client.open_by_key(files[0]['id']) if files else client.create(spreadsheetName)

# Sample script for testing "spreadsheet".
sheetNameOf1stTab = spreadsheet.sheet1.title
print(sheetNameOf1stTab)
  • 在这种情况下。请添加
    import requests
    。 The Drive API中“Files: list”的方法是配合
    request
    库使用的
  • 当上面的脚本运行时,首先,使用“Files: list in The Drive API v3”的方法搜索
    spreadsheetName
    的Spreadsheet名称。并且,当Spreadsheet存在时,将现有的Spreadsheet检索为Spreadsheet对象对于 gspread。当电子表格不存在时,将创建新的电子表格并检索为 gspread 创建的电子表格对象。
  • 如果您想从特定文件夹中搜索电子表格,请使用
    url = "https://www.googleapis.com/drive/v3/files?q=mimeType%3D%27application%2Fvnd.google-apps.spreadsheet%27%20and%20name%3D%27" + spreadsheetName + "%27%20and%20%27" + folderId + "%27%20in%20parents"
    • 在这种情况下,请设置
      folderId
      .

注:

  • 如果发生与范围相关的错误,请包括
    https://www.googleapis.com/auth/drive
    https://www.googleapis.com/auth/drive.readonly
    .

参考:

2023 年 3 月 17 日更新:

现阶段可使用

openall
方法,使用电子表格标题检查电子表格是否存在。
openall
返回列表中的电子表格对象。在这种情况下,当未找到电子表格对象时,将返回空列表。我认为这可以用于检查带有标题的现有电子表格。示例脚本如下

示例脚本:

import gspread

client = gspread.oauth(###) # Please use your client.

spreadsheetName = "sample Spreadsheet name" # Please set the Spreadsheet name you want to check.
spreadsheet_list = client.openall(spreadsheetName)
spreadsheet = client.create(spreadsheetName) if spreadsheet_list == [] else spreadsheet_list[0]

print(spreadsheet.id) # Here, the Spreadsheet ID of the retrieved Spreadsheet is shown.
  • 运行此脚本时,当
    spreadsheetName
    的电子表格存在时,检索现有电子表格。当
    spreadsheetName
    的电子表格不存在时,创建一个新的电子表格,标题为
    spreadsheetName
    .

参考:

© www.soinside.com 2019 - 2024. All rights reserved.