这是我的代码。它的目的是计算第一列中有文本的行数
ExcelWorksheet sheet = null;
using (ExcelPackage pkg = new ExcelPackage(new MemoryStream(_fileBytes)))
{
sheet = pkg.Workbook.Worksheets[1];
}
int rows = sheet.Dimension.End.Row;
int count = 0;
for (int i = 1; i <= rows; ++i)
{
if (!string.IsNullOrEmpty(sheet.Cells[i, 1].Text))
++count;
}
当我刚在调试器外运行代码时,我在sheet.Cells[i, 1].Text
调用中得到一个异常:
Package object was closed and disposed, so cannot carry out operations
on this object or any stream opened on a part of this package.
当我使用调试器逐步完成它时,我会得到相同的异常。。。除非我的手表窗口中有这个:sheet.Cells[1, 1].Text
。如果我在初始化sheet
对象之前对代码运行调试器(即按F5),我会得到异常。如果我逐步通过在我的监视窗口中剪切的代码,没有例外。该代码工作得非常完美。"监视"窗口正确显示第一个单元格的内容。什么东西?
您得到异常是因为您试图访问using
语句之外的ExcelPackage
的工作表(处理包)。
using (ExcelPackage pkg = new ExcelPackage(new MemoryStream(_fileBytes)))
{
sheet = pkg.Workbook.Worksheets[1];
int rows = sheet.Dimension.End.Row;
int count = 0;
for (int i = 1; i <= rows; ++i)
{
if (!string.IsNullOrEmpty(sheet.Cells[i, 1].Text))
++count;
}
}
顺便说一句,你可以用Linq:缩短代码
using (ExcelPackage pkg = new ExcelPackage(new MemoryStream(_fileBytes)))
{
var sheet = pkg.Workbook.Worksheets.First();
int count = sheet.Cells[1, 1, sheet.Dimension.End.Row, 1]
.Count(c => !string.IsNullOrEmpty(c.Text));
}