如何使Excel将CSV解释为默认的分隔符?


95

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

csv安装Excel时,扩展名将与Excel关联。但是,如果我使用excel打开这些文件之一,则所有内容都将转储到同一列中,并且不会将逗号解释为定界符。

我可以代替文件->导入...,选择文件,然后选择解释内容(分隔符,数据类型等)的精确方法。但是大多数时候,我只是想通过清晰的角度查看文件表格视图。我不想用Excel处理它。

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

我怀疑一定有办法,否则Excel不会将自己与CSV文件关联。


我真的能理解所选择的响应不回答你的问题,而是因为它提供了一个全球性的解决方案,即通过电子邮件,网络等ACROS共享工作的第二个应该强调的
Rafareino

Answers:


81

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

Microsoft Excel将打开.csv文件,但是根据系统的区域设置,它可能期望使用分号代替逗号,而不是逗号,因为在某些语言中,逗号用作十进制分隔符。(来自维基百科


Windows上,您可以在Office支持网站上指定的中更改List separator设置:Regional and Language Options

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

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

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

Mac OS X上,此设置似乎是从小数点分隔符设置推导出来的(在“ 系统偏好设置”的“ 语言和区域”窗格中,转到“ 高级”)。如果小数点是一个点,则默认的CSV分隔符将是逗号,但是如果小数点是一个逗号,则默认的CSV分隔符将是分号。

正如您在评论中说的那样,Mac用户可以使用另一种方法快速查看这些CSV文件。它是Quick Look的名为quicklook-csv的插件,用于处理分隔符检测。


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

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

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

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

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

94

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

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

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


1
确保-only-使用这个在文件-look-,而不是修改它,否则你可能会遇到以下问题之一:theonemanitdepartment.wordpress.com/2014/12/15/...
沃特·

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

1
独自在什么之上?
NateS

11

sep=,只要它是文件的第一行,至少在Excel 2016中,它就不需要引号。

我发现,如果文件是用制表符分隔的,则sep=\t可以使用引号和不使用引号。


4

接受的答案是正确的,但我是一个有视觉感的人。这是屏幕截图格式的每一步,介绍了如何在Windows 10中执行此操作。

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明


2
很有用!请记住(如前所述),List separator如果将相同的符号用于Decimal symbol。你会经常发现,作为小数点符号,所以一定要确保其更改为别的东西(如.设置时)List separator,
德克

1

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

要么

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


1

我有一个.csv文件,其中分隔符;和区域设置设置为“列表分隔符” ;。但是,Excel仍然无法解析列。

在此处输入图片说明

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


0

确保在简单的编辑器(如记事本)中检查CSV文件,以确认其格式正确。

解决了一个愚蠢的错误后,我添加了此答案,该错误中,用VB创建的CSV文件未在Excel中用单独的列打开。我发现写线的方式用引号将每行包裹起来。Excel隐藏了引号,并在A列中显示了整行,使其看起来好像忽略了逗号分隔符。


0

最好的方法是将其保存在带有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:\1\" & 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

0

对于荷兰人,我遇到一个问题,即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文件仍然加载的情况下,如果现在在“控制面板”中将语言环境设置为“美国英语”并保存该文件,则该文件将被转换为“美国英语”格式(逗号作为列表分隔符,点作为十进制分隔符)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.