任何人都不会碰巧知道如果有一个令牌我可以加入到我csv用于某一场所以Excel并不试图将其转换为一个日期?

我想写一个.csv文件从我的应用程序和一个值的情况看起来足够像一个日期,Excel是自动转换,从文字到一个日期。我试图把我所有的文字(包括一个看起来像日期)在双引号,但没有效果。

有帮助吗?

解决方案

我们发现,把一个'='前双报价将完成你想要什么。它迫使数据是文本。

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

编辑(根据其他员额):因 Excel2007年的错误指出Jeffiekins 一个应当使用 方案提出的由安德鲁: "=""2008-10-03"""

其他提示

我知道这是一个老问题,但问题是不会走的很快。CSV文件是很容易产生从大多数编程语言,而小,人类可读的,在一场危机,与一个普通的文本编辑器,并无处不在。

问题不仅与 有空房的 在文本的领域,但是 什么数字 也得到了转变,从文字到的数字。几个例子,这是成问题的:

  • 邮政编码
  • 电话号码
  • 政府颁发的身份证件号码

这有时 可以 开始与一个或多个零(0),它获得扔掉的时转换为数字。或价值包含符,可以混淆的数学运营者(如在日期:/,-).

两种情况下,我可以认为,"前添加="的解决方案,如前面所提到的, 可能不是理想

  • 该文件可能被进口到一个外的其他程序MS Excel(MS Word的邮件合并的功能想到的),
  • 那里的人-可读性可能是重要的。

我的黑客工作围绕着这个

如果一个预/追加非数字和/或非日期的角色的价值,值将被确认为案文并没有转换。一个非印刷字符将是良好的,因为它将不会改变所显示的价值。然而,普通老空间character(\s,ASCII32)不能用于这一点,因为它得到被砍掉的Excel和随后的价值仍然得到转化。 还有各种其他印刷和非印刷空间的角色,将工作。 最简单的 但是是 append(后加的)简单的签字( ,ASCII9).

福利的这种方法:

  • 可从键盘或与一个容易记住的ASCII码(9),
  • 它不会打扰进口、
  • 通常 不打扰邮件合并结果(根据模板布图,但通常它只是增加了一个广阔的空间结束时的一个线)。(如果这是一个问题,看看其他人物,例如零宽度空间(ZWSP,Unicode U+200A)
  • 是不是一个很大的障碍,当观察CSV在记事本(etc),
  • 和可以删除,通过找到的/替换在Excel(或者记事本等)。
  • 你不需要 进口 CSV,但可以简单的双击 打开 CSV在Excel中。

如果有一个原因你不想使用的标签,在一个Unicode表为别的东西合适的。

另一个选择

可能产生XML文件,其一定的格式,也是接受对于进口通过新MS Excel的版本,并允许更多的选择相似。XLS格式,但是我没有经验。

因此,有各种不同的选项。根据你的要求/应用程序,一个可能优于另一个。


除了

它需要被说,较新的版本(2013年+)MS Excel不要开CSV在电子表格格式的任何更多-一个更speedbump在一的工作流程使Excel少有用的...至少,说明存在得到解决它。例如见这个计算器: 如何正确显示。csv文件内的Excel2013?.

工作的贾的解决方案的问题带到了Jeffiekins,你可以修改

"May 16, 2011"

"=""May 16, 2011"""

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

如果你有的灵活性来名称的文件比其他的东西".csv",你可以称它与"。txt"延伸,如"Myfile.txt"或者"Myfile.csv.txt".然后当你打开它在Excel(不拖拉,但使用文件的>开放的或最近使用的文件列表),Excel将为你提供一个"文本进口向导"。

在第一个向导页,选择"分隔"的文件类型。

在第二页导选择","为隔符,也可以选择的文字限定词,如果你已经包围了你的价值观的报价

在第三页,选择每一列单独地并分配每一类"的文字"而不是"一般"停止Excel从搞乱你的数据。

希望这可以帮助你或某人与一个类似的问题!

警告:Excel07年(至少)有一个(闲话)的错误:如果有一个逗号在内容的一个领域,它并不分析="领域,内容"正确,而是把一切都逗号后的入以下领域,不论引号。

唯一的解决方法,我已经找到,工作是消除=当领域的内容包括一个逗号。

这可能意味着,有一些领域,不可能表示完全的"权利"在Excel中,但是现在我相信没有人是太感到惊讶。

同时建立的串被写入我CSV文件中的C#我不得不格式,这种方式:

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

在Excel2010年打开一个新的一页。在数据带点击"获得外部数据的文字"。选择你的CSV文件,然后点击"开放"。点击"下一步"。取消选择的"标签",将检查标记的下一个以"逗号",然后点击"下一步"。点击任何地方在第一栏中。同时,保持所转移的关键标跨直到你可以点击在最后一栏,然后释放转移的关键。点击"文本"无线电按钮然后点击"完成"

所有列将进口的文本,只是因为他们在CSV文件。

仍然是一个问题,在微软办公室2016年释放,而不是干扰我们这些工作与基因的名称,如MARC1,MARCH1,SEPT1等。该解决方案,我已经找到最实际的后产生".csv"的文件,这将打开/分享Excel用户:

  1. 打开CSV文件以文本(记事本)
  2. 复制(ctrl+a,ctrl+c)。
  3. 它贴在一个新的excel片-这都将贴在一个柱作为长长的文字符串。
  4. 选/选择此列。
  5. 去数据"的文字,以列...",在窗口打开的选择"分隔"(下).检查"逗号"是标志(标志着它将已经表现出的分离的数据栏下)(下),在该窗口可以选择列想要和标记作为文本(而不是一般的)(完成的).

禾田

这里是简单的方法我们用在这里工作时产生的csv文件中的第一个地方,它不会改变价值观一点,所以它不是适合所有应用程序:

在前面加一个空间的所有数值在csv

这一空间将获得剥通过excel数字,例如"1","2.3"和"-2.9e4"但仍将在日期"01/10/1993"和布尔就像"真正的",停止它们被转化为excel的内部数据类型。

它还停止双引号中被屠杀于阅读,所以一个万无一失的方法制作的文本在csv保持不变excel即使是一些文字像"3.1415"是围绕与双引号,并将整个串用的空间,即(使用单一的报价显示什么你会类型)'"3.1415"'.然后在excel你总是有原串,除了周围环绕着双引号,并开始通过空间所以你需要考虑到那些在任何公式等。

(假设Excel2003...)

当使用的文字列的向导,为步骤3,你可以支配的数据类型为每个列。点击列在预和改变行为不端的列从"一般"到"文本"。

这是一个只有这样我知道如何做到这一点,不搞内部文件本身。像往常一样使用Excel的,我了解到这种通过打我的头在办公桌上的时间。

改变。csv文件的扩展。txt;这将停止Excel从自动转换的文件时,它的开幕。这里就是我如何做到这一点:开Excel到一个空白的工作表,关闭空白片,然后File=>开放和选择你的文件。txt扩展。这种部队Excel打开"案文进口精灵"在哪里它就会问你问题你怎么想解释的文件。首先,你选择你的delimiter(逗号,标签,等等),然后(这是最重要的部分),你选择一组列的列和选择的格式。如果你到底想要什么在文件,然后选择"案文"和Excel会显示什么的之间的分隔符。

2018

唯一妥善解决,为我工作(并且还 无需修改CSV).

Excel2010年:

  1. 创建新的工作簿
  2. 数据>从文>选择你的CSV文件
  3. 在出,选择"分隔"无线电按钮,然后点击"下一步"
  4. 符框:打勾只有"逗号,"和取消其他选择,然后点击"下一步"
  5. 在"数据预览",滚动到右侧,然后举行转移,并点击的最后一栏(这将选择所列)。现在,在"列的数据格式"选择的无线电按钮"文本",然后点击"完成"。

Excel office365: (客户的版本)

  1. 创建新的工作簿
  2. 数据>从文/CSV>选择你的CSV文件
  3. 数据类型的检测>没有检测到

注: Excel office365(网络版),为我写这个,你就不能做到这一点。

(EXCEL2007年和以后)

如何力excel不到"检测日"的日期格式没有源文件的编辑

无论是:

  • 该文件重新命名为。txt
  • 如果你不能这样做,而不是打开CSV文件直接在excel中,创建一个新的工作簿,然后转至
    Data > Get external data > From Text
    选择你的CSV。

不管怎样,你将会出现进口选择,只需选择每个柱包含日期,并告诉excel格式为"文本",不是"一般"。

没有任何解决方案提供这是一个很好的解决方案。它可以工作为个别情况,但仅仅如果你是在控制最终显示。把我的例子:我的工作产生的产品清单,他们出售给零售。这是在CSV格式,并包含一部分代码,他们中的一些开始有零的,由制造商(不在我们控制)。带走导致零和你实际上可能匹配的另一种产品。零售客户想要的名单CSV格式,因为后端处理程序,这也是我们的控制并不同每个客户,因此我们无法改变的格式CSV文件。没有为前缀'=',也不添加标签。该数据在原CSV文件是否正确;这是当顾客打开的那些文件在Excel的问题开始。许多客户是不是真的计算机知识。他们可以仅仅是关于开放和保存一个电子邮件附件。我们正在考虑提供数据在两个略有不同的格式:作为一个Excel型(采用的选择上述建议通过添加一个选项,另一个为'。但这可能是一厢情愿的想法,作为某些顾客不会明白为什么我们需要这样做。与此同时,我们继续保持解释为什么他们有时看看"错误"的数据,在他们的电子表格。直到Microsoft的一种适当的变化,我看不到适当的解决此,只要一个没有控制终端用户使用的文件。

我做了什么对于这个同样的问题是,添加以下前每个csv值:"=""" 和一个双引号之后的每个CSV值,在打开文件,在Excel中。采取以下值,例如:

012345,00198475

应该将这些改变之前,在Excel中打开:

"="""012345","="""00198475"

你这样做之后,每一单元的价值出现作为一个公式,在Excel和所以不会被格式化作为一个数字,日期,等等。例如,一个值的012345出现为:

="012345"

我必须强这周遇到这个《公约》,这似乎是一个很好的方法,但是我找不到它所引用的任何地方。是任何人都熟悉它?你能举一个来源?我还没有找了几个小时,但我希望有人会承认这种做法。

实例1:=("012345678905")显示为 012345678905

实例2:=("1954-12-12")显示为 1954-12-12, ,不 12/12/1954.

它不Excel。Windows并认识到该公式,作为数据的日期和您.你必须改变窗口设置。

"控制面板"(->"开关,典型的观点")->"区域和语言 选择"->标签"区域选项"->"定义..."->卡"数量"->和 然后变化的符号根据你想要什么。

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

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

嗨,我有同样的问题,

我写这vbscipt创造另一个CSV文件。新CSV文件将具有空间中的每个领域,所以excel将它理解为文本。

所以你创建的一个。js文件的代码如下(例如Modify_CSV.js)、保存和关闭。 你的原始文件给你的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

无需修改csv文件你可以:

  1. 改变excel格式细胞选择"的文字"
  2. 然后使用的"文本进口导"来定义的csv细胞。
  3. 一旦进口删除,数据
  4. 然后只是作为纯文本

excel会正确的格式和独立的csv细胞以文本格式的忽视自动日期格式。

那种愚蠢的工作,但它打败了修改csv数据之前,进口。安迪*贝尔德和理查德的种躲避这种方法,但是错过了几个重要的步骤。

我知道这是一个古老的丝线。对于那些像我这样,他仍有这样的问题采用的办公室2013年通过powershell com对象可以使用 安全方法.问题是,这种方法有许多参数,有时是相互排斥的。要解决这个问题可以使用的援引-namedparameter方法中引入了 这个职位.一个例子就是

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

不幸的是我刚刚发现,这种方法以某种方式打破csv分析时,细胞中含有换行.这是支持通过csv但微软执行情况似乎被窃听。它也没有以某种方式检测不到德国的特殊字符。给予它正确的文化并没有改变这behaveiour.所有文件(csv和脚本)保存与utf8编码。第一,我写下代码插入csv细胞细胞。

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

但是,这是极端缓慢,这就是为什么我看着一种替代方法。Appearently Excel允许设置价值的一定范围的细胞用一个矩阵。所以我使用算法的 这个博客的 改变csv在multiarray.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

你可以使用上述编码作为这是应该将任何csv入excel。只是变化的路径csv和分隔字在底部。

在我的情况下,"Sept8"csv文件中产生的使用R被转换成"8-Sept"通过Excel2013年。问题解决了通过使用写。xlsx2()功能在阅读和包装产生的输出文件,在阅读的格式,通过它可以装载的Excel没有不必要的转换。因此,如果给你一个csv文件,可以尽量载入R并将其转换成您的使用编写。xlsx2()function.

一个解决方法使用谷歌驱动(或数字,如果你在一个Mac):

  1. 打开的数据,在Excel
  2. 设定的格式列不正确的数据来文(格式>细胞>数>文本)
  3. 负载的.csv入,并打开它与谷歌片
  4. 复制的违规列
  5. 贴列入Excel文本(编辑>贴的特殊>文本)

或者如果你是一个Mac上为步骤3,你可以打开的数据中的数字。

(EXCEL2016年之后,实际上我没有试图在旧版本)

  1. 打开新的空白页
  2. 去卡"数据"
  3. 点击"从文字/CSV"和选择你的csv文件
  4. 检查在预览数据是否正确。
  5. 在情况下,当一些列转化为日点击"编辑",然后选择类型的文本,通过点击日历头的柱
  6. 点击"附近和下载"

好的找到一个简单的方法来做到这一点,在Excel2003年至2007年。打开一个空白xls工作簿。然后转到数据单、进口的外部数据。选择你的csv文件。去通过的向导和随后在"列的数据格式"选择的任何列需要被迫"文本"。这将导入整个列作为一个文本格式的防止Excel试图从享任何特定的细胞作为一个日期。

这个问题仍然存在Mac办公室2011年和办公室2013年我无法阻止它的发生。这似乎是一个基本的东西。

在我的情况下我不得不等价值观"1 - 2" & "7 - 12" 内CSV围内正确引号,这种自动转换到一个日期,在excel中,如果你尝试,随后将它转换只是普通的文本会得到一个数字表示的日期如43768.此外,它重新格式化的大量发现,在条形码和EAN号123E+数字再次无法转换回来。

我们发现,谷歌驱动的谷歌表不转换成数字的日期。条形码没有逗号在他们每3个字符,但这些都是很容易去除。它处理Csv真的很好尤其是在处理与MAC/Windows Csv。

可能拯救一个人的某个时候。

最简单的解决方案 我只是想这个了今天。

  • 开词
  • 代替所有连字符连接线
  • 保存和接近
  • 在Excel中打开

一旦你做的编辑,你可以随时打开它回字再以代替的连接线带连字符。

糊表进字。做一个搜索/替换和变化所(横线)成--(双划).抄和粘贴到Excel。可以不同于其他符号(/),等等。如果需要改变回一个划一旦在Excel中,只要格式列于文本,然后作出的改变。希望这会有所帮助。

我这样做的信用卡号码,请转换为科学符号:我最终导入我的.csv入Google表。进口选择现在允许用自动格式的数值。我设置任何敏列为纯文本和载您.

这是一个可怕的工作流程,但至少我的价值是左边的方式,他们应该是。

我做了这个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解决办法之前,它没有包括插入'前面的输入文本。这个代码保留的数据在其原始形式。

如果你放倒的逗号在开始场,它会被解释为文本。

例如:25/12/2008 变得 '25/12/2008

你也可以选择领域的类型时进口。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top