Csv 在Google工作表中解析选项卡分隔的文本文件

Csv 在Google工作表中解析选项卡分隔的文本文件,csv,google-sheets,Csv,Google Sheets,我在web上有一个txt文件,其中包含选项卡分隔值(TSV/CSV),如下所示: 产品IdtabColortabPricetabQuantityItem1tabRedtab5Item2tabBluetab7.5tab10 我使用IMPORTDATA(url)公式将txt文件导入谷歌电子表格。问题是,现在我需要将文本拆分为列。我尝试了以下公式,但没有成功: Split(A1,"\t") Split(A1," ") Split(A1,"<tab>") Split(A1,“\t”)

我在web上有一个txt文件,其中包含选项卡分隔值(TSV/CSV),如下所示:

产品Id
tab
Color
tab
Price
tab
Quantity
Item1
tab
Red
tab
5
Item2
tab
Blue
tab
7.5
tab
10

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

Split(A1,"\t")
Split(A1,"    ")
Split(A1,"<tab>")
Split(A1,“\t”)
拆分(A1,“”)
拆分(A1,“”)
我尝试过的另一件事是使用
Substitute
函数,但我就是不知道如何匹配Google电子表格中的
Tab
字符。

结果是可以导入一个选项卡分隔的文件,但它希望文件名具有
.tsv
扩展名。这与Excel不一致,Excel中以制表符分隔的导出结果为
*.txt

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

您还可以使用“工作表”UI导入文件(到新的电子表格中)。选择
File>Import…
,然后
Upload>从计算机中选择一个文件
。打开文件选择对话框后,将URL粘贴到
文件名
字段中,然后单击
打开
。该文件将下载到您的电脑,然后通过“导入”对话框上载到驱动器,该对话框将允许您选择分隔符

(在使用Chrome的Windows 8.1上进行了验证;我不知道这在其他操作系统或浏览器上会有什么表现。)


编辑:请参阅

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


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

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

使用标准粘贴粘贴文本时,默认情况下,页面会剥离选项卡。可以使用以下方法粘贴和自动分析制表符分隔的数据:

如果url以“.tsv”结尾,则右键单击->粘贴特殊->仅粘贴值导入数据(url)似乎会自动处理选项卡,如其他人之前所述

即使文件名为“something.tsv”,我也无法从Dropbox导入文件,因为url是

"https://www.dropbox.com/s/xxxxxxx/something.tsv?dl=1"
我通过向url添加一个虚拟查询参数来解决此问题:

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

注意:我知道这个问题是在2014年提出的,大约5年后我会回答这个问题。我把答案贴在这里,希望谷歌搜索到的其他人能避免头痛,并能从我设计的解决方案中得到帮助

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

2019年11月14日更新: 在下面的一条评论中,Poul分享说,他找到了IMPORTDATA()函数的一个分隔符,您可以通过它指定分隔符来分割数据。在编写本文时,未引用此分隔符。

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

IMPORTDATA("url","delimiter")
因此,如果您想强制在制表符上拆分文件,它看起来像

IMPORTDATA("url","\t")

事先回答:

更新:我将保留我的原始答案,以防上面的答案(包括未记录的功能)无法继续工作可能会有所帮助

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

对于那些寻找快速而肮脏答案的人,请将以下内容复制到谷歌工作表的一个单元格中进行尝试:

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

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

=数组公式(IFERROR(拆分(导入数据(URL-HERE)、字符(9)、FALSE、FALSE)))

-从web中提取数据文件的主要功能

-按制表符拆分行,注意使用char(09)生成制表符;还请注意,最后一个参数使用了FALSE,这在我的案例中是确保空单元格不会折叠在一起所必需的

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


-此功能确保解析文件中的每一行;如果不这样做,只有文件的第一行将返回到电子表格

IMPORTDATA()
如果文件扩展名为
.tsv
,则应自动处理选项卡。有什么方法可以控制吗?已确认-名称为
*。tsv
的同一个文件可以正确导入。这是一个非常简单的解决方案!“我在这里发布的答案,希望其他人谁谷歌他们的方式在这里”好的一点!出于同样的原因,帖子将在这里发布:我们发现IMPORTDATA()函数可以接受参数,该参数直接指定分隔符(虽然规范中没有说明),即IMPORTDATA(“url”,“delimiter”)作为制表符分隔符,它应该是“\t”,谢谢您的回答。我已经更新了上面的答案,包括您非常有用的发现。问题明确提到使用公式中的
IMPORTDATA(url)
函数导入数据,而不是手动导入。这个答案似乎并没有解决这个问题。
=ARRAYFORMULA(IFERROR(SPLIT(IMPORTDATA("https://iso639-3.sil.org/sites/iso639-3/files/downloads/iso-639-3_Latin1.tab"),CHAR(9),FALSE,FALSE)))