【问题标题】:Traversing an ExcelRange with EPPlus使用 EPPlus 遍历 ExcelRange
【发布时间】:2019-06-27 16:28:20
【问题描述】:

我正在使用 EPPlus 从 excel 文件中读取数据。有一次,我想以ExcelRange 的形式获取一行数据并将其传递给另一个函数。但是当我尝试遍历该函数中的ExcelRange 时,它似乎重新分配了ExcelRange。

例如,如果我这样做:

Console.WriteLine(excelRange.ToString());
Console.WriteLine(excelRange[1, 1].Text);
Console.WriteLine(excelRange.ToString());

我得到的输出是

C41:BP41
Training
A1

(“Training”是我的电子表格 A1 单元格中的文本,而不是单元格 C41 中的文本)

如果我尝试这样做:

Console.WriteLine(excelRange.ToString());
Console.WriteLine(excelRange[excelRange.Start.Row, excelRange.Start.Column].Text);
Console.WriteLine(excelRange.ToString());

然后我得到

C41:BP41

C41

有没有办法在不改变ExcelRange 的情况下遍历它?

【问题讨论】:

    标签: c# excel epplus


    【解决方案1】:

    我找到了一种方法,但希望有人知道更好的方法。以下是我的作品:

    int startRow = excelRange.Start.Row;
    int startCol = excelRange.Start.Column;
    int endCol = excelRange.End.Column;
    for (int i = startCol; i <= endCol; i++)
    {
        string cellText = excelRange[startRow, i].Text;
    }
    

    【讨论】:

      【解决方案2】:

      或者,您可以将单元格中的值列表作为

      int startRow = excelRange.Start.Row;
      int startCol = excelRange.Start.Column;
      int endRow = excelRange.End.Row;
      int endCol = excelRange.End.Column;
      
      var rowValues=(object[,]) worksheet.Cells[startRow, startCol, endRow, endCol].Value;
      List<string> lstValues = rowValues.Cast<object>().ToList().ConvertAll(x => Convert.ToString(x));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 2012-01-21
        相关资源
        最近更新 更多