2010-03-28 33 views
3

我從Sybase返回結果集,我返回到C#客戶端。通過C#編寫字符串,數字數據到Excel工作,但Excel不正確對待數字數據

我用下面的函數將結果集數據寫入到Excel:

private static void WriteData(Excel.Worksheet worksheet, string cellRef, ref string[,] data) 
{ 
    Excel.Range range = worksheet.get_Range(cellRef, Missing.Value); 

    if (data.GetLength(0) != 0) 
    { 
     range = range.get_Resize(data.GetLength(0), data.GetLength(1)); 

     range.set_Value(Missing.Value, data); 
    } 
} 

的數據被正確地寫入。

的問題是,因爲我使用的字符串數組寫入數據(這是一個字符串和浮點型的混合物),Excel中突出顯示包含消息「存儲爲文本數」的數字數據的每一個細胞。

我該如何擺脫這個問題?

非常感謝, Chapax

回答

0

嘗試設置範圍對象的NumberFormat屬性。

+0

我會嘗試這個......但有一個問題 - 有字符串和數字在這個字符串數組 – Chapax 2010-03-28 14:00:15

+0

混合您可以嘗試內的'嘗試每個項目轉換爲'float'或'decimal'或什麼... catch塊 - 如果它工作,相應地設置單元格區域的'NumberFormat'。 – Jay 2010-03-28 16:45:15

3

請嘗試以下操作:用對象數組替換您的字符串數組。

var data = new object[2,2]; 
data[0, 0] = "A"; 
data[0, 1] = 1.2; 
data[1, 0] = null; 
data[1, 1] = "B"; 

var theRange = theSheet.get_Range("D4", "E5"); 
theRange.Value2 = data; 

如果我用這個代碼,相當於你:

var data = new string[2,2]; 

我得到同樣的症狀你。 作爲一個好處,你不需要將任何東西都轉換爲字符串:你可以用你希望顯示的任何東西來填充你的數組。

+0

沒有工作... – Chapax 2010-03-29 13:13:29

+0

你是否將數字作爲float數組傳遞給數組? – Mathias 2010-03-29 19:22:02

+1

如果您收到的數組是字符串數組,則Excel會將其格式化爲字符串。如果它是一個對象數組,一些是數字,則Excel應該識別它。但是如果你的對象數組包含字符串,其中一些發生的是數字,他們仍然會被格式化爲字符串。請注意,在我的示例中,數據[0,1]接收到雙精度值,而不是字符串。 如果不能直接獲取正確類型的對象數組,則可能需要重新構建數組的內容,以便可以/應該雙打的單元格會被雙擊。 – Mathias 2010-03-29 20:33:41