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

以下是新表示例,sheet2 的 gid 为 1794189920。
https://docs.google.com/spreadsheets/d/1S6mvGGoOJa8JF6Qt6GGH5QT-X0HD4EjZhKNbihAwFuE/edit?usp=sharing

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

How to convert Google spreadsheet's worksheet string id to integer index (GID)?

感谢任何可以帮助阐明这一点或提出建议的人。

干杯。俊雅

最佳答案

好吧,这是一个贫民窟的答案,因为我根本不满意,因为我真的不明白发生了什么,但也许它会帮助人们,所以在这里..

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

def wid_to_gid(wid)
    wid.to_i(36) ^ 31578
end

为了处理 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,我可以通过删除第一个字符来获得 GID,转换为基数 36 数字,然后与 474 异或(不知道为什么这个神奇的数字......抱歉)。

如果 WID 只有 3 位数字,则旧的转换有效(如堆栈溢出的许多其他答案中所述)。

对于我正在使用的电子表格,它有 3 个工作表。以下是每个的 WID 和 GID:
GID - WID
0          - od6
2019719111 - oxehkwt
1506531046 - oowy6v0

我真的只是想完成这件事,所以一旦我开始工作,我就没有花更多的时间进行调查。如果其他人可以验证/拒绝此代码是否适合他们,我将不胜感激……如果它不起作用,也许它至少会给您一些想法!

关于google-sheets - 如何在新的 Google 电子表格中从 gid 转换为 od*(工作表 ID),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23609688/

10-17 02:20