【问题标题】:Return cell with value not null using linq - Epplus使用 linq 返回值不为空的单元格 - Epplus
【发布时间】:2017-03-13 23:40:07
【问题描述】:

我正在使用下面的 Linq 代码返回行中最后一个填充的单元格。但是,我不知道出于什么原因(可能是某种格式或某种类型的东西)具有空值的单元格被返回。示例

我的行从B16开始到AG16,论文中的代码应该返回AG16,但是这个返回的是AI16,而且这个单元格是空白的,没有值,公式,什么都没有。

我想忽略具有空白值的单元格,因此返回 AG16。

我是按照下面的代码做的,即使没有值也返回AI16

var lastRowCellValue = worksheet.Cells.Last(c => c.End.Row == 16)
  • 16 是他要检查的行

我已经尝试使用下面的代码,但它返回 NULL 而不是 AG16,这是我的最后一个值单元格

 var lastRowCellValue = worksheet.Cells.Last(c => c.End.Row == 16).Where(c => c.Value != null);

我做错了什么?

【问题讨论】:

  • 代替.. c.Value != null)试试.. c.Value != DBNull.Value)
  • @Pikoh 返回的是 AI16。老实说,我不知道会发生什么,因为这个单元格完全是空的,我不知道为什么,它被退回了。
  • 那么也许你有两个空行..检查c.Value != DBNull.Value || c.Value != String.Empty)
  • @Pikoh 仍在返回 AI16。真的很奇怪,不知道为什么,他在骗这个牢房
  • 价值是多少?字面上地?也许我们有类似 crlf 之类的东西?

标签: c# excel linq epplus


【解决方案1】:

假设问题与this 类似,空单元格或格式导致问题,您可以使用派生自this answer 的函数:

int LastColumnByRow(ExcelWorksheet sheet, int rownum) {
    var col = sheet.Dimension.End.Column;

    while (col >= 1) {
        if (!string.IsNullOrEmpty(sheet.Cells[rownum, col].Text)) {
            break;
        }
        col--;
    }
    return col;
}

这样称呼:

var lastRowCellValue = worksheet.Cells[16, LastColumnByRow(ws, 16)];

【讨论】:

  • 这看起来确实是个路径,但是我这里测试了一下,出现了异常。 “列超出范围”。函数返回为 0 我试图改变一些东西但没有成功
  • @G.Sena 道歉,我在测试中将行设置为 2,尝试将其与参数 16 一起使用。
  • 是的,我使用第 16 行进行了测试,但返回是相同的。 0 会不会是因为 While 一直在做,直到它达到 0?这会将变量减小到 0?
  • @G.Sena 您能否上传您正在使用的文件,但删除任何机密信息?该函数在第 16 行填充信息的新工作簿上运行良好。
  • 对不起,这是我的错误.. 它运行良好。 AG16 回来了。非常感谢
猜你喜欢
  • 1970-01-01
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 2012-12-21
相关资源
最近更新 更多