打开时如何防止Excel在CSV文件中进行任何更改

时间:2017-10-28 20:33:33

标签: excel vba csv

我有多个.csv文件,其中包含我在另一个程序上生成的数据。我想打开这些文件中的每一个,从中复制所有数据并将其全部粘贴到excel上的现有工作簿中。我的问题是,当我用excel打开csv文件时,它会自动将csv文本分成三列或更多列,以便稍后我无法使用Text to Columns数据工具(或任何其他工具,因此,从excel自动转换会破坏两个不同数字的单个值)。当我打开csv文件时,有什么方法可以阻止excel进行任何更改吗?

2 个答案:

答案 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 = “并手动执行文件的开始和结束。