88

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

例如,如果 CSV 文件包含

...,005,...

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

我更愿意对文件本身做一些事情,这样用户就可以双击 CSV 文件来打开它。

我使用 Excel 2003。

4

16 回答 16

130
于 2008-09-26T21:23:58.880 回答
30

不要使用 CSV,使用 SYLK。
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

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

于 2008-09-26T02:49:19.490 回答
14

这适用于 Microsoft Office 2010,Excel 版本 14

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

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

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

这里还有一篇关于数字格式以及如何对其进行编程的好文章。

于 2008-09-26T02:10:23.327 回答
2

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

于 2008-09-26T04:29:50.717 回答
2

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

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

在 Excel 2010 上尝试过。希望这可以帮助那些仍在为这个问题寻找一个非常合适的解决方案的人。

于 2013-10-09T14:01:04.743 回答
2

我在从 C# 代码导出 CSV 数据时遇到了这个问题,并通过在前导零数据前加上制表符 \t 解决了这个问题,因此数据在 Excel 中被解释为文本而不是数字(但与附加其他字符不同,它不会看不见)。

我确实喜欢 ="001" 方法,但这不允许在不从导入 CSV 文件中删除所有这些格式的情况下将导出的 CSV 数据重新导入到我的 C# 应用程序(相反,我将只修剪导入数据) .

于 2014-01-24T11:20:38.187 回答
1

我相信当您导入文件时,您可以选择列类型。将其设为文本而不是数字。不过,目前我面前没有副本可供检查。

于 2008-09-26T02:10:34.810 回答
1

将 csv 加载到 oleDB 并强制所有推断的数据类型为字符串

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

基本上,当加载 csv 文件时,oledb 驱动程序会做出假设,您可以告诉它要做出哪些假设。

我的代码虽然强制所有数据类型为字符串……但更改架构非常容易。出于我的目的,我使用 xslt 以我想要的方式获得 ti - 但我正在解析各种各样的文件。

于 2009-12-22T14:05:46.327 回答
1

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

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

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

于 2011-01-04T19:28:33.800 回答
1

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

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

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

于 2013-11-19T11:17:44.660 回答
1

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

        '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
于 2014-05-14T22:42:21.407 回答
0

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

我尝试使用 Excel 2007,它似乎可以工作。

于 2008-09-26T02:12:55.630 回答
0

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

于 2009-11-30T19:14:18.217 回答
0

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

...,`005,...

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

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

于 2010-07-15T19:32:24.707 回答