Google sheets 如何在新的Google电子表格中从gid转换为od*(工作表id)

Google sheets 如何在新的Google电子表格中从gid转换为od*(工作表id),google-sheets,google-spreadsheet-api,gdata-api,Google Sheets,Google Spreadsheet Api,Gdata Api,我正在使用GDataAPI更新Google电子表格单元格。 现在新的谷歌电子表格已经发布,gid似乎超过了8位数 以下是新图纸样本,图纸2的gid为1794189920。 我尝试用以下方法转换它们,但不起作用 感谢所有能够帮助阐明这一点或提出建议的人 干杯。Junya我通过查看WorksheetFeed类(来自.NET库Google.GData.Spreadsheets.WorksheetFeed),找到了一种在新工作表上获取gid的方法。基本上,设置电子表格服务、应用凭据、创建传递feed

我正在使用GDataAPI更新Google电子表格单元格。 现在新的谷歌电子表格已经发布,gid似乎超过了8位数

以下是新图纸样本,图纸2的gid为1794189920。

我尝试用以下方法转换它们,但不起作用

感谢所有能够帮助阐明这一点或提出建议的人


干杯。Junya

我通过查看WorksheetFeed类(来自.NET库Google.GData.Spreadsheets.WorksheetFeed),找到了一种在新工作表上获取gid的方法。基本上,设置电子表格服务、应用凭据、创建传递feedUrl的工作表查询、调用服务上的查询并从worksheetFeed.Entries返回工作表。然后,您可以将工作表的xml向下流,然后在xml中搜索“?gid=”并解析结果。可能有一种更直接的方法来实现这一点,但我还没有找到,这在我们的情况下是有效的

  Dim worksheetFeed As WorksheetFeed
  Dim query As WorksheetQuery
  Dim worksheet As WorksheetEntry
  Dim output As New MemoryStream
  Dim xml As String
  Dim gid As String = String.Empty

  Try
    _service = New Spreadsheets.SpreadsheetsService("ServiceName")
    _service.setUserCredentials(UserId, Password)
    query = New WorksheetQuery(feedUrl)
    worksheetFeed = _service.Query(query)
    worksheet = worksheetFeed.Entries(0)

    ' Save worksheet feed to memory stream so we can 
    ' get the xml returned from the feed url and look for
    ' the gid.  Gid allows us to download the specific worksheet tab
    Using output
      worksheet.SaveToXml(output)
    End Using

    xml = Encoding.ASCII.GetString(output.ToArray())

好吧,这是一个贫民区的答案,因为我对它一点也不满意,因为我真的不知道发生了什么,但也许它会帮助人们,所以我说

我正在使用ruby google_drive gem,只是想将电子表格中的所有工作表下载为CSV。为了做到这一点,我必须将编码的GID(我看到它被称为“WID”)转换为真实的GID。之前,我的wid_to_gid方法如下所示(从堆栈溢出的其他答案中记录):

为了处理7位WID,我将其更改为:

def wid_to_gid(wid)
    wid_val = wid.length > 3 ? wid[1..-1] : wid
    xorval = wid.length > 3 ? 474 : 31578
    wid_val.to_i(36) ^ xorval
end
所以。。这里发生了几件事。。我意识到(至少在我的电子表格上),对于7位数的WID,我可以通过删除第一个字符,转换为基数为36的数字,然后用474进行XORing(不知道为什么是这个神奇的数字..对不起)来获得GID

如果WID只有3个数字,那么旧的转换就可以工作(在关于堆栈溢出的许多其他答案中都有详细说明)

对于我正在使用的电子表格,它有3个工作表。以下是每个项目的WID和GID:

GID - WID
0          - od6
2019719111 - oxehkwt
1506531046 - oowy6v0

我真的只是想把这件事做完,所以我没有花更多的时间调查,一旦我得到它的工作。如果其他人能够验证/拒绝此代码是否适用于他们,我们将不胜感激。。。如果它不起作用,也许它至少会给你一些想法

如果您将Python与一起使用,请执行以下操作:

wid=worksheet.id
如果len(wid)>3,则widval=wid[1:]
如果len(wid)>3,则xorval=474,否则为31578
gid=int(str(widval),36)^xorval

我可能会为此打开一个PR。

在这里,您可以使用sheet=sheet1“sheet=sheet\u name:指定要链接到的多页文档中的哪一页”-我不知道您是否可以将此用于所需内容。您好,谢谢。我想更新电子表格单元,所以我使用GDataAPI。(Visuzalozation API没有更新方法。)在Gdata API中,需要od*样式的工作表id…如果您有GID,那么您可以下载为PDF。这将为您提供工作表的名称。然后可以使用图纸名称获取od*。。。。您是如何手动获得GID或某些API的?我正在尝试用python实现这一点。请看我的问题:
GID - WID
0          - od6
2019719111 - oxehkwt
1506531046 - oowy6v0