题
任何人都不会碰巧知道如果有一个令牌我可以加入到我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用户:
- 打开CSV文件以文本(记事本)
- 复制(ctrl+a,ctrl+c)。
- 它贴在一个新的excel片-这都将贴在一个柱作为长长的文字符串。
- 选/选择此列。
- 去数据"的文字,以列...",在窗口打开的选择"分隔"(下).检查"逗号"是标志(标志着它将已经表现出的分离的数据栏下)(下),在该窗口可以选择列想要和标记作为文本(而不是一般的)(完成的).
禾田
这里是简单的方法我们用在这里工作时产生的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年:
- 创建新的工作簿
- 数据>从文>选择你的CSV文件
- 在出,选择"分隔"无线电按钮,然后点击"下一步"
- 符框:打勾只有"逗号,"和取消其他选择,然后点击"下一步"
- 在"数据预览",滚动到右侧,然后举行转移,并点击的最后一栏(这将选择所列)。现在,在"列的数据格式"选择的无线电按钮"文本",然后点击"完成"。
Excel office365: (客户的版本)
- 创建新的工作簿
- 数据>从文/CSV>选择你的CSV文件
- 数据类型的检测>没有检测到
注: 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文件你可以:
- 改变excel格式细胞选择"的文字"
- 然后使用的"文本进口导"来定义的csv细胞。
- 一旦进口删除,数据
- 然后只是作为纯文本
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):
- 打开的数据,在Excel
- 设定的格式列不正确的数据来文(格式>细胞>数>文本)
- 负载的.csv入,并打开它与谷歌片
- 复制的违规列
- 贴列入Excel文本(编辑>贴的特殊>文本)
或者如果你是一个Mac上为步骤3,你可以打开的数据中的数字。
(EXCEL2016年之后,实际上我没有试图在旧版本)
- 打开新的空白页
- 去卡"数据"
- 点击"从文字/CSV"和选择你的csv文件
- 检查在预览数据是否正确。
- 在情况下,当一些列转化为日点击"编辑",然后选择类型的文本,通过点击日历头的柱
- 点击"附近和下载"
好的找到一个简单的方法来做到这一点,在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
你也可以选择领域的类型时进口。