C#如何将Excel指定区域的矩阵单元格平移至目标工作表原点位置
Excel区域读取写入原点坐标映射方案
问题原因
你原有代码无法对齐到目标表原点的核心问题有两点:
- 循环内的
l++、m++操作会被后续的l = i、m = j赋值直接覆盖,完全没有起到计数作用 - 直接复用源表的行列索引作为目标表的写入索引,源读取起始位置不是1时,写入位置自然会产生对应的偏移
修正方案
核心逻辑是对源索引做偏移换算,抵消源起始位置的偏移量,让源区域的左上角第一个单元格对应目标表的(1,1)位置:
for (int i = n1; i <= n2; i++) { // 目标行号 = 当前源行号 - 源起始行号 + 1,从1开始计数 int targetRow = i - n1 + 1; for (int j = n3; j <= n4; j++) { // 目标列号 = 当前源列号 - 源起始列号 + 1,从1开始计数 int targetCol = j - n3 + 1; if (xlRange.Cells[i, j] != null && ((Excel.Range)xlRange.Cells[i, j]).Value2 != null) { xlWorksheet2.Cells[targetRow, targetCol] = ((Excel.Range)xlRange.Cells[i, j]).Value2.ToString(); } } }
适配说明
该计算逻辑天然覆盖边界场景:
- 当
n1 = n2时,targetRow恒为1,符合单行读取写入首行的需求 - 当
n3 = n4时,targetCol恒为1,符合单列读取写入首列的需求 - 所有单元格的相对行列顺序和源读取区域完全一致,不会出现错位
内容的提问来源于stack exchange,提问作者John Campbell
相关产品推荐
相关产品推荐

