从命令行下载/导出公共 Google 电子表格作为 TSV?

Posted

技术标签:

【中文标题】从命令行下载/导出公共 Google 电子表格作为 TSV?【英文标题】:Download/Export Public Google Spreadsheet as TSV from Command Line? 【发布时间】:2014-08-06 23:21:55 【问题描述】:

我有一个公开(已发布)的 Google 电子表格,我正尝试以 TSV 形式以编程方式下载该电子表格。

在我的浏览器中,激活 Google 登录后,对于某些实际密钥 $keyhttps://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" 产生一堆 javascriptcurl -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

使用 google drive API 下载 csv 格式的电子表格

如何从公共谷歌电子表格中检索简单的xml

使用脚本将 Google 电子表格导出到文本文件