C#:使用ExcelPackage获取行/列数

Nap*_*oli 35 c# excel openoffice.org worksheet ms-office

我需要从Excel电子表格中读取和写入数据.有没有一种方法可以找出某个工作表使用ExcelPackage有多少行/列?我有以下代码:

FileInfo newFile = new FileInfo(@"C:\example.xlsx");
using (ExcelPackage xlPackage = new ExcelPackage(newFile)) 
{
    ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets[1];
}
Run Code Online (Sandbox Code Playgroud)

我需要迭代这个工作表所拥有的每个单元格并将其吐入一个相当大的表中,但我不想打印出空白单元格或获得异常.有没有类似的方法worksheet.rowNumcolNum

Kwe*_*wex 42

您可以使用ExcelPackage(EPPlus.dll版本3.0.0.2)获取行数和列数,如下所示:

  var rowCnt = worksheet.Dimension.End.Row;
  var colCnt = worksheet.Dimension.End.Column;
Run Code Online (Sandbox Code Playgroud)

  • 这不完全正确.如果数据已被清除但未被删除,则会出现问题.它可能会返回许多行或列. (7认同)

Eds*_*onF 12

这就是我做的:

要获取工作簿上的值数组:

object[,] valueArray = sheet.Cells.GetValue<object[,]>();
Run Code Online (Sandbox Code Playgroud)

获得范围执行以下操作:

int rangeMaxRows = sheet.Dimension.End.Row; 
int rangeMaxColumns = sheet.Dimension.End.Column;
Run Code Online (Sandbox Code Playgroud)


avi*_*vid 6

我将从UsedRange属性开始,然后对UsedRange do Cell.End(xlUp)的最后一行中的每个Cell开始.这应该为每列提供最终单元格,具有最大行索引的单元格是真实使用范围中的最后一个单元格.

UsedRange属性可能显示错误,因为清除单元格但未删除单元格时,UsedRange属性不会更新.要使UsedRange属性再次有效,只需选择最后一个单元格后面的所有行和列(所有空白单元格),然后进行编辑 - >删除.

  • ExcelPackage WorkSheet对象没有UsedRange属性. (5认同)

小智 5

int row = _excelSheet.Rows.CurrentRegion.EntireRow.Count;
int col = _excelSheet.Columns.CurrentRegion.EntireColumn.Count;
Run Code Online (Sandbox Code Playgroud)


BID*_*per 1

我单独使用sheet.UsedRange,但注意到范围末尾的一些单元格是空白的,但仍然包含在范围内。

这是可行的,但是为了提高效率,您可能最好从范围中的最后一行开始并倒数以查看数据结束的位置(而不是从第一行开始的此片段!)

        int count = 0;
        E.Range excelRange = sheet.UsedRange;
        object[,] valueArray = (object[,])excelRange.get_Value(E.XlRangeValueDataType.xlRangeValueDefault);
        if (valueArray.GetUpperBound(0) > 1)
        {
            for (int i = 0; i < valueArray.GetUpperBound(0) + 2; i++)
            {
                if (valueArray[i + 2, 1] == null)
                    break;
                else
                    count++;
            }
        }
Run Code Online (Sandbox Code Playgroud)