从命令行下载/导出公共 Google 电子表格作为 TSV?
Posted
技术标签:
【中文标题】从命令行下载/导出公共 Google 电子表格作为 TSV?【英文标题】:Download/Export Public Google Spreadsheet as TSV from Command Line? 【发布时间】:2014-08-06 23:21:55 【问题描述】:我有一个公开(已发布)的 Google 电子表格,我正尝试以 TSV 形式以编程方式下载该电子表格。
在我的浏览器中,激活 Google 登录后,对于某些实际密钥 $key
,https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=$key&exportFormat=tsv
可以工作并生成 TSV 文件。
但是,在我的 shell 中:
curl -L "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=$key&exportFormat=tsv"
产生一堆 javascript。
curl -L "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=$key&exportFormat=csv"
还会生成一堆 javascript。
curl -L "https://docs.google.com/spreadsheet/pub?key=$key&single=true&gid=0&output=csv"
工作并生成一个 CSV 文件。
curl -L "https://docs.google.com/spreadsheet/pub?key=$key&single=true&gid=0&output=tsv"
产生错误消息。
(尝试使用wget
产生了类似的结果。)
我该如何进行这项工作?到目前为止,我能够找到的所有 Google 文档都针对比简单的下载和格式更改更复杂的问题,如果我的问题的解决方案在某个地方,我还没有找到它.
【问题讨论】:
看起来像是身份验证问题。尝试退出您的谷歌帐户? (奇怪的是 CSV 有效而 TSV 失败。) 【参考方案1】:我发现这是令人沮丧的无证。我确定它记录在某处……但我从未找到它。
前提是您的 Google Sheet 是公开发布的。这对许多人来说并不直观。 (选择文件 -> 发布到网络...)
当您发布工作表时,您会得到一个这样的 url 来复制:
https://docs.google.com/spreadsheets/d/1XsfK2TN418FuEstNGG2eI9FmEV-4eY-FnndigHWIhk4/pubhtml
那个 url 可以很好地浏览……但这不是我想要的可下载 CSV。通过长时间的搜索和反复试验,我得出了这个结论:
curl "https://docs.google.com/spreadsheets/d/1XsfK2TN418FuEstNGG2eI9FmEV-4eY-FnndigHWIhk4/export?gid=0&format=csv"
我发现它非常有帮助。我希望有人能提供官方文档的链接来更详细地解释这一点。
【讨论】:
不知何故,如果我包含gid=0
,那么我会得到一个找不到页面的错误,但如果我不包含它,那么我会得到预期的结果
顺便说一句,gid=0
对我来说仍然很有效。但是对该评论的支持意味着有时删除它很重要。如果我知道什么时候是可选的/强制的/禁止的,我会更新答案。
有关 GID,请参阅下面的 my answer。
如果返回 HTML,则需要在 curl (curl -L "https://......"
) 中添加 -L
标志【参考方案2】:
我的答案是关于如何找到答案。
在 Chrome 浏览器中,导航到您的 Google 文档。
在浏览器右上角,进入三个点->更多工具->开发者工具
这将调出 html... 调试器。
在调试器窗口的顶部,选择网络。
现在在您的文档中,按照您尝试自动化的方式启动下载。
在调试器中,它会向您显示任何发出的 Web 请求。第一个新的可能就是你想要的。
应该可以右键->复制->复制链接地址
网址包含一个 ID。我不知道它是做什么用的,但 curl 无需下载文档即可。
希望对你有帮助。
【讨论】:
不错的方法。网络选项卡中的链接太多。我似乎找到了我想要的——因为我在浏览器上尝试过并开始下载。但我无法下载“curl LINK”。它表示文件已被移动。【参考方案3】:我可以这样通过shell下载:
-
文件 => 发布到网络
选择工作表和您要下载的格式。
点击发布
复制链接
然后使用它:
wget -O ./filename.csv "LINK"
或
curl -L "LINK" > ./filename.csv
在我的情况下,它按预期工作。
此外,我认为它会发布所有格式,因此您可以选择下载内容,更改 URL 的最后一部分,而无需取消发布并重新发布:
output=tsv
output=csv
【讨论】:
这是迄今为止最简单的!【参考方案4】:要添加到answer written by @mdahlman:有一个gid=<value>
参数可以让您选择要查看的工作表(因为CSV 和TSV 支持只查看一张工作表)。这是一个工作表 ID,您可以从每张工作表的 URL 中获取它。
因此,要获取 CSV/TSV 发布链接,请执行以下操作:
发布文档以获取类似 https://docs.google.com/spreadsheets/d/e/key/pub?output=tsv
的 URL。
然后对于每个电子表格:
点击它。
在浏览器的地址栏中查看其 URL。它将以edit#gid=gid
结尾。这就是你想要的。
从步骤 1 中的 URL 和 2.2 中的 gid
创建 URL:https://docs.google.com/spreadsheets/d/e/key/pub?output=tsv&gid=gid
。
GID 不按顺序排列(0、1、2、...)。它们是很长的数字(对我来说是 9 位数字),看起来没有直接的顺序或其他任何东西,所以它们实际上更像是表单键,而不是人们所期望的“id”。
在我的文档中,其中一个 GID 为零。我假设它是某种默认或第一个创建的工作表。这就解释了为什么gid=0
为上面的某些人工作,但对其他人产生错误(那些没有具有此类 GID 的工作表的人......他们可能已将其删除或其他什么)。
【讨论】:
我在执行“curl publushedURL+correctGID”时得到“临时重定向”另外,我可以使用在将文件作为 CSV 发布到网络后提供的链接下载文件 @Manthan_Admane,我刚刚用&gid=...
尝试过它,它对我来说可以正常工作。至于下载“使用将文件作为 CSV 发布到网络后提供的链接”,如果你有一张单张纸,那就可以了。如果您有多个,则需要 gid
选择正确的工作表,因为 CSV 仅支持一个。以上是关于从命令行下载/导出公共 Google 电子表格作为 TSV?的主要内容,如果未能解决你的问题,请参考以下文章
google docs电子表格导出:如何从时间、日期中删除撇号[关闭]
如何从命令行 Python 脚本将所有工作表保存在 LibreOffice Calc 电子表格中
从 Google 电子表格中的一个单元格导出 DB2 DDL