2010-05-27 131 views
3

我在這裏有點困惑。CSV實際上是......分號分隔值...(Excel導出在AZERTY)

當我使用Excel 2003片導出爲CSV,它實際上使用分號......

Col1;Col2;Col3 
shfdh;dfhdsfhd;fdhsdfh 
dgsgsd;hdfhd;hdsfhdfsh 

現在,當我閱讀使用Microsoft驅動程序CSV,預計逗號,看到清單作爲一個大列?

我懷疑Excel是用分號導出的,因爲我有一個AZERTY鍵盤。但是,CSV閱讀器是否也不得不考慮不同的分隔符?

我該如何知道適當的分隔符和/或正確讀取csv?

public static DataSet ReadCsv(string fileName) 
    { 
     DataSet ds = new DataSet(); 
     string pathName = System.IO.Path.GetDirectoryName(fileName); 
     string file = System.IO.Path.GetFileName(fileName); 
     OleDbConnection excelConnection = new OleDbConnection 
     (@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties=Text;"); 
     try 
     { 
      OleDbCommand excelCommand = new OleDbCommand(@"SELECT * FROM " + file, excelConnection); 
      OleDbDataAdapter excelAdapter = new OleDbDataAdapter(excelCommand); 
      excelConnection.Open(); 
      excelAdapter.Fill(ds); 
     } 
     catch (Exception exc) 
     { 
      throw exc; 
     } 
     finally 
     { 
      if(excelConnection.State != ConnectionState.Closed) 
       excelConnection.Close(); 
     } 
     return ds; 
    } 

回答

9

一種方法是隻使用decent CSV library;您可以指定分隔符:

using (var csvReader = new CsvReader("yourinputfile.csv")) 
{ 
    csvReader.ValueSeparator = ';'; 
    csvReader.ReadHeaderRecord(); 

    while (csvReader.HasMoreRecords) 
    { 
     var record = csvReader.ReadDataRecord(): 
     var col1 = record["Col1"]; 
     var col2 = record["Col2"]; 
    } 
} 
+1

這似乎是一個偉大的圖書館......我們可以在商業應用中使用它嗎?我們無法從許可證中解脫出來......此外,您是否需要在我們的「關於」窗口中提供一個屬性,以及必須具備哪些條件?感謝您的回答並分享您的圖書館。 – 2010-05-27 11:08:44

+1

絕對 - 許可證就像他們來的許可證一樣。無需學分 - 您在這裏得到的贊成就足夠了:)但是如果您真的喜歡它,就會非常感謝codeplex網站上的評論。 – 2010-05-27 12:43:15

+0

不幸的是,我們的目標是.NET 2.0,不能添加對KBCsv庫的引用。我們試圖打開源代碼項目,但我們只有VS2003&VS2008。是否有可用的.NET 2.0版本?或者我錯過了什麼? 非常感謝:-) – 2010-05-27 12:55:49

3

檢查計算機上指定的分隔符。控制面板>區域和語言選項>區域選項選項卡 - 單擊自定義按鈕。有一個選項叫做「列表分隔符」。我懷疑這是設置爲分號。

0

正如dendarii所述,Excel使用的CSV分隔符取決於您的區域設置,特別是「列表分隔符」字符。 (和Excel錯誤地做到這一點在我看來,它是稱爲一個逗號分隔的文件)

但是,如果仍然不能解決您的問題,還有另外一個可能的併發症:

檢查「數字分組'字符並確保是不是逗號。

當導出十進制數並且數字分組也設置爲逗號時,Excel似乎恢復爲分號。 將數字分組設置爲句號(。)可以解決這個問題。

0
  • 德語Windows 10解決方案:

Change Windows system delimiter

  • 提及到小數點分隔符更改爲.,也許千位分隔符來(狹窄的空間)爲好。

難以置信這是真的...... 逗號分隔值之間用分號隔開嗎?

+0

有時......通過標籤! (我知道,對嗎?!) – Mogsdad 2016-03-10 17:46:50

+0

有些工具保存**製表符分隔值**而不是'.tsv'。 – 2016-04-12 13:41:18

相關問題