Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过C#works将字符串、数字数据写入Excel,但Excel不能正确处理数字数据_C#_Excel_Vsto - Fatal编程技术网

通过C#works将字符串、数字数据写入Excel,但Excel不能正确处理数字数据

通过C#works将字符串、数字数据写入Excel,但Excel不能正确处理数字数据,c#,excel,vsto,C#,Excel,Vsto,我从Sybase获得结果集,然后返回给C#client 我使用以下函数将结果集数据写入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)

我从Sybase获得结果集,然后返回给C#client

我使用以下函数将结果集数据写入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

尝试设置range对象的NumberFormat属性。

尝试以下操作:用对象数组替换字符串数组

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];
我的症状和你一样。
作为一个附带的好处,您不必对字符串进行任何强制转换:您可以用希望显示的任何内容填充数组。

我将尝试这个。。。但是有一个问题——这个字符串数组中有字符串和数字的混合体。您可以尝试将每个项强制转换为
float
decimal
try…catch
块中的任何内容——如果它起作用,相应地为单元格区域设置
NumberFormat
。是否将数字作为浮点值传递到数组中?如果接收的数组是字符串数组,则Excel将其格式化为字符串。如果它是一个对象数组,有些是数字,Excel应该能够识别它。但是,如果对象数组包含字符串,其中一些恰好是数字,它们仍将被格式化为字符串。注意,在我的示例中,数据[0,1]接收的是一个double,而不是字符串。如果无法直接获得正确类型的对象数组,则可能必须重新转换数组的内容,以便将可以/应该是双精度的单元格转换为双精度。Mathias工作得很好。是的,我传递了一个字符串数组来填充2D数组。之前我只是显式地将这个数组转换为“object”,但现在我编写了一个不同的方法来只获取对象。非常感谢你的帮助。