Excel CSV – 数字单元格格式
我生成一个CSV文件的报告。 当我尝试在Excel中打开文件时,会根据单元格的内容对数据types进行假设,并对其进行相应的重新格式化。
例如,如果CSV文件包含
...,005,...
然后Excel显示为5.有没有办法来覆盖这个和显示005?
我宁愿对文件本身做些什么,以便用户可以双击CSV文件来打开它。
我使用Excel 2003。
有没有一种简单的方法来控制打开一个.csv文件的Excel应用格式。 不过下面列出的三种方法可能有所帮助。
我的首选是第一个选项。
选项1 – 更改文件中的数据
您可以更改.csv文件中的数据,如下所示…, =“005” ,…这将在Excel中显示为…, 005 ,…
Excel将保留数据作为公式,但复制列和使用粘贴特殊值将摆脱公式,但保留格式
选项2 – 格式化数据
如果它只是一个格式问题,并且该列中的所有数据都有三位数字的长度。 然后在Excel中打开数据,然后使用此自定义格式000格式化包含数据的列
选项3 – 将文件扩展名更改为.dif(数据交换格式)
更改文件扩展名并使用文件导入向导来控制格式。 双击扩展名为.dif的文件时,Excel会自动打开。
一步步:
- 将文件扩展名从.csv更改为.dif
- 双击该文件以在Excel中打开它。
- “文件导入向导”将启动。
- 将“文件types”设置为“分隔符”,然后单击“下一步”button。
- 在分隔符下面,勾选“逗号”并点击“下一步”button。
- 点击显示的每一列数据,然后select“列数据格式”。 值为“005”的列应该被格式化为“文本”。
- 点击完成button,该文件将由Excel以您指定的格式打开。
不要使用CSV,请使用SYLK。
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK);
它提供了对格式化的更多控制,Excel不会通过检查内容来猜测字段的types。 它看起来有点复杂,但是你可以使用一个非常小的子集。
这适用于Microsoft Office 2010,Excel版本14
我误解了OP的偏好“对文件本身做些什么”。 对于那些想要直接格式化input的解决scheme,我仍然保留这一点
- 打开一个空白(新)文件(文件 – >从工作簿中的新)
- 打开导入向导(数据 – >从文本)
- select您的.csv文件和导入
- 在对话框中,select“分隔符”,然后单击“下一步”。
- select你的分隔符(除了'逗号'除外),select你的文字限定符(可能是{None}),点击下一步
- 在数据预览字段中select您想要成为文本的列。 它应该突出。
- 在列数据格式字段中,select“文本”。
- 点击完成。
您可以简单地将范围设置为文本格式。
这里还有一个关于数字格式的好文章,以及如何编程它们。
事实上,我发现,至less从Office 2003开始,您可以将Excel电子表格保存为XML文件。 因此,我可以生成一个XML文件,当我双击它时,它将在Excel中打开。 它提供与SYLK相同的控制级别,但是XML语法更直观。
在单元格中添加一个不间断的空间可能会有所帮助。 例如: "firstvalue";"secondvalue";"005 ";"othervalue"
它强制Excel将其视为文本,并且空间不可见。 在Windows上,您可以通过提示alt + 0160来添加一个不间断的空间。 请参阅这里获取更多信息: http : //en.wikipedia.org/wiki/Non-breaking_space
尝试在Excel 2010上。希望这可以帮助那些仍然在为这个问题寻找一个合适的解决scheme的人。
我从C#代码导出CSV数据时遇到了这个问题,并通过将前导零数据与制表符\ t相加来解决此问题,因此数据在Excel中被解释为文本而不是数字(与其他字符不同,不可见)。
我喜欢=“001”的方法,但这不会允许导出的CSV数据再次重新导入到我的C#应用程序,而不会从导入CSV文件中删除所有这些格式(相反,我只是修剪导入数据) 。
我相信当你导入文件时,你可以select列types。 使它成为文本而不是数字。 我目前没有副本在我面前查看。
将csv加载到oleDB并强制所有推断的数据types为string
我问了同样的问题,然后用代码回答。
基本上当csv文件被加载时,oledb驱动程序做出了假设,你可以告诉它做什么假设。
我的代码强制所有的数据typesstring,虽然…它很容易改变架构。 为了我的目的,我用了一个xslt来获取我想要的方式 – 但是我正在parsing各种各样的文件。
我知道这是一个古老的问题,但我有一个解决scheme,这里没有列出。
当你产生csv在逗号后面但在你的值之前加一个空格,如, 005,
这工作,以防止在Excel 2007中的自动date格式。
当导入的CSV文件在单元格内有换行符时,文本导入向导方法不起作用。 此方法处理这种情况(至less使用制表符分隔的数据):
- 创build新的Excel文件
- Ctrl + Aselect所有单元格
- 在数字格式combobox中,select文本
- 在文本编辑器中打开制表符分隔的文件
- select全部,复制并粘贴到Excel中
这一直使我疯狂的整天(因为在打开CSV文件之前确实无法控制Excel列的types),这对我来说,使用VB.NET和Excel Interop:
'Convert .csv file to .txt file. FileName = ConvertToText(FileName) Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _ {2, xlTextFormat}, _ {3, xlGeneralFormat}, _ {4, xlGeneralFormat}, _ {5, xlGeneralFormat}, _ {6, xlGeneralFormat}} 'We are using OpenText() in order to specify the column types. mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes) mxlWorkBook = mxlApp.ActiveWorkbook mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet) Private Function ConvertToText(ByVal FileName As String) As String 'Convert the .csv file to a .txt file. 'If the file is a text file, we can specify the column types. 'Otherwise, the Codes are first converted to numbers, which loses trailing zeros. Try Dim MyReader As New StreamReader(FileName) Dim NewFileName As String = FileName.Replace(".CSV", ".TXT") Dim MyWriter As New StreamWriter(NewFileName, False) Dim strLine As String Do While Not MyReader.EndOfStream strLine = MyReader.ReadLine MyWriter.WriteLine(strLine) Loop MyReader.Close() MyReader.Dispose() MyWriter.Close() MyWriter.Dispose() Return NewFileName Catch ex As Exception MsgBox(ex.Message) Return "" End Try End Function
打开CSV文件时,您将看到文本导入向导。 在向导的最后一步,您应该能够将特定列作为文本导入,从而保留“00”前缀。 之后你可以用任何你想要的方式格式化单元格。
我试着用Excel 2007,它似乎工作。
那么,Excel永远不会popupCSV文件的向导。 如果将其重命名为.txt,则在下次执行“文件”>“在Excel中打开”时,将看到该向导。
在该字段之前放一个单引号。 Excel将它视为文本,即使它看起来像一个数字。
...,`005,...
编辑:这是错的。 撇号技巧仅适用于直接在Excel中input数据。 当您在CSV文件中使用它时,撇号将显示在您不想要的字段中。
只需在CSV文档中添加数字即可。