Excelファイルからデータを抽出することに関して、小さな問題があります。最初の部分を無視して、いくつかのものを削除しています。これは、取得されているファイルが24列で、対象のファイルが約12列であるためです。いくつかの列を削除しています.
簡単に言えば、任意の行の列5の値が「x」である場合に一致させようとしている部分で、たとえば同じ行の2列目に「E」を書きます..そうでなければ、「X」かどうかを確認してくださいが 6 列目にある場合、「P」はその行の 2 列目にある必要があることを意味します...
問題は、すべてのセルの値が「x」であるか、空である..(Excelファイルに値がない)ため、コードが空の要素をループするたびに問題があるようで、このエラーがスローされることです
l = new Microsoft.Office.Interop.Excel.Application();
xl.Visible = false;
Microsoft.Office.Interop.Excel.Workbook workbook = xl.Workbooks.Open(p_sUBKPath, Type.Missing, Type.Missing, 4, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[1];
Microsoft.Office.Interop.Excel.Range range = ws.UsedRange;
// delete columns that we don't need from the new excel file
Microsoft.Office.Interop.Excel.Range range2 = ws.get_Range("A1","A1");
range2.EntireColumn.Delete();
Microsoft.Office.Interop.Excel.Range range3 = ws.get_Range("B1", "B1");
range3.EntireColumn.Delete();
Microsoft.Office.Interop.Excel.Range range4 = ws.get_Range("D1", "L1");
range4.EntireColumn.Delete();
Microsoft.Office.Interop.Excel.Range range5 = ws.get_Range("I1", "M1");
range5.EntireColumn.Delete();
Microsoft.Office.Interop.Excel.Range range6 = ws.get_Range("K1", "K1");
range6.EntireColumn.Delete();
//insert a new column ( Category)
Microsoft.Office.Interop.Excel.Range range7 = ws.get_Range("B1", "B1");
range7.EntireColumn.Insert(XlInsertShiftDirection.xlShiftToRight);
object[,] values = (object[,])range.Value2;
values[1, 2] = (string)"Cat.";
for (int row = 2; row <= values.GetUpperBound(0); row++)
{
try
{
if ((!String.IsNullOrEmpty(values[row, 5].ToString())) && values[row, 5].ToString() == "x")
{
values[row, 2] = (string)"E";
}
else if ((!String.IsNullOrEmpty(values[row, 6].ToString())) && values[row, 6].ToString() == "x")
{
values[row, 2] = (string)"P";
}
else if ((!String.IsNullOrEmpty(values[row, 7].ToString())) && values[row, 7].ToString() == "x")
{
values[row, 2] = (string)"Phy";
}
else if ((!String.IsNullOrEmpty(values[row, 8].ToString())) && values[row, 8].ToString() == "x")
{
values[row, 2] = (string)"L";
}
else if ((!String.IsNullOrEmpty(values[row, 9].ToString())) && values[row, 9].ToString() == "x")
{
values[row, 2] = (string)"Ex";
}
else
MessageBox.Show("unknow");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
エラーは次のとおりです。
System.Nullreferenceexception オブジェクト参照がオブジェクトのインスタンスに設定されていません