Excel CSV - 数字格式

时间:2008-09-26 02:07:21

标签: excel csv formatting number-formatting

我将报告生成为CSV文件。 当我尝试在Excel中打开文件时,它会根据单元格的内容对数据类型进行假设,并相应地重新格式化。

例如,如果CSV文件包含

...,005,...

然后Excel将其显示为5。 有没有办法覆盖它并显示005?

我更愿意对文件本身做一些事情,以便用户只需双击CSV文件即可打开它。

我使用Excel 2003。

16 个答案:

答案 0 :(得分:114)

打开.csv文件时,没有一种简单的方法可以控制Excel应用的格式。下面列出的是三种可能有用的方法。

我的偏好是第一个选择。

选项1 - 更改文件中的数据

您可以更改.csv文件中的数据,如下所示......, =“005”,... 这将在Excel中显示为......, 005 ,...

Excel会将数据保存为公式,但复制列并使用粘贴特殊值将删除公式但保留格式

选项2 - 格式化数据

如果它只是一个格式问题,那么该列中的所有数据都有三位数的长度。然后在Excel中打开数据,然后使用此自定义格式 000

格式化包含数据的列

选项3 - 将文件扩展名更改为.dif(数据交换格式)

更改文件扩展名并使用文件导入向导来控制格式。 双击时,Excel会自动打开扩展名为.dif的文件。

一步一步:

  • 将文件扩展名从 .csv 更改为 .dif
  • 双击该文件以在Excel中打开它。
  • 将启动“文件导入向导”。
  • 将“文件类型”设置为“分隔”,然后单击“下一步”按钮。
  • 在分隔符下,勾选“逗号”,然后点击“下一步”按钮。
  • 单击显示的数据的每一列,然后选择“列数据格式”。值为“005”的列应格式化为“文本”。
  • 点击完成按钮,Excel将使用您指定的格式打开文件。

答案 1 :(得分:27)

请勿使用CSV,请使用SYLK http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

它提供了对格式化的更多控制,Excel不会通过检查内容来尝试猜测字段的类型。它看起来有点复杂,但你可以使用一个非常小的子集。

答案 2 :(得分:14)

适用于Microsoft Office 2010,Excel版本14

我误读了OP的偏好“对文件本身做了些什么。”对于那些想要直接格式化导入的解决方案的人,我仍然保留这个

  1. 打开一个空白(新)文件(文件 - >工作簿中的新建)
  2. 打开导入向导(数据 - >来自文本)
  3. 选择.csv文件并导入
  4. 在对话框中,选择“分隔”,然后单击“下一步”。
  5. 选择分隔符(取消选中除“逗号”之外的所有内容),选择文本限定符(可能为{无}),单击“下一步”
  6. 数据预览字段中,选择要作为文字的列。它应该突出显示。
  7. 列数据格式字段中,选择“文字”。
  8. 点击完成。

答案 3 :(得分:2)

您可以简单地将范围格式化为文本。

同样here是关于数字格式以及如何编程的好文章。

答案 4 :(得分:2)

实际上我发现,至少从Office 2003开始,您可以将Excel电子表格另存为XML文件。 因此,我可以生成一个XML文件,当我双击它时,它将在Excel中打开。 它提供与SYLK相同的控制级别,但XML语法更直观。

答案 5 :(得分:2)

在单元格中添加不间断的空间可能有所帮助。 例如: "firstvalue";"secondvalue";"005 ";"othervalue"

它强制Excel将其视为文本,并且空间不可见。 在Windows上,您可以通过tiping alt + 0160添加不间断的空间。 有关详细信息,请参阅此处:http://en.wikipedia.org/wiki/Non-breaking_space

尝试使用Excel 2010。 希望这可以帮助仍然为这个问题寻找一个非常合适的解决方案的人。

答案 6 :(得分:2)

从C#代码导出CSV数据时出现此问题,并通过在前导零数据前加上制表符\ t来解决此问题,因此数据在Excel中被解释为文本而不是数字(但不像其他字符前面那样,它不会被看到)。

我确实喜欢=“001”方法,但这不允许将导出的CSV数据重新导入我的C#应用​​程序而不从导入CSV文件中删除所有这些格式(相反,我只是修剪导入数据)。

答案 7 :(得分:1)

我相信在导入文件时,您可以选择列类型。使其成为文本而不是数字。我现在面前没有副本可以查看。

答案 8 :(得分:1)

Load csv into oleDB and force all inferred datatypes to string

我问同样的问题,然后用代码回答。

基本上当加载csv文件时,oledb驱动程序会做出假设,你可以告诉它做出什么样的假设。

我的代码强制所有数据类型为字符串...它很容易更改架构。 为了我的目的,我使用xslt来获取我想要的方式 - 但我正在解析各种各样的文件。

答案 9 :(得分:1)

我知道这是一个老问题,但我有一个未列在此处的解决方案。

当您生成csv时,请在逗号之后但在您的值之前添加空格,例如, 005,

无论如何,这都可以防止excel 2007中的自动日期格式化。

答案 10 :(得分:1)

当导入的CSV文件在单元格中有换行符时,文本导入向导方法不起作用。此方法处理此方案(至少使用制表符分隔的数据):

  1. 创建新的Excel文件
  2. Ctrl + A选择所有单元格
  3. 在数字格式组合框中,选择文本
  4. 在文本编辑器中打开制表符分隔文件
  5. 全选,复制并粘贴到Excel

答案 11 :(得分:1)

这让我整天疯狂(因为在打开CSV文件之前确实无法控制Excel列类型),这对我有用,使用VB.NET和Excel Interop:

        'Convert .csv file to .txt file.
        FileName = ConvertToText(FileName)

        Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _
                                                        {2, xlTextFormat}, _
                                                        {3, xlGeneralFormat}, _
                                                        {4, xlGeneralFormat}, _
                                                        {5, xlGeneralFormat}, _
                                                        {6, xlGeneralFormat}}

        'We are using OpenText() in order to specify the column types.
        mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes)
        mxlWorkBook = mxlApp.ActiveWorkbook
        mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet)


Private Function ConvertToText(ByVal FileName As String) As String
    'Convert the .csv file to a .txt file.
    'If the file is a text file, we can specify the column types.
    'Otherwise, the Codes are first converted to numbers, which loses trailing zeros.

    Try
        Dim MyReader As New StreamReader(FileName)
        Dim NewFileName As String = FileName.Replace(".CSV", ".TXT")
        Dim MyWriter As New StreamWriter(NewFileName, False)
        Dim strLine As String

        Do While Not MyReader.EndOfStream
            strLine = MyReader.ReadLine
            MyWriter.WriteLine(strLine)
        Loop

        MyReader.Close()
        MyReader.Dispose()
        MyWriter.Close()
        MyWriter.Dispose()

        Return NewFileName
    Catch ex As Exception
        MsgBox(ex.Message)
        Return ""
    End Try

End Function

答案 12 :(得分:0)

打开CSV时,您将获得文本导入向导。在向导的最后一步,您应该能够将特定列作为文本导入,从而保留“00”前缀。之后,您可以按照您想要的任何方式格式化单元格。

我尝试使用Excel 2007,它似乎有效。

答案 13 :(得分:0)

好吧,excel永远不会弹出CSV文件的向导。如果将其重命名为.txt,则在下次执行文件>在Excel中打开时,您将看到向导。

答案 14 :(得分:0)

在字段前加一个引号。 Excel会将其视为文本,即使它看起来像数字。

...,`005,...

编辑:这是错误的。撇号技巧仅在将数据直接输入Excel时有效。在CSV文件中使用它时,撇号出现在您不想要的字段中。

http://support.microsoft.com/kb/214233

答案 15 :(得分:0)

只需在CSV文档中添加'之前的数字。