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

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


当前回答

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

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

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

其他回答

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

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

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

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

SELECT CONCAT('\'',NOW(),'\''), firstname, lastname 
FROM your_table
INTO OUTFILE 'export.csv' 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '\"' 
LINES TERMINATED BY '\n'

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

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

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

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

我做了这个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解决方案,不包括在输入文本前面插入。该代码以原始形式保留数据。

另一种方法:

将要更改的列的格式转换为“Text”。选择要保留的所有单元格,复制。在不取消这些列的情况下,单击“编辑>粘贴特殊> As值”

保存为CSV。请注意,这必须是您对文件所做的最后一件事,因为当您重新打开它时,它将自己格式化为日期,因为单元格格式不能保存在CSV文件中。