我有许多.csv文件。其中一些用逗号定界,一些用制表符定界(也许应称为.tsv ...)

安装Excel时,csv扩展名与Excel关联。但是,如果我使用excel打开这些文件之一,则所有内容都将转储到同一列中,并且逗号不会被解释为定界符。文件,然后选择解释内容(分隔符,数据类型等)的精确方法。但是大多数时候,我只想通过一个清晰的表视图查看该文件。我不想用Excel处理它。

有没有办法让Excel自动解释定界符并在打开后立即将CSV文件显示为适当的表?我需要这样做,以便可以将Excel用作此类文件的快速查看器。 >

评论

我真的很了解,选择的答复确实可以回答您的问题,但是第二个答复应该突出显示,因为它提供了一种全局解决方案,可以通过电子邮件,网络等方式共享杂项。

#1 楼

打开CSV文件时,Excel将使用名为List separator的系统区域设置来确定要使用的默认定界符。


Microsoft Excel将打开.csv文件,但取决于系统的
区域设置,则可能希望使用分号代替逗号,而不是
,因为在某些语言中,逗号用作小数点
分隔符。 (来自Wikipedia)在Windows上,您可以按照Office支持网站上指定的在List separator中更改Regional and Language Options设置:


在CSV文本文件中更改分隔符


单击Windows“开始”菜单。
单击控制面板。
打开“区域和语言选项”对话框。
单击“区域选项”选项卡。
单击“自定义/其他设置(Win10)”。
在“列表分隔符”框中键入一个新的分隔符。
单击“确定”两次。





注意:仅当Decimal符号也未指定为逗号时才有效(与Wikipedia引用一致)以上)。如果是这样,即使已选择,Excel也不会将逗号用作列表分隔符。对于许多非美国地区,逗号是默认的十进制符号。转到高级)。如果小数分隔符是一个点,则默认的CSV分隔符将是一个逗号,但是如果小数分隔符是一个逗号,则默认的CSV分隔符将是一个分号。

注释,Mac用户可以通过另一种方法快速查看这些CSV文件。它是Quick Look的名为quicklook-csv的插件,用于处理分隔符检测。

评论


谢谢,这很有意义。我想那默认情况下它不会将制表符解释为定界符(这也很有意义,因为CSV代表逗号分隔值,但实际上人们确实在CSV中使用制表符,因此我需要加以处理)。

– Szabolcs
13年6月11日在11:17

@Szabolcs Excel在打开CSV文件(使用file-> open或Explorer)时不会尝试检测定界符,它将仅使用系统设置。但是,在使用导入功能时,它将设法自动检测定界符(制表符,逗号,分号或空格)。

– Zakinster
2013年6月11日11:29



您的答案在OS X上也是有效的:仍然是引起“麻烦”的小数点/逗号(正如您在答案中提到的那样)。

– Szabolcs
2013年6月11日13:46



以后编辑:道歉!这确实有效!显然,需要重新启动程序和/或注销/登录才能应用更改。我不知道确切的时间,但是在我更改之后不久,这突然起作用了。

– mmo
15年6月24日在17:54

在Mac OS X上,进行更改后不要忘记退出Excel。如果您仅关闭所有打开的工作表,则Excel保持打开状态。单击Excel>退出Excel或单击Command + Q,就可以完成。

– Paulo Pedroso
15年8月21日在10:41

#2 楼

如果您不希望修改文件格式,并且仅针对Excel,则可以使用以下Excel技巧来帮助您。

在文件顶部添加新行,文本"sep=,"(包括引号)以便Excel以“,”作为列表分隔符打开文件。

这是一个很简单的技巧,可以避免更改Windows区域设置并获得一致的结果。但这是Excel特有的。

评论


确保仅使用它来查看文件,而不修改它,否则可能会遇到以下问题之一:theonemanitdepartment.wordpress.com/2014/12/15/…

– Wouter
2014-12-16 15:53

如果您需要将该文件重新分发给其他人,那就更好了,因此,无论他们的配置如何,您都可以确保excel将能够理解该文件。我总是使用csv来使用任何版本控制系统来共享和协作这些文件,但是我一直在使用逗号和分号进行挣扎,并且总是使每个人都更改其配置,而不再。非常感谢!

–拉法雷诺(Rafareino)
16/09/10在12:56

独自在什么之上?

– NateS
16-10-18在19:13

这正是我所需要的,谢谢!在我看来,您应该需要一个系统区域设置来设置Excel File Open对话框中的选项,或者在Excel的选项中,这似乎很疯狂。

–兔子
20年6月3日,11:47

#3 楼

您不需要sep=,周围的引号-只要它是文件的第一行,至少在Excel 2016中就可以使用。

我发现,如果文件用制表符分隔, sep=\t在带引号和不带引号的情况下都能正常工作。

#4 楼

接受的答案是正确的,但我是有形象的人。这是在Windows 10中如何执行此操作的屏幕截图格式的每一步。


评论


很有用!只需记住(如上文所述),如果对十进制符号使用相同的符号,则将忽略列表分隔符。您经常会发现,作为十进制符号,因此在将列表分隔符设置为时,请确保将其更改为其他名称(例如。)。

–德克
18-10-23在14:55

#5 楼

当区域设置中的分隔符不是逗号而是分号(荷兰语分隔符)时,请将CSV文件重命名为TXT文件。右键单击TXT文件,然后选择“打开方式”,然后选择“ Excel”。在Excel中选择第一列,在功能区中选择数据,然后将文本分隔为各列。

OR

安装LibreOffice并使用LibreOffice Calc打开CSV文件。

#6 楼

我有一个.csv文件,带有分隔符;,并且区域设置设置为List分隔符;。但是,Excel仍然无法解析列。



原来是编码问题。这些文件是从SQL Server Management Studio 2005导出的,并在UCS-2 LE BOM中进行了编码。使用记事本++,我将编码切换为UTF-8,一切开始正常工作。

#7 楼

确保在简单的编辑器(如记事本)中检查CSV文件以确认其格式正确。 Excel中的单独列。我发现写线的方式用引号将每行包裹起来。 Excel隐藏了引号,并在A列中显示了整行,使它看起来好像忽略了逗号分隔符。

#8 楼

最好的方法是将其保存在带有csv扩展名的文本文件中。

Sub ExportToCSV()
    Dim i, j As Integer
    Dim Name  As String

    Dim pathfile As String


    Dim fs As Object
        Dim stream As Object

        Set fs = CreateObject("Scripting.FileSystemObject")
    On Error GoTo fileexists

    i = 15
    Name = Format(Now(), "ddmmyyHHmmss")
    pathfile = "D:\" & Name & ".csv"

    Set stream = fs.CreateTextFile(pathfile, False, True)

fileexists:

    If Err.Number = 58 Then
        MsgBox "File already Exists"
        'Your code here
        Return
    End If
    On Error GoTo 0

    j = 1
    Do Until IsEmpty(ThisWorkbook.ActiveSheet.Cells(i, 1).Value)

        stream.WriteLine (ThisWorkbook.Worksheets(1).Cells(i, 1).Value & ";" & Replace(ThisWorkbook.Worksheets(1).Cells(i, 6).Value, ".", ","))

        j = j + 1
        i = i + 1
    Loop

stream.Close

End Sub


#9 楼

对于荷兰语,我有一个问题,即Windows 7上的Excel 2008不符合RFC4180:


“包含换行符(CRLF),双引号和逗号的字段应括在双引号中,用引号引起来。”


用逗号分隔的文件正确地将字段用逗号(荷兰十进制分隔符)括在双引号中。在荷兰语区域设置中,十进制分隔符为,,列表分隔符为;,因此Excel无法读取同时使用,的文件(即使在“控制面板”中将列表分隔符明确更改为,之后也是如此)。

输入如下所示:

"06-07-2017 17:03:18","********",0:01:04,Uitgaand,"0,1879","0,2273","0,0395",21


解决方案由@ user280725提供:

使用记事本作为第一行插入:

sep=,


(这意味着用户@zakinster的注释在其解决方案中不再适用。)


有趣:使用csv文件仍处于加载状态,如果您现在在“控制面板”中将语言环境设置为“美国英语”并保存该文件,则该文件将被转换为“美国英语”格式(逗号作为列表分隔符,点作为十进制分隔符)。