You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中将数组复制到Excel Range?代码失效问题排查

在C#中将数组复制到Excel Range的正确方法及问题分析

问题原因

你提供的代码中每个单元格显示相同值,核心原因是Excel对象模型对一维数组的赋值逻辑:
当你给一个多行单列的纵向Range赋值一维数组时,Excel会默认将一维数组视为一行的数据,只会把数组的第一个元素重复填充到Range的所有单元格中——因为一维数组在Excel里默认是行方向的,和你要填充的列方向不匹配。
另外代码里的flow.count是小写的c,C#是大小写敏感语言,正确写法应为flow.Count,这也是潜在的语法错误。

解决方法

方法一:将一维数组转为列方向的二维数组

Excel的Range接受二维数组时,会严格按照「行×列」的对应关系填充单元格。对于单列场景,我们需要构造一个[元素个数, 1]结构的二维数组:

Workbook workbook;
Worksheet worksheet;
List<double> flow = new List<double>();

// 此处填充flow列表的逻辑省略
workbook = excel.Workbooks.Open(filename);
worksheet = workbook.Worksheets.Add();

// 构造二维数组(行数=flow元素数,列数=1)
double[,] flow2DArray = new double[flow.Count, 1];
for (int i = 0; i < flow.Count; i++)
{
    flow2DArray[i, 0] = flow[i];
}

// 赋值到目标Range
worksheet.Range[$"A1:A{flow.Count}"].Value = flow2DArray;

方法二:用Transpose转置一维数组

利用Excel内置的Transpose方法,将行方向的一维数组转成列方向的数组,直接匹配纵向Range:

Workbook workbook;
Worksheet worksheet;
List<double> flow = new List<double>();

// 此处填充flow列表的逻辑省略
workbook = excel.Workbooks.Open(filename);
worksheet = workbook.Worksheets.Add();

// 转置数组后赋值
worksheet.Range[$"A1:A{flow.Count}"].Value = excel.WorksheetFunction.Transpose(flow.ToArray());

内容的提问来源于stack exchange,提问作者Paul Muaddib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:25:35