使用Excel Interop将Float数组写入列时每行仅显示首个值,无法找到转置函数的技术求助
解决Excel Interop写入Float数组到A列时重复第一个值的问题
我之前也碰到过一模一样的坑!核心原因很简单:当你给Excel的Range赋值一维数组时,Interop默认会把数组当成行数据来填充,但你选中的是一列单元格区域,所以它会把数组的第一个值重复塞进每一行里。
下面给你两种实用的解决方法:
方法1:将一维数组转为二维数组(最稳妥)
Excel的Range接受的二维数组是[行索引, 列索引]的结构,我们只需要把一维float数组转换成n行1列的二维数组就行:
float[] ftmp = // 你的float数组 Excel.Range rng = ws.Range[ws.Cells[1, 1], ws.Cells[ftmp.Length, 1]]; // 手动转换为二维数组 float[,] twoDArray = new float[ftmp.Length, 1]; for (int i = 0; i < ftmp.Length; i++) { twoDArray[i, 0] = ftmp[i]; } rng.Value = twoDArray;
如果你偏好简洁写法,用LINQ也能快速搞定:
var twoDArray = ftmp.Select(val => new float[] { val }).ToArray(); rng.Value = twoDArray;
方法2:使用Excel内置的转置函数
你说找不到转置函数?其实它藏在WorksheetFunction里,只是需要注意类型转换(转置后会返回object数组):
float[] ftmp = // 你的float数组 Excel.Range rng = ws.Range[ws.Cells[1, 1], ws.Cells[ftmp.Length, 1]]; // 调用Excel的转置函数完成行列转换 object[] transposedValues = (object[])Microsoft.Office.Interop.Excel.WorksheetFunction.Transpose(ftmp); rng.Value = transposedValues;
这个方法相当于让Excel帮你把行方向的数组转成列方向,省去自己写转换逻辑的麻烦。
小提醒
不管用哪种方法,都要确保数组长度和Range的行数完全匹配,不然可能会出现填充不全或者抛出异常的情况哦!
内容的提问来源于stack exchange,提问作者kPuck
相关产品推荐
相关产品推荐

