2017-10-28 54 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 
相關問題