google-sheets - 如何将 Google 电子表格的工作表字符串 id 转换为整数索引 (GID)?

标签 google-sheets gdata-api google-sheets-api gdata-python-client

要将 Google 电子表格的单个工作表导出为 CSV,需要传递整数工作表索引 (GID)。

https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=%s&gid=%d&exportFormat=csv

但是,这些信息在哪里?使用 gdata.spreadsheets.client,我可以找到工作表的一些字符串 ID,例如“oc6、ocv、odf”。

client = gdata.spreadsheets.client.SpreadsheetsClient()
feed = client.GetWorksheets(spreadsheet, auth_token=auth_token)

它返回下面的原子 XML。 (部分)

<entry gd:etag="&quot;URJFCB1NQSt7ImBoXhU.&quot;">
    <id>https://spreadsheets.google.com/feeds/worksheets/0AvhN_YU3r5e9dGpTWGx3UVU3MTczaXJuNEFKQjMwN2c/ocw</id>
    <updated>2012-06-21T08:19:46.587Z</updated>
    <app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-21T08:19:46.587Z</app:edited>
    <category scheme="http://schemas.google.com/spreadsheets/2006" term="http://schemas.google.com/spreadsheets/2006#worksheet"/>
    <title>AchievementType</title>
    <content type="application/atom+xml;type=feed" src="https://spreadsheets.google.com/feeds/list/0AvhN_YU3r5e9dGpTWGx3UVU3MTczaXJuNEFKQjMwN2c/ocw/private/full"/>
    <link rel="http://schemas.google.com/spreadsheets/2006#cellsfeed" type="application/atom+xml" href="https://spreadsheets.google.com/feeds/cells/0AvhN_YU3r5e9dGpTWGx3UVU3MTczaXJuNEFKQjMwN2c/ocw/private/full"/>
    <link rel="http://schemas.google.com/visualization/2008#visualizationApi" type="application/atom+xml" href="https://spreadsheets.google.com/tq?key=0AvhN_YU3r5e9dGpTWGx3UVU3MTczaXJuNEFKQjMwN2c&amp;sheet=ocw"/>
    <link rel="self" type="application/atom+xml" href="https://spreadsheets.google.com/feeds/worksheets/0AvhN_YU3r5e9dGpTWGx3UVU3MTczaXJuNEFKQjMwN2c/private/full/ocw"/>
    <link rel="edit" type="application/atom+xml" href="https://spreadsheets.google.com/feeds/worksheets/0AvhN_YU3r5e9dGpTWGx3UVU3MTczaXJuNEFKQjMwN2c/private/full/ocw"/>
    <gs:rowCount>280</gs:rowCount>
    <gs:colCount>28</gs:colCount>
</entry>

我还尝试使用工作表参数,但因“无效工作表”错误而失败。

https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=%s&sheet=XXX&exportFormat=csv

我想应该有一些神奇的功能,但没找到。我怎样才能将它们转换为整数id?或者我可以导出带有字符串 id 的工作表吗?

编辑:我刚刚用 python 制作了转换表。肮脏但工作:-(

GID_TABLE = {
    'od6': 0, 
    'od7': 1, 
    'od4': 2, 
    'od5': 3, 
    'oda': 4, 
    'odb': 5, 
    'od8': 6, 
    'od9': 7, 
    'ocy': 8, 
    'ocz': 9, 
    'ocw': 10, 
    'ocx': 11, 
    'od2': 12, 
    'od3': 13, 
    'od0': 14, 
    'od1': 15, 
    'ocq': 16, 
    'ocr': 17, 
    'oco': 18, 
    'ocp': 19, 
    'ocu': 20, 
    'ocv': 21, 
    'ocs': 22, 
    'oct': 23, 
    'oci': 24, 
    'ocj': 25, 
    'ocg': 26, 
    'och': 27, 
    'ocm': 28, 
    'ocn': 29, 
    'ock': 30, 
    'ocl': 31, 
    'oe2': 32, 
    'oe3': 33, 
    'oe0': 34, 
    'oe1': 35, 
    'oe6': 36, 
    'oe7': 37, 
    'oe4': 38, 
    'oe5': 39, 
    'odu': 40, 
    'odv': 41, 
    'ods': 42, 
    'odt': 43, 
    'ody': 44, 
    'odz': 45, 
    'odw': 46, 
    'odx': 47, 
    'odm': 48, 
    'odn': 49, 
    'odk': 50, 
    'odl': 51, 
    'odq': 52, 
    'odr': 53, 
    'odo': 54, 
    'odp': 55, 
    'ode': 56, 
    'odf': 57, 
    'odc': 58, 
    'odd': 59, 
    'odi': 60, 
    'odj': 61, 
    'odg': 62, 
    'odh': 63, 
    'obe': 64, 
    'obf': 65, 
    'obc': 66, 
    'obd': 67, 
    'obi': 68, 
    'obj': 69, 
    'obg': 70, 
    'obh': 71, 
    'ob6': 72, 
    'ob7': 73, 
    'ob4': 74, 
    'ob5': 75, 
    'oba': 76, 
    'obb': 77, 
    'ob8': 78, 
    'ob9': 79, 
    'oay': 80, 
    'oaz': 81, 
    'oaw': 82, 
    'oax': 83, 
    'ob2': 84, 
    'ob3': 85, 
    'ob0': 86, 
    'ob1': 87, 
    'oaq': 88, 
    'oar': 89, 
    'oao': 90, 
    'oap': 91, 
    'oau': 92, 
    'oav': 93, 
    'oas': 94, 
    'oat': 95, 
    'oca': 96, 
    'ocb': 97, 
    'oc8': 98, 
    'oc9': 99
}

最佳答案

我发现您的问题正在寻找同一问题的解决方案,并且令我惊讶的是这些工作表 ID 实际上与 gids 1:1 对应 - 我最初假设它们是独立分配的,而不是一个进行混淆练习。

通过对他们用来从表中生成工作表 ID 的公式进行逆向工程,我找到了一个稍微更干净的解决方案:

worksheetID = (gid xor 31578) encoded in base 36

因此,一些 Python 将工作表 ID 转换为 gid:

def to_gid(worksheet_id):
    return int(worksheet_id, 36) ^ 31578

这仍然很脏,但适用于高于 99 的 GID,而不需要巨大的表。至少只要他们不改变生成逻辑(他们可能不会,因为这会破坏人们已经使用的现有 ID)。

关于google-sheets - 如何将 Google 电子表格的工作表字符串 id 转换为整数索引 (GID)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290337/

相关文章:

google-sheets - 谷歌电子表格选择一个带有子字符串的列

html - 如何在 Google 表格中使用 IMPORTXML 和 Xpath 获取 <img src> URL?

excel - Excel中最长的连续日期连续

http - Google Calendar V3 REST API 中的批量请求

google-sheets - ImportRange "Result to large"- 如何导入我需要的所有数据?

python - Google 通讯录插入中的性别更改为 "Directory server"

google-api - 谷歌脚本 API : How to apply an onEdit function to every spreadsheet?

java - 使用 API 读取写入 Google 电子表格是免费或付费的

php - 使用 Google Sheets API 查找工作表尺寸

javascript - 调整 Google Sheets API Node.js 快速入门以使用我自己的工作表,错误 : Error: Unable to parse range: Class Data! A2:E