Je n'arrive pas à penser à un moyen de corriger l'erreur mentionnée dans le titre et je cherchais des idées sur ce qui devrait être fait.
J'essaie de lire les lignes d'une feuille de calcul Excel dans un objet.
La première fois qu'il boucle, je n'ai aucun problème car la ligne 1, la colonne 1 et la ligne 1 colonne 2 contiennent des données.
Mais quand il arrive à la ligne 2, à la colonne 1 et à la ligne 2, la colonne 2 tombe avec l'erreur ci-dessus car les cellules de la feuille de calcul sont "vides"
Je ne peux tout simplement pas déterminer où je peux insérer des vérifications "si nulles".
Quelqu'un peut-il suggérer comment le faire s'il vous plaît?
Voici mon code ...
private static void IterateRows(Excel.Worksheet worksheet)
{
//Get the used Range
Excel.Range usedRange = worksheet.UsedRange;
// create an object to store the spreadsheet data
List<SPREADSHEETModel.spreadsheetRow> spreadsheetrows = new List<SPREADSHEETModel.spreadsheetRow>();
//Iterate the rows in the used range
foreach (Excel.Range row in usedRange.Rows)
{
for (int i = 0; i < row.Columns.Count; i++)
{
spreadsheetrows.Add(new SPREADSHEETModel.spreadsheetRow()
{
col1 = row.Cells[i + 1, 1].Value2.ToString(),
col2 = row.Cells[i + 1, 2].Value2.ToString()
});
}
}
}
N'utilisez pas .ToString()
cela entraînera null reference exception
Lorsque la valeur est nulle. Utilisez Convert.ToString()
, il renverra une chaîne vide pour la valeur nulle.
col1 = Convert.ToString(row.Cells[i + 1, 1].Value2);
col2 = Convert.ToString(row.Cells[i + 1, 2].Value2);
Vous en avez besoin avant l'appel à ToString
. Peut-être que vous pouvez même vous déplacer avant l'ajout, car je pense qu'il n'est pas utile d'ajouter des lignes vides, mais cela pourrait ne pas être vrai dans votre scénario:
if (row.Cells[i + 1, 1].Value2 != null && row.Cells[i + 1, 2].Value2 != null)
{
spreadsheetrows.Add(new SPREADSHEETModel.spreadsheetRow()
{
col1 = row.Cells[i + 1, 1].Value2.ToString(),
col2 = row.Cells[i + 1, 2].Value2.ToString()
});
}
Sinon, c'est probablement ce dont vous avez besoin:
col1 = row.Cells[i + 1, 1].Value2 != null ? row.Cells[i + 1, 1].Value2.ToString() : null,
La raison de l'exception est que Value2
est un dynamic
, donc la valeur de retour est déterminée lors de l'exécution. Et si Value2
est null
, il ne peut pas déterminer la méthode ToString
à appeler.
Vous pouvez vérifier l'intérieur de la boucle:
//Iterate the rows in the used range
foreach (Excel.Range row in usedRange.Rows)
{
for (int i = 0; i < row.Columns.Count; i++)
{
spreadsheetrows.Add(new SPREADSHEETModel.spreadsheetRow()
{
if (row.Cells[i + 1, 1].Value2 != null)
{
col1 = row.Cells[i + 1, 1].Value2.ToString();
}
if (row.Cells[i + 1, 2].Value2 != null)
{
col2 = row.Cells[i + 1, 2].Value2.ToString();
}
if (row.Cells[i + 1, 3].Value2 != null)
{
col3 = row.Cells[i + 1, 3].Value2.ToString();
}
});
}
}