如何防止Excel打开CSV文件时发生任何更改
问题描述:
我有多个.csv文件,其中包含我在另一个程序上生成的数据。我想要打开这些文件中的每一个,从中复制所有数据并将其全部粘贴到Excel上的现有工作簿中。我的问题是,当我用excel打开csv文件时,它会自动将csv文本分成三列或更多列,以后我无法使用“文本到列”数据工具(或任何其他工具)转换数据,因此自动转换从Excel中打破两个不同数字的一些单一值)。有什么办法可以防止excel在我打开csv文件时进行任何更改?如何防止Excel打开CSV文件时发生任何更改
答
您需要在csv文件中指定它是文本。你把你的号码中的报价,并与和等号前述,如做到这一点:
="001145",="55666",="02133"
要做到这一点是做最简单的方式查找,替换,用“=”,替换结束行(你可能需要使用像Notepad ++这样的高级编辑器)和“\ r \ n =”并手动执行文件的开始和结束。
答
避免从Windows资源管理器中打开CSV直接在Excel中通过双击,并考虑在两个选项:
手册用户界面
打开Excel程序本身没有任何文件。在下打开,浏览并选择csv文件。然后,您将浏览导入流程向导。一定要选择1)分隔(不固定) - 逗号类型; 2)标题在第一行; 3)重要说明:将每一列定义为文本类型。
您可能想检查引用选项以包含值,因为逗号可能放在文本字符串中,并可能与分隔逗号分隔符混淆。因此,在自动双击时,Excel会为每个逗号分隔返回多个列。更重要的是,让生成csv文件的软件引用附带的潜在逗号的值。
自动VBA代码
导入CSV导入Excel与QueryTables但格式化所有细胞文本它保存所有数据类型,特别是通过设置后.NumberFormat到@
:
Function ImportCSV()
Dim qt As QueryTable
csvfile = "C:\Path\To\CSV\File.csv"
' FORMAT ALL CELLS AS TEXT
ActiveSheet.Cells.NumberFormat = "@"
' ADD QUERYTABLE
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & csvfile, _
Destination:=Range("$A$1"))
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.Refresh BackgroundQuery:=False
End With
' REMOVE QUERYTABLE
For Each qt In currwb.Sheets(2).QueryTables
qt.Delete
Next qt
Set qt = Nothing
End Function
你知道为什么Excel正在破坏你的数据?在值本身中是否有分隔符(例如逗号)的实例不应被视为分隔符?或者Excel是否将数据分割为固定宽度? CSV是纯文本文件,因此理论上可以根据需要使用自定义VBA代码处理任务。 – chillin
将演示问题的示例测试文件上传到某个公共文件共享站点。很有可能你可以用'IMPORT'而不是'OPEN'来做你想做的事情。 –