如何防止Excel打开CSV文件中的任何更改

我有多个.csv文件与我在另一个程序上生成的数据。 我想要打开这些文件中的每一个,从中复制所有数据,并将其全部粘贴到Excel的现有工作簿上。 我的问题是,当我用excel打开csv文件时,会自动将csv文本分成三列或更多列,以后我无法使用“文本到列”数据工具(或任何其他工具)转换数据,自动转换从Excel中打破了一些单一的值在两个不同的数字)。 有没有什么办法可以防止Excel打开一个CSV文件进行任何更改?

避免从Windows资源pipe理器中双击直接打开CSV到Excel中,并考虑两个选项之一:

手动用户界面

打开Excel程序本身没有任何文件。 在“ 打开”下 ,浏览并selectcsv文件。 然后,您将浏览导入过程向导。 一定要select1)分隔(不固定) – 逗号types; 2)标题在第一行; 3)重要:将每一列定义为文本types。

您可能需要检查引用选项以包含值,因为逗号可能会放在文本string中,并可能与逗号分隔符混淆。 因此,在自动双击时,Excel会为每个逗号分隔返回多个列。 更重要的是,有生成CSV文件的软件引用附带潜在逗号的值。

自动VBA代码

使用QueryTables将csv导入到Excel中,但将所有单元格格式化为保留所有数据types的Text ,具体方法是将.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 

您需要在csv文件中指定它是文本。 您可以通过将您的号码放在引号中,并在前面加上等号来做到这一点,例如:

 ="001145",="55666",="02133" 

最简单的方法是用“,=”代替行结束符(你可能需要使用像Notepad ++这样的高级编辑器),用“\ r \ n =”和“手动启动和结束文件。