我有多个.csv文件,其中包含我在另一个程序上生成的数据。我想打开这些文件中的每一个,从中复制所有数据并将其全部粘贴到excel上的现有工作簿中。我的问题是,当我用excel打开csv文件时,它会自动将csv文本分成三列或更多列,以便稍后我无法使用Text to Columns数据工具(或任何其他工具,因此,从excel自动转换会破坏两个不同数字的单个值)。当我打开csv文件时,有什么方法可以阻止excel进行任何更改吗?
答案 0 :(得分:2)
通过双击Windows资源管理器,避免直接将CSV打开到Excel中,并考虑以下两个选项之一:
手动用户界面
单独打开Excel程序,无需任何文件。在打开下,浏览并选择csv文件。然后,您将完成导入过程向导。一定要选择1)分隔(不固定) - 逗号类型; 2)标题在第一行; 3)重要:将每列定义为 Text 类型。
您可能需要勾选引号选项以包含值,因为逗号可能放在文本字符串中,并且可能与分隔的逗号分隔符混淆。因此,在自动双击时,Excel为每个逗号分隔返回了多个列。更重要的是,让软件生成csv文件引用其中包含潜在逗号的值。
自动VBA代码
使用QueryTables将csv导入Excel,但在将所有单元格格式化为 Text 后保留所有数据类型,特别是将.NumberFormat设置为@
:< / p>
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
答案 1 :(得分:0)
您需要在csv文件中指定它是文本。您可以通过将数字放在引号中并在前面加上等号来完成此操作,例如:
="001145",="55666",="02133"
最简单的方法是使用“,=”进行查找替换,替换行尾(您可能需要使用像Notepad ++这样的高级编辑器)“\ r \ n = “并手动执行文件的开始和结束。