2015-08-15 91 views
5

我收到了將數據保存到CSV文件並將其發送給客戶的要求。 客戶使用Excel和記事本查看此文件。 數據是這樣的:在Excel和記事本中打開CSV格式的文本格式編號

975567EB,973456CE,971343C8

我的數據必須通過 「E3」 一些數量的最終像:

98765E3

所以當在Excel中打開,它將更改爲:

9.8765E + 7

我寫了一個程序來改變這種格式在C#中添加= 「98765E3」 這個文本

while(!sr.EndOfStream) { 
    var line = sr.ReadLine(); 
    var values = line.Split(','); 

    values[0] = "=" + "\"" + values[0] + "\""; //Change number format to string 

    listA.Add(new string[] {values[0], values[1], values[2], values[3]}); 
} 

但隨着客戶,誰使用記事本打開CSV文件,它會顯示這樣的:

= 「98765E3」

如何將CSV文本保存爲CSV文件以在Excel和記事本中以相同的結果打開?非常感謝任何建議!

+2

這在我看來是不可能的。在使用Excel「打開」CSV時,Excel將猜測每個單一數據條目的數據類型。因此'98765E3'被猜測爲數字,'=「98765E3」'被猜測爲導致字符串的公式。這是因爲在Excel中,默認情況下沒有整個列的數據類型首選項。只有在使用導入嚮導導入CSV時,纔可以選擇整列的數據類型。所以人們可以說'98765E3'是文字而不是數字。 –

+0

您可以提供兩種下載選項。一個用於記事本用戶的CSV,一個用於Excel用戶的真正Excel文件。 –

回答

3

不要拍攝信使。

問題不在於你在C#中導出(創建...?)數據的方式。這是你在Excel中打開CSV文件的方式。

Excel有導入文本文件,允許使用字段信息參數指定TextFileColumnDataTypes property數據的每個字段(又名列)在被帶來了無數的選擇。

如果選擇雙精度從資源管理器文件夾窗口中點擊一個CSV文件,然後您將不得不忍受Excel針對每列所需的字段類型進行「最佳猜測」。在進口過程中不會停止詢問您的意見。一些常見錯誤包括:

  • 帶有E的字母數字值通常會被解釋爲科學記數法。
  • DMY日期的一半將被誤解爲錯誤的MDY日期(或反之亦然)。另一半將成爲文本,因爲Excel無法處理類似MDY 14/08/2015的內容。
  • 任何以+開頭的值都會生成#NAME!錯誤,因爲Excel認爲您正在嘗試引入具有命名質量的公式。

這是一個常見錯誤的簡短列表。還有其他人。這是一些常見的解決方案。

  • 使用數據►獲取外部數據►從文本。明確指定任何不明確的列數據類型;例如98765E3作爲文本,日期爲DMY,MDY,YMD等視情況而定。甚至可以選擇丟棄一列無用的數據。
  • 使用文件►打開►文本文件,通過與上述選項相同的導入嚮導。可以使用這兩個命令記錄這些操作以便重複使用。
  • 使用VBA的Workbooks.OpenText method並指定每列的FieldInfo位置和數據類型(後者的常數爲XlColumnDataType)。
  • 將導入文件讀入內存並在將其轉儲到目標工作表之前將其存儲在內存數組中。

還有一些不太精確的解決方案仍然受到Excel的一些解釋。

  • 使用Range.PrefixCharacter迫使數與可以想象被誤解爲科學記數法到工作表作爲文本前導零或字母數字的值。
  • 使用文本限定符字符;通常是ASCII字符034(例如")來包裝要解釋爲文本的值。
  • 將整個文本文件複製並粘貼到目標工作表的A列中,然後使用Range.TextToColumns method(同樣對每列可用FieldInfo選項)。

後面兩種方法會在記事本中產生一些奇數值,但記事本不是Excel,並且不能在幾秒鐘內處理五十萬次計算和其他操作。如果你必須混搭這兩個程序,那麼會有一些妥協。

我的建議是要離開的價值觀是最好的,他們可以在記事本中,並使用現成的設備和工藝在Excel中正確導入數據。

相關問題