我正在尝试构建一个数据导入工具,该工具可以接受用户的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/

10-13 06:55