タイトルに記載されているエラーを修正する方法を考えることができないようで、何をすべきかについていくつかのアイデアを探していました。
Excelスプレッドシートの行をオブジェクトに読み込もうとしています。
最初にループするとき、行1、列1および行1の列2にデータがあるため、問題はありません。
しかし、行2、列1、行2の列2に到達すると、スプレッドシートのこれらのセルが「空」であるため、上記のエラーが発生します。
「nullの場合」のチェックをどこに入れることができるのか、私にはわかりません。
誰でもそれを行う方法を提案できますか?
これが私のコードです...
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()
});
}
}
}
.ToString()
を使用しないでください。値がnullの場合、_null reference exception
_が発生します。 Convert.ToString()
を使用すると、null値に対して空の文字列が返されます。
_col1 = Convert.ToString(row.Cells[i + 1, 1].Value2);
col2 = Convert.ToString(row.Cells[i + 1, 2].Value2);
_
ToString
を呼び出す前に必要です。空の行を追加することは役に立たないと思うので、追加する前であれば移動することもできますが、シナリオには当てはまらない場合があります。
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()
});
}
そうでなければ、これはおそらくあなたが必要とするものです:
col1 = row.Cells[i + 1, 1].Value2 != null ? row.Cells[i + 1, 1].Value2.ToString() : null,
例外の背後にある理由は、Value2
はdynamic
であるため、戻り値は実行時に決定されます。で、もし Value2
はnull
なので、呼び出すToString
メソッドを決定できません。
Forループで内部をチェックできます:
//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();
}
});
}
}