C#ExcelPackage(EPPlus)DeleteRow不会更改图纸尺寸吗? - c#

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

一旦获得对工作表的新引用,它将具有更新的尺寸,包括任何删除/添加的行/列。

希望这对某人有帮助。

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可

LeetCode题解圆上任取三点构成锐角三角形的概率

来自字节跳动的一道几何题题解:1/4

LeetCode题解深度优先遍历和回溯的关系?

深度优先遍历的范围更大还是回溯的范围更大?为什么?题解:我的理解是:dfs是回溯思想的一种体现- 回溯:是在整个搜索空间中搜索出可行解,在搜索过程中不断剪枝回退,这是回溯的思想,这个搜索空间并没有限制于特定的数据结构。- dfs:dfs是指特定的数据结构中如图,树(特殊的图)中搜索答案,范围限制在了特定的数据结构。个人拙见。