我知道为什么我会收到错误"列号必须介于1到16384之间"?

时间:2016-03-26 01:12:12

标签: c# .net excel closedxml

我的代码试图完成的是将所有单元格从一个工作表复制到另一个工作表。这是简单的块

// find the index of the first empty row and column in the dumped file
int m = 1; while ( !wb.Worksheet(3).Cell(m,1).IsEmpty() ) ++m; 
int n = 1; while ( !wb.Worksheet(3).Cell(1,n).IsEmpty() ) ++n;
// copy from dumped file into raw data file
for (int i = 1; i < m; ++i )
{
    for (int j = 1; i < n; ++j)
    {
        wb.Worksheet(1).Cell(i,j).Value = wb.Worksheet(3).Cell(i,j).Value;
    }
}

并以某种方式抛出错误

  

列号必须介于1和16384之间

知道为什么会这样吗?我没有看到任何无限循环或类似的东西。

2 个答案:

答案 0 :(得分:3)

这行代码有两件事情。

for (int j = 1; i < n; ++j)
  1. j没有限制;它只会在i < n时不断增加。应该是:
    for (int j = 1; j < n; ++j)
  2. 这很可能不相关,但在使用 j之前++j增量。使用 j后,使用j++增加。您的代码可以写为
    for (int j = 2; j < n; j++)我不确定您是否希望第一次迭代以j开头为1或2。

答案 1 :(得分:0)

看起来你正在循环,直到找到一个空行或列。如果它没有找到(似乎不太可能),那么它肯定会超越界限。

你在用什么?是互操作吗?您可以查看Worksheet.UsedRange.Rows.CountWorksheet.UsedRange.Columns.Count。根据您尝试执行的操作,您可以复制并粘贴Worksheet.UsedRange,而不是一次复制一个单元格的值。