当前位置:  开发笔记 > 编程语言 > 正文

停止Excel自动将某些文本值转换为日期

如何解决《停止Excel自动将某些文本值转换为日期》经验,为你挑选了12个好方法。

有没有人碰巧知道是否有一个令牌我可以添加到我的csv某个字段,所以Excel不会尝试将其转换为日期?

我正在尝试从我的应用程序中编写.csv文件,其中一个值看起来就像Excel自动将其从文本转换为日期的日期.我已经尝试将所有文​​本字段(包括看起来像日期的字段)放在双引号内,但这没有任何效果.



1> Jarod Elliot..:

我发现在双引号之前加上'='可以实现你想要的.它强制数据为文本.

例如.="2008-10-03",="更多文字"

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


我接受这个答案是因为1)我的csv文件只会被Excel使用,2)这是用于会计,不能有'开头,3)我不希望他们必须这样做进口.我只是想让他们打开csv.
这样做的原因是因为当Excel看到字符"="时,它决定评估它后面的表达式.在这种情况下,表达式只是一个字符串文字,字符串文字的值是字符串的内容.因此,引号神奇地消失了.您可以输入= 1 + 2 + 3并在CSV导入后获取值6.公式本身在导入过程中不会被破坏.
大!但由于[Excel 2007 bug](http://stackoverflow.com/a/4412775/684229)使用[Andrew提出的解决方案](http://stackoverflow.com/a/6023847/684229):`" = "" 2008-10-03 """`.更新了帖子.
这种方法有一个大问题-如果您在excel中打开文件并进行编辑,然后保存并再次打开,所有这些“消失”

2> fr13d..:

我知道这是一个老问题,但问题不会很快消失.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文件? .


将'\ t'添加到我的分离字符后,我得到了正确的前导号;``...你该死的MS Office,为什么这需要花费我超过2分钟来弄明白?
没有足够的赞成可以表达我对你的感激之情.在记事本中搜索和替换++','到'\ t,\ t'(以适应第一列和最后一列)就像一个魅力.谢谢.
在所有值的末尾添加\ t确实是诀窍.这是一个hacky解决方法,但在实践中它工作正常.我更倾向于使用等于'='的公式技巧,因为前者可能难以在其他工具中使用.

3> Andrew Ferk..:

根据Jarod的解决方案以及Jeffiekins提出的问题,你可以修改

"May 16, 2011"

"=""May 16, 2011"""


如果文本超过特定长度,则在Excel 2010中不起作用.
仅供参考,如果你保存Excel文件,=就会消失,下次打开时你会回到正方形.

4> rainerbit..:

我遇到了类似的问题,这是帮助我而不必编辑csv文件内容的解决方法:

如果您可以灵活地将文件命名为".csv"以外的其他名称,则可以使用".txt"扩展名来命名,例如"Myfile.txt"或"Myfile.csv.txt".然后当您在Excel中打开它(而不是通过拖放,但使用文件 - >打开或最近使用的文件列表),Excel将为您提供"文本导入向导".

在向导的第一页中,为文件类型选择"Delimited".

在向导的第二页中,选择","作为分隔符,如果已用引号括起值,也可以选择文本限定符

在第三页中,分别选择每一列,并为每个列分配"文本"而不​​是"常规",以防止Excel弄乱您的数据.

希望这可以帮助您或有类似问题的人!


这对我来说非常合适,除了将其重命名为.txt之外,我的文件没有任何更改.谢谢.
哦,对了,我不是第一个发现这一点的人。http://risingline.com/use-excel-read-csv-without-reformatting.php该网页还提供了有用的说明,您可以在向导第三页中按住Shift键并单击它们以将它们全部选中,然后再进行选择。为每个类型分配“文本”。

5> Jeffiekins..:

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

我发现唯一的解决方法是在字段内容包含逗号时消除=.

这可能意味着有些字段无法在Excel中完全"正确"表示,但到目前为止,我相信没有人会感到惊讶.


根据RFC 4180,这似乎不是一个错误.引用该字段的正确方法是引用整个字段,然后双引用内部引号.所以"=""字段,内容"""http://tools.ietf.org/html/rfc4180
@PeterStephens,如果`field,content`中包含`“`则不起作用。例如`” =“ =” field,co“” ntent“”“”

6> Colin Pear..:

在C#中创建要写入我的CSV文件的字符串时,我必须以这种方式格式化:

"=\"" + myVariable + "\""


也适用于Java
这也让我在Rails中惊呆了。谢谢

7> 小智..:

在Excel 2010中打开一个新工作表.在"数据"功能区上,单击"从文本获取外部数据".选择您的CSV文件,然后单击"打开".点击下一步".取消选中"Tab",在"逗号"旁边放置一个复选标记,然后单击"下一步".单击第一列的任意位置.按住shift键的同时拖动滑块直到您可以单击最后一列,然后释放shift键.单击"文本"单选按钮,然后单击"完成"

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


遗憾的是,Text From Text助手不支持多行单元格.如果遇到这样的多行文本,它会将第一行之后的所有行写入新行,从而破坏整个导入.如果通过双击打开CSV文件,它只能正确解释换行符.该死的微软......

8> Ana Maria Me..:

在Microsoft Office 2016版本中仍然是一个问题,对于我们这些使用基因名称的人来说相当令人不安,例如MARC1,MARCH1,SEPT1等.我发现在R中生成".csv"文件后最实用的解决方案,然后将与Excel用户打开/共享:

    以文本形式打开CSV文件(记事本)

    复制它(ctrl + a,ctrl + c).

    将其粘贴到新的Excel工作表中 - 它将作为长文本字符串粘贴在一列中.

    选择/选择此列.

    转到数据 - "文本到列...",在打开的窗口中选择"分隔"(下一步).检查是否标记了"逗号"(标记它已经显示数据与下面列的分隔)(下一步),在此窗口中,您可以选择所需的列并将其标记为文本(而不是常规)(完成).

HTH



9> evilReiko..:

2018年

唯一适用于我的解决方案(也无需修改CSV)。

Excel 2010:

    创建新工作簿

    数据>从文本>选择CSV文件

    在弹出窗口中,选择“定界”单选按钮,然后单击“下一步>”。

    分隔符复选框:仅勾选“逗号”,然后取消选中其他选项,然后单击“下一步>”

    在“数据预览”中,滚动到最右边,然后按住shift并单击最后一列(这将选择所有列)。现在,在“列数据格式”中,选择单选按钮“文本”,然后单击“完成”。

Excel office365 :(客户端版本)

    创建新工作簿

    数据>来自文本/ CSV>选择CSV文件

    数据类型检测>不检测

注意:在撰写本文时,Excel office365(网络版)将无法执行此操作。


这种方法无需事先更改CSV文件即可,因此我认为这应该是正确的答案。

10> Dan..:

这是我们在首先生成csv文件时使用的简单方法,它确实更改了一些值,因此它不适合所有应用程序:

在csv中为所有值预先添加空格

这个空间将被excel从诸如"1","2.3"和"-2.9e4"之类的数字中剥离,但将保留在"01/10/1993"之类的日期和"TRUE"之类的布尔值,阻止它们被转换为excel的内部数据类型.

它还会在读入时停止双引号,因此在csv中制作文本的万无一失的方法仍然保持不变,即使是"3.1415"之类的文本是用双引号括起来并在整个字符串前加一个空格,即(使用单引号显示您要键入的内容)'"3.1415"'.然后在excel中你总是有原始的字符串,除了它被双引号括起来并以空格为前缀,所以你需要考虑任何公式中的那些.



11> DocMax..:

(假设Excel 2003 ...)

使用"文本到列"向导时,在步骤3中,您可以指定每个列的数据类型.单击预览中的列,将行为不当列从"常规"更改为"文本".


如果我可以强制用户使用导入过程,这是一个很好的选择.

12> Chris..:

这是我知道如何在不弄乱文件内部的情况下实现此目的的唯一方法.像往常一样,我通过在桌面上敲打几个小时来学习这一点.

将.csv文件扩展名更改为.txt; 这将阻止Excel在文件打开时自动转换文件.我是这样做的:打开Excel到空白工作表,关闭空白工作表,然后File => Open并选择扩展名为.txt的文件.这会强制Excel打开"文本导入向导",它会询问您有关如何解释文件的问题.首先,您选择分隔符(逗号,制表符等),然后(这是重要的部分)您选择一组列并选择格式.如果你想要文件中的确切内容然后选择"文本",Excel将显示分隔符之间的内容.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有