2017-10-28 145 views
0

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

+0

你知道为什么Excel正在破坏你的数据?在值本身中是否有分隔符(例如逗号)的实例不应被视为分隔符?或者Excel是否将数据分割为固定宽度? CSV是纯文本文件,因此理论上可以根据需要使用自定义VBA代码处理任务。 – chillin

+0

将演示问题的示例测试文件上传到某个公共文件共享站点。很有可能你可以用'IMPORT'而不是'OPEN'来做你想做的事情。 –

回答

0

您需要在csv文件中指定它是文本。你把你的号码中的报价,并与和等号前述,如做到这一点:

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

要做到这一点是做最简单的方式查找,替换,用“=”,替换结束行(你可能需要使用像Notepad ++这样的高级编辑器)和“\ r \ n =”并手动执行文件的开始和结束。

1

避免从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 
相关问题