Google sheets Pygsheet保持共享同名的新工作表ID
我试图使用Python来维护一个与“标题”关联的报告,然后与特定的人共享。在我的代码中,我尝试打开现有的工作表报表。如果打开失败,我会创建一个新的 我的问题是,每当我执行'x=client.open(title)'时,这段代码总是会得到一个新ID,每次我都会得到一个新的'x.ID'。我调试并确保它处于打开状态而不是创建状态,但仍然不断获得一个新ID 这使得在我执行“x.share”之后,此工作表存在多个版本,它们都具有相同的名称,并且似乎具有相同的历史记录。但每一份看起来都不一样。由于此唯一ID,每个共享似乎都有自己的版本号。对以前共享的编辑不适用于最新共享。我能在这里做什么Google sheets Pygsheet保持共享同名的新工作表ID,google-sheets,google-sheets-api,pygsheets,Google Sheets,Google Sheets Api,Pygsheets,我试图使用Python来维护一个与“标题”关联的报告,然后与特定的人共享。在我的代码中,我尝试打开现有的工作表报表。如果打开失败,我会创建一个新的 我的问题是,每当我执行'x=client.open(title)'时,这段代码总是会得到一个新ID,每次我都会得到一个新的'x.ID'。我调试并确保它处于打开状态而不是创建状态,但仍然不断获得一个新ID 这使得在我执行“x.share”之后,此工作表存在多个版本,它们都具有相同的名称,并且似乎具有相同的历史记录。但每一份看起来都不一样。由于此唯一ID
#########################
## Open/Create GSheet ###
#########################
client = pygsheets.authorize(service_account_file=credsfile)
try:
gsheet = client.open(title)
except:
gsheet = client.create(title)
gsheet = client.open(title)
gsheet.share('john.doe@gmail.com', role='writer')
要测试这一点,请运行上面的代码并将其共享给您自己。编辑第一张工作表并再次运行代码。打开那份。它不会包含您以前所做的编辑,但历史会显示它们。我相信您的目标和您目前的情况如下
- 您希望使用电子表格标题检查现有电子表格
- 当电子表格存在时,您希望打开现有的电子表格
- 当电子表格不存在时,您需要创建新的电子表格并将其打开
- 您希望使用pygsheetsforpython实现这一点
- 您已经能够使用pygsheets了
- 从
中,我确认您正在将pygsheets与服务帐户一起使用。在这种情况下,当我考虑这个和<代码>我的问题是,每当我做一个‘x=客户机(打开)(title)’时,这个代码总是得到一个新的ID,每次我都得到一个新的“x.id”。我进行了调试,确保它处于打开状态而不是创建状态,但仍然不断获得新ID。。服务帐户的驱动器中可能不存在client=pygsheets.authorize(service\u account\u file=credsfile)
的gsheet=client.open(title)
值的电子表格。如果我的理解是正确的,这可能是你的问题的原因。title
- 服务帐户的Google驱动器与您的Google帐户的Google驱动器不同。当
的gsheet=client.open(title)
电子表格存在于您的Google驱动器中,并且它试图使用服务帐户搜索电子表格时,服务帐户无法找到该电子表格。在您的脚本中,通过此操作,将创建新的电子表格。在这种情况下,当电子表格与服务帐户的电子邮件共享时,服务帐户可以找到它。我担心这种情况可能是你问题的原因title
- 服务帐户的Google驱动器与您的Google帐户的Google驱动器不同。当
- 而且,我认为为了检查电子表格是否存在,可以使用pygsheets的驱动API包装器。在这种情况下,不需要使用
。try-except
- 似乎
medhod也使用了Drive API的files.list方法李>open
- 似乎
- 通过将服务帐户创建的电子表格与您的Google帐户共享,您可以在“与我共享”中看到创建的电子表格
- 当您想打开Google Drive中现有的电子表格时,首先,请将电子表格与服务帐户的电子邮件共享。这样,在您的脚本和上面修改的脚本中,将打开电子表格,而不会创建新的电子表格
开始,我怀疑ID会根据工作表中存在的工作表的某种算法发生变化。
在您的情况下,您可能会想到Google电子表格中的工作表ID,而不是Google电子表格ID。首先,我想确认您的情况。我能问一下你的情况吗?@Tanaike你是对的。我指的是电子表格。谷歌让人困惑。我想我误解了这个问题。我认为,如果一个表单的版本和每个分支都有自己的电子表格ID,那么谷歌正在保留“分支”。促使我打开它的原因是,当我编辑以前与我共享的工作表时,这些更新不会反映我再次运行程序并再次共享它的情况。如果我查看编辑历史记录,我可以看到编辑的分支,我的手动更改位于其中一个分支中。
title = '###' # Spreadsheet title.
yourEmail = '###' # Your email address.
userEmail = '###' # User's email address.
client = pygsheets.authorize(service_account_file=credsfile)
try:
gsheet = client.open(title)
except:
gsheet = client.create(title)
gsheet.share(yourEmail, role='writer')
gsheet.share(userEmail, role='writer')
title = '###' # Spreadsheet title.
yourEmail = '###' # Your email address.
userEmail = '###' # User's email address.
client = pygsheets.authorize(service_account_file=credsfile)
res = client.drive.list(q="name='" + title + "'")
if res == []:
gsheet = client.create(title)
gsheet.share(yourEmail, role='writer')
gsheet.share(userEmail, role='writer')
else:
gsheet = client.open(title)