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

498 csv import excel

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

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

Jar*_*ott 349

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

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

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

  • 我接受这个答案是因为1)我的csv文件只会被Excel使用,2)这是用于会计,不能有'开头,3)我不希望他们必须这样做进口.我只是想让他们打开csv. (12认同)
  • 这样做的原因是因为当Excel看到字符"="时,它决定评估它后面的表达式.在这种情况下,表达式只是一个字符串文字,字符串文字的值是字符串的内容.因此,引号神奇地消失了.您可以输入= 1 + 2 + 3并在CSV导入后获取值6.公式本身在导入过程中不会被破坏. (7认同)
  • 大!但由于[Excel 2007 bug](http://stackoverflow.com/a/4412775/684229)使用[Andrew提出的解决方案](http://stackoverflow.com/a/6023847/684229):`" = "" 2008-10-03 """`.更新了帖子. (5认同)
  • 这种方法有一个大问题-如果您在excel中打开文件并进行编辑,然后保存并再次打开,所有这些“消失” (4认同)
  • 在当今时代,我们不能只是告诉 Excel 不要更改日期格式,这真是太疯狂了。这给我的 CSV 文件带来了极大的悲伤。不得不使用像“xxx”这样的肮脏工作不应该是一个解决方案。这充其量只是一个黑客攻击,但 M$ 应该抽出手指来修复他们的软件:( (4认同)

fr1*_*13d 143

我知道这是一个老问题,但问题不会很快消失.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分钟来弄明白? (5认同)
  • 没有足够的赞成可以表达我对你的感激之情.在记事本中搜索和替换++','到'\ t,\ t'(以适应第一列和最后一列)就像一个魅力.谢谢. (3认同)
  • 在所有值的末尾添加\ t确实是诀窍.这是一个hacky解决方法,但在实践中它工作正常.我更倾向于使用等于'='的公式技巧,因为前者可能难以在其他工具中使用. (2认同)

And*_*erk 101

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

"May 16, 2011"
Run Code Online (Sandbox Code Playgroud)

"=""May 16, 2011"""
Run Code Online (Sandbox Code Playgroud)

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

rai*_*bit 63

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

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

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

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

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

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

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

Jef*_*ins 27

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

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

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

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

Col*_*ear 20

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

"=\"" + myVariable + "\""
Run Code Online (Sandbox Code Playgroud)

  • 也适用于Java (3认同)
  • 这也让我在Rails中惊呆了。谢谢 (2认同)

小智 15

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

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

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

Ana*_*ira 12

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

  1. 以文本形式打开CSV文件(记事本)
  2. 复制它(ctrl + a,ctrl + c).
  3. 将其粘贴到新的Excel工作表中 - 它将作为长文本字符串粘贴在一列中.
  4. 选择/选择此列.
  5. 转到数据 - "文本到列...",在打开的窗口中选择"分隔"(下一步).检查是否标记了"逗号"(标记它已经显示数据与下面列的分隔)(下一步),在此窗口中,您可以选择所需的列并将其标记为文本(而不是常规)(完成).

HTH


evi*_*iko 12

2018年

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

Excel 2010:

  1. 创建新工作簿
  2. 数据>从文本>选择CSV文件
  3. 在弹出窗口中,选择“定界”单选按钮,然后单击“下一步>”。
  4. 分隔符复选框:仅勾选“逗号”,然后取消选中其他选项,然后单击“下一步>”
  5. 在“数据预览”中,滚动到最右边,然后按住shift并单击最后一列(这将选择所有列)。现在,在“列数据格式”中,选择单选按钮“文本”,然后单击“完成”。

Excel office365 :(客户端版本)

  1. 创建新工作簿
  2. 数据>来自文本/ CSV>选择CSV文件
  3. 数据类型检测>不检测

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

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

Dan*_*Dan 10

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

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

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

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


Doc*_*Max 8

(假设Excel 2003 ...)

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

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

Chr*_*ris 8

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

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


Som*_*Guy 5

(EXCEL 2007 及更高版本)

如何在不编辑源文件的情况下强制Excel不“检测”日期格式

任何一个:

  • 将文件重命名为 .txt
  • 如果您无法执行此操作,请创建一个新工作簿,然后转到
    Data > Get external data > From Text
    并选择您的 CSV,而不是直接在 Excel 中打开 CSV 文件。

无论哪种方式,您都会看到导入选项,只需选择包含日期的每一列并告诉 Excel 将格式设置为“文本”而不​​是“常规”。


Chr*_*isB 5

我为同样的问题所做的是在每个 csv 值之前添加以下内容:“=”,并在每个 CSV 值之后添加一个双引号,然后在 Excel 中打开文件。以下列值为例:

012345,00198475
Run Code Online (Sandbox Code Playgroud)

这些应该在 Excel 中打开之前更改为:

"="""012345","="""00198475"
Run Code Online (Sandbox Code Playgroud)

执行此操作后,每个单元格值在 Excel 中都显示为公式,因此不会被格式化为数字、日期等。例如,值 012345 显示为:

="012345"
Run Code Online (Sandbox Code Playgroud)


mlj*_*ljm 5

这里提供的解决方案都不是一个好的解决方案。它可能适用于个别情况,但前提是您可以控制最终显示。以我的例子为例:我的工作产生了他们销售给零售的产品清单。这是 CSV 格式并包含零件代码,其中一些以零开头,由制造商设置(不受我们控制)。去掉前导零,您实际上可能会匹配另一个产品。零售客户需要 CSV 格式的列表,因为后端处理程序也不受我们控制且因客户而异,因此我们无法更改 CSV 文件的格式。没有前缀'=',也没有添加标签。原始 CSV 文件中的数据正确;当客户在 Excel 中打开这些文件时,问题就开始了。并且许多客户并不真正精通计算机。他们几乎可以打开并保存电子邮件附件。我们正在考虑以两种略有不同的格式提供数据:一种为 Excel Friendly(使用上面建议的选项,通过添加 TAB,另一种作为“主”。但这可能是一厢情愿,因为有些客户不明白为什么我们需要这样做。同时我们继续解释为什么他们有时会在他们的电子表格中看到“错误”的数据。在微软做出适当的改变之前,我认为没有适当的解决方案,只要人们无法控制最终用户的方式使用文件。但这可能是一厢情愿的想法,因为有些客户不明白我们为什么需要这样做。与此同时,我们继续解释为什么他们有时会在电子表格中看到“错误”的数据。在 Microsoft 做出适当更改之前,我认为没有适当的解决方案,只要人们无法控制最终用户如何使用这些文件。但这可能是一厢情愿的想法,因为有些客户不明白我们为什么需要这样做。与此同时,我们继续解释为什么他们有时会在电子表格中看到“错误”的数据。在 Microsoft 做出适当更改之前,我认为没有适当的解决方案,只要人们无法控制最终用户如何使用这些文件。