有没有人碰巧知道是否有一个令牌我可以添加到我的csv某个字段,所以Excel不会尝试将其转换为日期?
我正在尝试从我的应用程序中编写.csv文件,其中一个值看起来就像Excel自动将其从文本转换为日期的日期.我已经尝试将所有文本字段(包括看起来像日期的字段)放在双引号内,但这没有任何效果.
我发现在双引号之前加上'='可以实现你想要的.它强制数据为文本.
例如.="2008-10-03",="更多文字"
编辑(根据其他帖子):由于Jeffiekins提到的Excel 2007错误,应该使用Andrew提出的解决方案:"=""2008-10-03"""
我知道这是一个老问题,但问题不会很快消失.CSV文件很容易从大多数编程语言中生成,相当小,人们可以在简单的文本编辑器中使用,并且无处不在.
问题不仅在于文本字段中的日期,而且任何数字也会从文本转换为数字.这是一个有问题的例子:
邮政编码
电话号码
政府身份证号码
有时可以从一个或多个零(0)开始,这些零在转换为数字时会被丢弃.或者该值包含可能与数学运算符混淆的字符(如日期:/, - ).
两种情况下,我能想到的是,"预谋="解决方案,如前面提到的,可能不是理想的是
文件可能被导入MS Excel以外的程序(MS Word的邮件合并功能出现在脑海中),
人类可读性可能很重要.
我的黑客可以解决这个问题
如果在值中预先/附加非数字和/或非日期字符,则该值将被识别为文本而不进行转换.非打印字符会很好,因为它不会改变显示的值.但是,普通旧空格字符(\ s,ASCII 32)对此不起作用,因为它被Excel切掉,然后值仍然被转换.但是有各种其他打印和非打印空间字符可以很好地工作.最简单的方法是在简单的制表符(\ t,\ t\t,ASCII 9)后附加(添加).
这种方法的好处:
可通过键盘或易于记忆的ASCII码(9)获得,
它不打扰输入,
通常不会打扰邮件合并结果(取决于模板布局 - 但通常只是在一行的末尾添加一个宽空格).(如果这是一个问题,请查看其他字符,例如零宽度空间(ZWSP,Unicode U + 200B)
在记事本(等)中查看CSV时不是一个很大的障碍,
并且可以通过在Excel(或记事本等)中查找/替换来删除.
您无需导入 CSV,但只需双击即可在Excel中打开 CSV.
如果您不想使用该选项卡,请在Unicode表中查找其他合适的选项.
另外一个选项可能是生成XML文件,其中某些格式也被新的MS Excel版本接受导入,并且允许更多类似于.XLS格式的选项,但我没有这方面的经验.
所以有各种选择.根据您的要求/应用,一个可能比另一个更好.
需要说明的是,MS Excel的新版本(2013+)不再以电子表格格式打开CSV - 在一个工作流程中再增加一个速度,使得Excel不那么有用......至少,存在绕过它的说明.请参阅此Stackoverflow:如何在Excel 2013中正确显示.csv文件? .
根据Jarod的解决方案以及Jeffiekins提出的问题,你可以修改
"May 16, 2011"
至
"=""May 16, 2011"""
我遇到了类似的问题,这是帮助我而不必编辑csv文件内容的解决方法:
如果您可以灵活地将文件命名为".csv"以外的其他名称,则可以使用".txt"扩展名来命名,例如"Myfile.txt"或"Myfile.csv.txt".然后当您在Excel中打开它(而不是通过拖放,但使用文件 - >打开或最近使用的文件列表),Excel将为您提供"文本导入向导".
在向导的第一页中,为文件类型选择"Delimited".
在向导的第二页中,选择","作为分隔符,如果已用引号括起值,也可以选择文本限定符
在第三页中,分别选择每一列,并为每个列分配"文本"而不是"常规",以防止Excel弄乱您的数据.
希望这可以帮助您或有类似问题的人!
警告:Excel '07(至少)有一个(另一个)错误:如果字段内容中有逗号,它不会正确解析="字段,内容",而是将逗号后的所有内容放入以下字段,不管引号如何.
我发现唯一的解决方法是在字段内容包含逗号时消除=.
这可能意味着有些字段无法在Excel中完全"正确"表示,但到目前为止,我相信没有人会感到惊讶.
在C#中创建要写入我的CSV文件的字符串时,我必须以这种方式格式化:
"=\"" + myVariable + "\""
在Excel 2010中打开一个新工作表.在"数据"功能区上,单击"从文本获取外部数据".选择您的CSV文件,然后单击"打开".点击下一步".取消选中"Tab",在"逗号"旁边放置一个复选标记,然后单击"下一步".单击第一列的任意位置.按住shift键的同时拖动滑块直到您可以单击最后一列,然后释放shift键.单击"文本"单选按钮,然后单击"完成"
所有列都将作为文本导入,就像它们在CSV文件中一样.
在Microsoft Office 2016版本中仍然是一个问题,对于我们这些使用基因名称的人来说相当令人不安,例如MARC1,MARCH1,SEPT1等.我发现在R中生成".csv"文件后最实用的解决方案,然后将与Excel用户打开/共享:
以文本形式打开CSV文件(记事本)
复制它(ctrl + a,ctrl + c).
将其粘贴到新的Excel工作表中 - 它将作为长文本字符串粘贴在一列中.
选择/选择此列.
转到数据 - "文本到列...",在打开的窗口中选择"分隔"(下一步).检查是否标记了"逗号"(标记它已经显示数据与下面列的分隔)(下一步),在此窗口中,您可以选择所需的列并将其标记为文本(而不是常规)(完成).
HTH
2018年
唯一适用于我的解决方案(也无需修改CSV)。
Excel 2010:
创建新工作簿
数据>从文本>选择CSV文件
在弹出窗口中,选择“定界”单选按钮,然后单击“下一步>”。
分隔符复选框:仅勾选“逗号”,然后取消选中其他选项,然后单击“下一步>”
在“数据预览”中,滚动到最右边,然后按住shift并单击最后一列(这将选择所有列)。现在,在“列数据格式”中,选择单选按钮“文本”,然后单击“完成”。
Excel office365 :(客户端版本)
创建新工作簿
数据>来自文本/ CSV>选择CSV文件
数据类型检测>不检测
注意:在撰写本文时,Excel office365(网络版)将无法执行此操作。
这是我们在首先生成csv文件时使用的简单方法,它确实更改了一些值,因此它不适合所有应用程序:
在csv中为所有值预先添加空格
这个空间将被excel从诸如"1","2.3"和"-2.9e4"之类的数字中剥离,但将保留在"01/10/1993"之类的日期和"TRUE"之类的布尔值,阻止它们被转换为excel的内部数据类型.
它还会在读入时停止双引号,因此在csv中制作文本的万无一失的方法仍然保持不变,即使是"3.1415"之类的文本是用双引号括起来并在整个字符串前加一个空格,即(使用单引号显示您要键入的内容)'"3.1415"'.然后在excel中你总是有原始的字符串,除了它被双引号括起来并以空格为前缀,所以你需要考虑任何公式中的那些.
(假设Excel 2003 ...)
使用"文本到列"向导时,在步骤3中,您可以指定每个列的数据类型.单击预览中的列,将行为不当列从"常规"更改为"文本".
这是我知道如何在不弄乱文件内部的情况下实现此目的的唯一方法.像往常一样,我通过在桌面上敲打几个小时来学习这一点.
将.csv文件扩展名更改为.txt; 这将阻止Excel在文件打开时自动转换文件.我是这样做的:打开Excel到空白工作表,关闭空白工作表,然后File => Open并选择扩展名为.txt的文件.这会强制Excel打开"文本导入向导",它会询问您有关如何解释文件的问题.首先,您选择分隔符(逗号,制表符等),然后(这是重要的部分)您选择一组列并选择格式.如果你想要文件中的确切内容然后选择"文本",Excel将显示分隔符之间的内容.