Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google sheets Pygsheet保持共享同名的新工作表ID_Google Sheets_Google Sheets Api_Pygsheets - Fatal编程技术网

Google sheets Pygsheet保持共享同名的新工作表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

我试图使用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了
修改点:
  • client=pygsheets.authorize(service\u account\u file=credsfile)
    中,我确认您正在将pygsheets与服务帐户一起使用。在这种情况下,当我考虑这个和<代码>我的问题是,每当我做一个‘x=客户机(打开)(title)’时,这个代码总是得到一个新的ID,每次我都得到一个新的“x.id”。我进行了调试,确保它处于打开状态而不是创建状态,但仍然不断获得新ID。。服务帐户的驱动器中可能不存在
    gsheet=client.open(title)
    title
    值的电子表格。如果我的理解是正确的,这可能是你的问题的原因。
    • 服务帐户的Google驱动器与您的Google帐户的Google驱动器不同。当
      gsheet=client.open(title)
      title
      电子表格存在于您的Google驱动器中,并且它试图使用服务帐户搜索电子表格时,服务帐户无法找到该电子表格。在您的脚本中,通过此操作,将创建新的电子表格。在这种情况下,当电子表格与服务帐户的电子邮件共享时,服务帐户可以找到它。我担心这种情况可能是你问题的原因
  • 而且,我认为为了检查电子表格是否存在,可以使用pygsheets的驱动API包装器。在这种情况下,不需要使用
    try-except
    • 似乎
      open
      medhod也使用了Drive API的files.list方法
当上述各点反映到脚本中时,它将变成如下所示

修改脚本: 或

  • 通过将服务帐户创建的电子表格与您的Google帐户共享,您可以在“与我共享”中看到创建的电子表格
注:
  • 当您想打开Google Drive中现有的电子表格时,首先,请将电子表格与服务帐户的电子邮件共享。这样,在您的脚本和上面修改的脚本中,将打开电子表格,而不会创建新的电子表格
参考:

我通过猜测你的情况提出了答案。你能确认一下吗?如果我误解了你的处境,而这不是你期望的方向,我道歉。@Tanaike是的,我想你误解了,对不起。谢谢你的驱动API。如果我知道它是在创造,而不是在打开,我会深入研究它。但我非常确定,由于我只有一个服务帐户,所以我正在使用一个json进行身份验证。我还调试了它,它正确地打开了。我开始怀疑ID的变化是基于工作表中存在哪些工作表的某种算法。我删除并重新创建一个工作表,这会导致ID更改(我想)。原因当我将删除添加逻辑更改为sheet.clear()时,问题停止了。感谢您的快速回复。当我的回答没有用时,我道歉。谢谢你的回答。我为我糟糕的英语水平道歉。在您的情况下,我认为您正在考虑电子表格ID。我的理解正确吗?从
开始,我怀疑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)