加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#ExcelPackage(EPPlus)DeleteRow不会更改工作表尺寸?

发布时间:2020-12-16 10:01:33 所属栏目:百科 来源:网络整理
导读:我正在尝试构建一个数据导入工具,它接受来自用户的EXCEL文件并解析文件中的数据以将数据导入我的应用程序. 我在使用DeleteRow遇到一个奇怪的问题,我似乎无法在网上找到任何信息,尽管看起来有人会遇到过这个问题.如果这是一个重复的问题,我道歉,但是在搜索网
我正在尝试构建一个数据导入工具,它接受来自用户的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();

获得对工作表的新引用后,它将具有更新的维度,包括任何已删除/添加的行/列.

希望这有助于某人.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读