2017-03-13 1 views
1

J'utilise le code Linq ci-dessous pour retourner la dernière cellule remplie dans ma rangée. Cependant, je ne sais pas pour quelle raison (peut-être un formatage, ou quelque chose de ce genre) une cellule avec une valeur nulle est renvoyée. ExempleRenvoyer la cellule avec la valeur non null en utilisant linq - Epplus

Ma ligne commence à B16 et passe à AG16, le code dans la thèse devrait retourner AG16, mais cela retourne AI16, et cette cellule est vide, n'a aucune valeur, formule, rien.

Je voudrais ignorer les cellules avec la valeur vide, donc retourner AG16.

que je fais selon le code ci-dessous, qui retourne AI16 même si elle n'a pas de valeur

  • 16 est la ligne de la ligne qu'il vérifiera

J'ai déjà essayé d'utiliser le code ci-dessous, mais il retourne NULL au lieu de AG16, qui est ma dernière cellule de valeur

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

Qu'est-ce que je fais mal?

+1

Au lieu de '.. c.Value! = null)' essayer '.. c.Value! = DBNull.Value)' – Pikoh

+0

@Pikoh Le retour était AI16. Honnêtement, je ne sais pas ce qui se passe parce que cette cellule est totalement vide, je ne sais pas pourquoi, elle est retournée. –

+0

Alors peut-être vous avez deux lignes vides ... vérifier pour 'c.Value! = DBNull.Value || c.Value! = String.Empty) ' – Pikoh

Répondre

2

Si l'on suppose que la question est similaire à this, avec des cellules vides ou le formatage cause du problème, vous pouvez utiliser une fonction dérivée de 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; 
} 

Appelé comme ceci:

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

Cela semble vraiment être un chemin, mais je l'ai testé ici et une exception se produit. "Colonne hors de portée". La fonction de retour est 0 J'ai essayé de changer certaines choses mais sans succès –

+0

@ G.Sena excuses, j'ai quitté la ligne définie comme 2 de mes tests, essayez de l'utiliser avec le paramètre de 16. – Chawin

+0

Oui, j'ai fait le test en utilisant la ligne 16, mais le retour est le même. 0 Ne serait-ce pas dû au fait que le faisant jusqu'à ce qu'il atteigne 0? Que cela diminue la variable à 0? –