我正在尝试构建一个数据导入工具,该工具可以接受用户的EXCEL文件并解析该文件中的数据以将数据导入到我的应用程序中。
我遇到了DeleteRow的一个奇怪问题,尽管似乎以前有人会遇到此问题,但我似乎无法在线找到任何信息。如果这是一个重复的问题,我深表歉意,但是在网上搜索后我找不到与我的问题有关的任何东西,除了this one仍然无法解决我的问题。
所以问题:
我使用以下代码尝试通过ExcelPackage“删除”具有空白数据的任何行。
for (int rowNum = 1; rowNum <= ws.Dimension.End.Row; rowNum++)
{
var rowCells = from cell in ws.Cells
where (cell.Start.Row == rowNum)
select cell;
if (rowCells.Any(cell => cell.Value != null))
{
nonEmptyRowsInFile += 1;
continue;
}
else ws.DeleteRow(rowNum);
//Update: ws.DeleteRow(rowNum, 1, true) also does not affect dimension
}
逐步执行该代码,我可以看到确实需要为正确的行号调用DeleteRow,但是问题是当我去设置返回的结果对象的“文件中的总行数”时:
parseResult.RowsFoundInFile = (ws.Dimension.End.Row);
即使在调用DeleteRow之后,ws.Dimension.End.Row仍将返回原始行数。
我的问题是...我是否必须“保存”工作表或调用某些东西才能使工作表意识到那些行已被删除?如果行仍然“存在”,调用“DeleteRow”有什么意义?任何对此的见解将不胜感激...
谢谢
最佳答案
我想我已经解决了问题。这又是C#中的另一个关闭问题。问题在于,对“ws”的引用仍然与DeleteRow调用之前的引用相同。
为了获得“更新的”维,您必须重新声明工作表,例如:
ws = excelPackage.Workbook.Worksheets.First();
一旦获得对工作表的新引用,它将具有更新的尺寸,包括任何已删除/添加的行/列。
希望这对某人有帮助。
关于C#ExcelPackage(EPPlus)DeleteRow不会更改图纸尺寸吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35297236/