有没有人碰巧知道,如果有一个令牌,我可以添加到我的csv的某个字段,这样Excel就不会试图将它转换为日期?

我试图从我的应用程序中编写一个.csv文件,其中一个值碰巧看起来足够像一个日期,Excel会自动将它从文本转换为日期。我曾尝试将所有文本字段(包括看起来像日期的文本字段)放在双引号内,但没有效果。


当前回答

使用谷歌驱动器(如果你在Mac上,也可以使用Numbers)的解决方案:

在Excel中打开数据 将数据错误的列的格式设置为文本(format > Cells > Number > Text) 将.csv文件加载到谷歌Drive,并使用谷歌Sheets打开它 复制出错的列 将列作为文本粘贴到Excel中(编辑>粘贴特殊>文本)

或者,如果你在Mac上进行第3步,你可以在Numbers中打开数据。

其他回答

嗨,我也有同样的问题,

我写这个vbscipt来创建另一个CSV文件。新的CSV文件将在每个字段的字体中有一个空格,因此excel将把它理解为文本。

所以你用下面的代码创建了一个。vbs文件(例如Modify_CSV.vbs),保存并关闭它。将原始文件拖放到vbscript文件中。它将在相同的位置创建一个文件名为“SPACE_ADDED”的新文件。

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing

警告:Excel '07(至少)有一个(另一个)错误:如果字段的内容中有逗号,它不会正确解析="field, contents",而是将逗号后的所有内容放入下面的字段中,而不管引号是什么。

我发现唯一有效的解决方法是当字段内容包含逗号时消除=。

这可能意味着有些字段不可能在Excel中完全“正确”地表示,但到目前为止,我相信没有人会感到太惊讶。

下面是我们在生成csv文件时使用的简单方法,它确实会稍微改变值,所以并不适用于所有应用程序:

在csv中的所有值前加一个空格

excel将从诸如“1”、“2.3”和“-2.9e4”等数字中剥离该空格,但将保留诸如“01/10/1993”这样的日期和诸如“TRUE”这样的布尔值,从而阻止它们转换为excel的内部数据类型。

它也停止双引号被zapped在读进去,所以一个简单的方法,使文本在csv中保持不变的excel即使是一些文本,如“3.1415”是用双引号包围它,并在整个字符串前加上一个空格,即(使用单引号来显示你会键入什么)“3.1415”。然后在excel中,你总是有原始的字符串,除了它被双引号包围并以空格开头,所以你需要在任何公式中考虑这些。

我发现在双引号前加一个'='就能达到你想要的效果。它强制数据为文本。

如。=“2008-10-03”=“文本”

编辑(根据其他帖子):由于Jeffiekins指出的Excel 2007漏洞,应该使用Andrew提出的解决方案:"=""2008-10-03""" "

如果可以更改文件源数据

如果您准备更改原始源CSV文件,另一种选择是更改数据中的“分隔符”,因此如果您的数据是“4/11”(或4-11),Excel将其转换为4/11/2021(英国或11-4-2021美国),那么将“/”或“-”字符更改为其他字符将阻止不想要的Excel日期转换。选项包括:

波浪号(~) +(“+”) 下划线(“_”) 双破折号(“-”) En-dash (Alt 150) Em-dash (Alt 151) (其他角色!)

注意:如果文件要在其他地方使用,则移动到Unicode或其他非ascii/ansi字符可能会使问题复杂化。

因此,'4-11'转换为'4~11'与波浪号将不会被视为日期!

对于大型CSV文件,这没有额外的开销(即:额外的引号/空格/制表符/公式结构),只在文件直接打开时工作(即:双击CSV打开),并避免将列预先格式化为文本或“导入”CSV文件为文本。

如果需要,在记事本(或类似工具)中的搜索/替换可以轻松地转换为/从替代分隔符。

导入原始数据

在新版本的Excel中,您可以导入数据(在其他答案中概述)。 在较旧版本的Excel中,您可以安装“Power Query”插件。该工具还可以导入csv而不进行转换。选择:Power Query选项卡/来自文件/来自文本- csv,然后“Load”以表格形式打开。(您可以从“数据类型检测”选项中选择“不检测数据类型”)。