如何防止excel在打开CSV文件时对其进行任何更改

Posted

技术标签:

【中文标题】如何防止excel在打开CSV文件时对其进行任何更改【英文标题】:How to prevent excel frommaking any changes in a CSV file when opening it 【发布时间】:2017-10-28 20:33:32 【问题描述】:

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

【问题讨论】:

您知道 Excel 究竟为什么会破坏您的数据吗?值本身是否存在不应被视为定界符的定界符实例(例如逗号)?还是 Excel 按固定宽度拆分数据? CSV 是纯文本文件,因此理论上该任务可以根据需要使用自定义 VBA 代码来处理。 将演示问题的示例测试文件上传到某些公共文件共享站点。很可能你可以IMPORT 而不是OPEN 文件来做你想做的事。 【参考方案1】:

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

手动用户界面

在没有任何文件的情况下自行打开 Excel 程序。在打开下,浏览并选择 csv 文件。然后,您将完成导入过程向导。一定要选择 1) delimited (not fixed) - 逗号类型; 2)标题在第一行; 3) 重要:将每一列定义为 Text 类型。

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

自动 VBA 代码

使用 QueryTables 将 csv 导入 Excel,但在将所有单元格格式化为 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

【讨论】:

【参考方案2】:

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

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

最简单的方法是在 , 上进行查找替换,用“,=”替换行尾(您可能需要为此使用 Notepad++ 等高级编辑器)用“\r\n= " 并手动执行文件的开头和结尾。

【讨论】:

我不知道为什么这被否决了,但我投了赞成票。

以上是关于如何防止excel在打开CSV文件时对其进行任何更改的主要内容,如果未能解决你的问题,请参考以下文章

java 导出CSV格式文件 EXCEL打开 防止乱码

如何在 Swift 中触摸 UILabel 时对其进行编辑?

如何打开锁定的 mdb 文件?

如何防止excel保存后更改csv文件编码? [复制]

将元数据添加到 CSV 文件中以指示 Excel 应如何打开

关于excel保存为csv格式后,重新打开文本型数字变为科学计数,且15位后面变成0??