source

null 참조에 대해 런타임 바인딩을 수행할 수 없습니다. Excel 셀 비우기

manycodes 2023. 8. 14. 22:58
반응형

null 참조에 대해 런타임 바인딩을 수행할 수 없습니다. Excel 셀 비우기

제목에 언급된 오류를 수정할 방법이 생각나지 않고 어떻게 해야 할지에 대한 아이디어를 찾고 있었습니다.

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 reference exception값이 null일 때 사용합니다.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호출 방법.

내부에서 루프를 체크인할 수 있습니다.

    //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();
        }
            });
        }
    }

언급URL : https://stackoverflow.com/questions/28235162/cannot-perform-runtime-binding-on-a-null-reference-empty-excel-cells

반응형