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

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


当前回答

如果可以更改文件源数据

如果您准备更改原始源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”以表格形式打开。(您可以从“数据类型检测”选项中选择“不检测数据类型”)。

其他回答

我做了这个VBA宏,基本上在粘贴数字之前将输出范围格式化为文本。当我想要粘贴诸如8/11、23/6、1/3等值时,它非常适合我,而Excel不会将它们解释为日期。

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup
    
Columns(ActiveCell.Column).NumberFormat = "@"
    
Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

我很想知道这是否也适用于其他人。我一直在寻找一个解决这个问题的方法有一段时间了,但我还没有看到一个快速的VBA解决方案,不包括在输入文本前面插入。该代码以原始形式保留数据。

嗨,我也有同样的问题,

我写这个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 2010中打开一个新工作表。 在“数据”ribbon上单击“从文本中获取外部数据”。 选择您的CSV文件,然后单击“打开”。 单击“下一步”。 取消“Tab”,在“逗号”旁边打勾,然后点击“下一步”。 单击第一列上的任意位置。 按住shift键拖动滑块,直到可以单击最后一列,然后松开shift键。 点击“文本”单选按钮,然后点击“完成”

所有列都将作为文本导入,就像它们在CSV文件中一样。

不是Excel。Windows可以识别公式、数据作为日期并自动更正。你必须更改Windows的设置。

“控制面板”(->“切换到经典视图”)->“区域和语言” 选项”->选项卡“区域选项”->“自定义…”->选项卡“数字”->和 然后根据你想要的改变符号。

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

它将在您的计算机上工作,如果这些设置没有更改,例如在您的客户的计算机上,他们将看到日期而不是数据。

无需修改您的csv文件,您可以:

将excel格式单元格选项更改为“text” 然后使用“文本导入向导”定义csv单元格。 一旦导入,删除该数据 然后粘贴为纯文本

Excel将正确格式化和分离您的CSV单元格为文本格式,忽略自动日期格式。

有点愚蠢的工作,但它比修改csv数据之前导入。安迪·贝尔德(Andy Baird)和理查德(Richard)回避了这种方法,但遗漏了几个重要步骤。