我将报告生成为CSV文件。当我尝试在Excel中打开文件时,它会根据单元格的内容对数据类型进行假设,并相应地重新格式化。
例如,如果CSV文件包含
...,005,...
然后Excel将其显示为5。是否有方法可以覆盖它并显示005?
我希望对文件本身做一些事情,以便用户可以双击CSV文件将其打开。
我使用Excel 2003。
我将报告生成为CSV文件。当我尝试在Excel中打开文件时,它会根据单元格的内容对数据类型进行假设,并相应地重新格式化。
例如,如果CSV文件包含
...,005,...
然后Excel将其显示为5。是否有方法可以覆盖它并显示005?
我希望对文件本身做一些事情,以便用户可以双击CSV文件将其打开。
我使用Excel 2003。
Answers:
打开.csv文件时,没有一种简单的方法可以控制Excel应用的格式。但是,下面列出的三种方法可能会有所帮助。
我的首选是第一选择。
选项1 –更改文件中的数据
您可以按如下方式更改.csv文件中的数据...,=“ 005”,...这将在Excel中显示为...,005,...
Excel会将数据保留为公式,但复制列并使用粘贴特殊值将摆脱公式,但保留格式
选项2 –格式化数据
如果仅是格式问题,并且该列中的所有数据长度均为三位数。然后在Excel中打开数据,然后使用此自定义格式000格式化包含数据的列
选项3 –将文件扩展名更改为.dif(数据交换格式)
更改文件扩展名,然后使用文件导入向导来控制格式。双击后,具有.dif扩展名的文件将由Excel自动打开。
一步步:
不要使用CSV,请使用SYLK。
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)
它提供了对格式的更多控制,并且Excel不会尝试通过检查内容来猜测字段的类型。看起来有点复杂,但是您可以使用很小的子集。
这适用于Microsoft Office 2010,Excel版本14
我误读了OP的首选项“对文件本身做一些事情”。对于那些想要解决方案直接格式化导入格式的人,我仍然保留此设置
在单元格中添加一个不间断的空间可能会有所帮助。例如:
"firstvalue";"secondvalue";"005 ";"othervalue"
它强制Excel将其视为文本,并且空格不可见。在Windows上,您可以通过按Alt + 0160来添加不间断空格。有关更多信息,请参见此处:http : //en.wikipedia.org/wiki/Non-breaking_space
在Excel 2010上进行了尝试。希望这对仍在搜索此问题的正确解决方案的人们有所帮助。
将CSV加载到oleDB中,并强制所有推断出的数据类型为字符串
我问了同样的问题,然后用代码回答了。
基本上,在加载csv文件时,oledb驱动程序会做出假设,您可以告诉它要做出什么假设。
我的代码虽然强制所有数据类型都为字符串,但是...更改模式非常容易。为了我的目的,我使用xslt以我想要的方式获取ti-但我正在解析各种各样的文件。
这使我整日疯狂(因为实际上在打开CSV文件之前您无法控制Excel列类型),并且使用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
在字段前加单引号。Excel会将其视为文本,即使看起来像数字也是如此。
...,`005,...
编辑:这是错误的。仅当将数据直接输入到Excel中时,撇号技巧才起作用。当您在CSV文件中使用它时,不需要的字段中会出现撇号。