En essayant de lire un fichier excel avec epplus et d'obtenir le Système.NullException erreur?
Modifier
Sur la base des réponses ci-dessous, l'erreur que j'ai fais l'expérience peut ou peut ne pas être la cause de mon incapacité à lire mon fichier excel. C'est, je ne suis pas d'obtenir des données à partir de la ligne de worksheet.Cells[row,col].Value
dans ma boucle for donné ci-dessous.
Problème
Je suis en train de revenir d'un DataTable avec des informations à partir d'un fichier excel. Plus précisément, c'est un fichier xlsx à partir de 2013 excel je crois. Veuillez voir le code ci-dessous:
private DataTable ImportToDataTable(string Path)
{
DataTable dt = new DataTable();
FileInfo fi = new FileInfo(Path);
if(!fi.Exists)
{
throw new Exception("File " + Path + " Does not exist.");
}
using (ExcelPackage xlPackage = new ExcelPackage(fi))
{
//Get the worksheet in the workbook
ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets.First();
//Obtain the worksheet size
ExcelCellAddress startCell = worksheet.Dimension.Start;
ExcelCellAddress endCell = worksheet.Dimension.End;
//Create the data column
for(int col = startCell.Column; col <= endCell.Column; col++)
{
dt.Columns.Add(col.ToString());
}
for(int row = startCell.Row; row <= endCell.Row; row++)
{
DataRow dr = dt.NewRow(); //Create a row
int i = 0;
for(int col = startCell.Column; col <= endCell.Column; col++)
{
dr[i++] = worksheet.Cells[row, col].Value.ToString();
}
dt.Rows.Add(dr);
}
}
return dt;
}
Erreur
C'est là que les choses deviennent étranges. Je peux voir la valeur correcte dans startCell
et endCell
. Cependant, quand je regarde worksheet
je prends un coup d'oeil sous Cells
et je vois quelque chose que je ne comprends pas:
worksheet.Cells.Current' threw an exception of type 'System.NullReferenceException
Tentatives
- Le reformatage de mon excel avec les champs généraux.
- Veillant à ce qu'aucun champ dans mon excel est vide
- RTFM ed epplus de la documentation. Rien de suggestif de cette erreur.
- Regardé EPPlus erreurs sur stackoverflow. Mon problème est unique.
Honnêtement, j'ai du mal à comprendre ce que cette erreur est en train de dire? Est quelque chose de mal avec mon format? Est quelque chose de mal avec epplus? J'ai lu sur ici, les gens n'avaient pas de problèmes avec 2013 xlsx avec eeplus et je suis seulement en essayant d'analyser le fichier excel en ligne. Si quelqu'un pouvait m'aider à faire la lumière sur ce qu'est cette erreur et comment y remédier. Je vous en serais très reconnaissant. J'ai passé un certain temps à essayer de comprendre cela.
Actuel pourrait impliquer que vous pour marquer une plage!?, et après que vous disposez d'une cellule en cours. Cela affecte votre programme ne peut pas ,voir tout accès Actuel , ou est-il juste de vous déranger que quelque chose dans l'objet de Cellules throws exception lorsque vous inspectez? qui en fait est très commun dans .net de l'environnement
Oui, ceci n'affecte pas mon programme. Je suis incapable de voir
Value
lors de l'énumération dans la boucle ci-dessous. Je pensais que cette erreur a été la cause.Ce n'est pas une réplique. Je ne demande pas pourquoi j'ai un nul ici autant que pourquoi il est à l'origine de mon énumération sur le fond à l'échec. Je ne vois pas
Value
. Je vais éditer la question pour être plus précis. Merci. 🙂Merci à tous pour vos réponses pour l'instant. Upvotes pour à tous pour votre participation.
OriginalL'auteur hlyates | 2015-09-11
Vous devez vous connecter pour publier un commentaire.
Comme @Thorians dit, le courant est vraiment destiné à utiliser lors de l'énumération des cellules. Si vous voulez l'utiliser dans la forme la plus pure et le fait d'être en mesure d'appeler
current
ensuite, vous besoin de quelque chose comme ceci:Notez que vous devez avoir à créer une sorte de
local
collectioncells
pour que cela fonctionne correctement. SinonCurrent
sera nulle si vous avez essayé " de la feuille de calcul.les cellules.actuel'Mais il serait plus simple d'utiliser un
ForEach
et ont le CLR faire le travail pour vous.Mise à JOUR: sur la Base des commentaires. Votre code doit fonctionner correctement comme c'est, pourrait-il être votre fichier excel:
Donner dans la sortie:
dr[i++] = worksheet.Cells[row, col].Value
n'en soit pas une. Est-ce lié àCurrent
ou dois-je vraiment avoir un problème distinct et ne le savais pas?Humm..c'est intéressant. Votre code doit fonctionner ainsi. Semblent de ma mise à jour ci-dessus. Qu'est-ce que votre erreur exact?
OriginalL'auteur Ernie
Quand on donne:
il recherche de valeur dans cette colonne, si la colonne est vide, il donne Nulle erreur de référence.
Essayez plutôt:
Espère que cela aidera
OriginalL'auteur kumar gaurav
Actuelle est la gamme de courant lors de l'énumération.
il n'y a rien de mal avec cette levée d'une exception dans le débogage de l'inspection quand il n'est pas utilisé à l'intérieur d'une énumération de portée.
exemple de code:
worksheet.Cells[row,col].value
. Si je suis à vous comprendre correctement, c'est parce que je n'ai pas utilisé unrange
de manière appropriée?oui, Et je pense que vous devriez éviter de Courant , et l'utilisation de cellules à la place
OriginalL'auteur Thorarins
Je reçois également le même problème lors de la lecture de fichier excel et aucun de la solution a fonctionné pour moi. Voici code du travail:
OriginalL'auteur Suresh Kamrushi