【问题标题】:Parse tab separated text file in Google Sheets在 Google 表格中解析制表符分隔的文本文件
【发布时间】:2014-11-14 19:34:47
【问题描述】:

我在网络上有一个 txt 文件,其中包含制表符分隔值 (TSV/CSV),如下所示:

PRODUCT_ID tab颜色tab价格tab数量,点击项目1 tabtab $ 5.2 tab 5,点击项目2 tabtab $ 7.5 tab 10

我使用 IMPORTDATA(url) 公式将 txt 文件导入到 Google 电子表格中。问题是现在我需要将文本拆分为列。我尝试了以下公式但没有成功:

Split(A1,"\t")
Split(A1,"    ")
Split(A1,"<tab>")

我尝试的另一件事是使用 Substitute 函数,但我就是不知道如何匹配 Google 电子表格中的 Tab 字符?

【问题讨论】:

  • IMPORTDATA() 应该自动处理选项卡,如果文件扩展名是.tsv。有什么办法可以控制吗?
  • 已确认 - 名称为 *.tsv 的相同文件已正确导入。

标签: csv google-sheets


【解决方案1】:

默认情况下,当您使用标准粘贴粘贴文本时,Pages 会去除标签。可以使用以下方式粘贴和自动解析制表符分隔的数据:

右键 -> 选择性粘贴 -> 仅粘贴值

【讨论】:

  • 该问题明确提到在公式中使用IMPORTDATA(url) 函数导入数据,而不是手动导入。这个答案似乎没有解决这个问题。
【解决方案2】:

IMPORTDATA(url) 似乎会自动处理选项卡,正如其他人之前提到的,如果 URL 以“.tsv”结尾。

我在尝试从 Dropbox 导入文件时遇到了问题,即使该文件名为“something.tsv”,因为该 url 是

"https://www.dropbox.com/s/xxxxxxx/something.tsv?dl=1"

我设法通过在 url 中添加一个虚拟查询参数来解决问题:

"https://www.dropbox.com/s/xxxxxxx/something.tsv?dl=1&x=.tsv"

【讨论】:

  • 这是一个非常简单的解决方案!
【解决方案3】:

注意:我知道这个问题是在 2014 年提出的,大约 5 年后我会回答这个问题。我在此处发布答案,希望其他在此处搜索方式的人可以避免头痛,并且可以通过我设计解决方案的方式得到帮助。

问题摘要:默认情况下,仅当文件名以扩展名 .TSV 结尾时,IMPORTDATA() 函数才会正确处理制表符分隔的文件

2019 年 11 月 14 日更新: 在下面的评论中,Poul 分享说他为 IMPORTDATA() 函数找到了 undocumented parameter,您可以通过该函数指定分隔符来拆分数据。在撰写本文时,official documentation 没有引用此分隔符。

实际上,文档应如下所示:

IMPORTDATA("url","delimiter")

因此,如果您想强制在 TAB 字符上拆分文件,它看起来像

IMPORTDATA("url","\t")

之前的答案:

更新:我将留下我原来的答案,以防万一上面的答案(包括未记录的功能)不能继续工作时可能会有所帮助。

原始答案:经过无数次尝试,我想出了如何诱使 Google 表格导入制表符分隔的文件,而不管扩展名如何。

对于那些寻求快速而肮脏的答案的人,请将以下内容复制到 Google 表格的单元格中尝试一下:

=ARRAYFORMULA(IFERROR(SPLIT(IMPORTDATA("https://iso639-3.sil.org/sites/iso639-3/files/downloads/iso-639-3_Latin1.tab"),CHAR(9),FALSE,FALSE)))

对于那些想了解更多的人,我将尝试解释每个嵌套函数如何帮助创建最终解决方案:

=ARRAYFORMULA(IFERROR(SPLIT(IMPORTDATA(URL-HERE),CHAR(9),FALSE,FALSE)))

IMPORTDATA() - 从网络中提取数据文件的主要功能

SPLIT - 按制表符分割行,注意使用 char(09) 生成制表符;还要注意在我的案例中使用 FALSE 作为最后一个参数,以确保空单元格不会折叠在一起

IFERROR - 用于捕获导入可能失败的情况,错误将被捕获并且不会返回到电子表格

ARRAYFORMULA - 这个函数确保文件中的每一行都被解析;没有这个,只有文件的第一行会返回到电子表格

【讨论】:

  • “我在这里发布答案,希望其他人在这里搜索他们的方式”好点!出于同样的原因,将在此处发布:发现 IMPORTDATA() 函数可以接受参数,该参数直接指定分隔符(虽然规范中没有说明),即 IMPORTDATA("url","delimiter") for tab分隔符应该是“\t”
  • 感谢 Poul 的回答。我已经更新了上面的答案,以包含您非常有用的发现。
【解决方案4】:

原来IMPORTDATA(url) 可以导入制表符分隔的文件,但它希望文件名具有.tsv 扩展名。这与 Excel 不一致,其中制表符分隔的导出结果为 *.txt

如果您可以确保使用.tsv 扩展名,那么您的问题就解决了。

您还可以使用表格 UI 将文件导入(到新的电子表格中)。选择File &gt; Import...,然后选择Upload &gt; Select a file from your computer。当文件选择对话框打开时,将 URL 粘贴到 file name 字段中,然后单击 Open。该文件将下载到您的 PC,然后通过“导入”对话框上传到云端硬盘,您可以选择分隔符。

(在带有 Chrome 的 Windows 8.1 上验证;我不知道这在其他操作系统或浏览器上会如何表现。)


编辑:见this gist

 importFromCSV(string fileName, string sheetName)

使用从位于用户 GDrive 中的 CSV 文件读取的内容填充工作表。如果没有提供任何一个参数,该函数将打开 inputBoxes 以交互方式获取它们。

自动检测制表符或逗号分隔的输入。

【讨论】:

    【解决方案5】:

    我很幸运使用 split() 并仅指示一个空格作为分隔符,即使我粘贴的数据使用制表符分隔每个“列”:=SPLIT(A1, " ", True) 其中 A1 的数据由 1 个或多个空格分隔。似乎粘贴 TSV 数据会导致从制表符转换为空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 2015-02-14
      • 2012-06-19
      • 1970-01-01
      相关资源
      最近更新 更多