2010-03-28 34 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