0

Excel ファイルを読み込んで、列ごとにデータをコレクションに追加しています。null 値に遭遇すると、以下の行で吹き飛ばされます。

exampleDataList.Add(new PersonalData {firstname = col1Value.ToString(),lastname = col2Value.ToString(), address=col3Value.ToString(), salary=col4Value.ToString() });

[HttpPost]
public ActionResult Index(HttpPostedFileBase file)
{
    const int startRow = 1;

    if (file != null && Path.GetExtension(file.FileName) == ".xlsx")
    {
        IList<PersonalData> exampleDataList = new List<PersonalData>();
        using(var excel = new ExcelPackage(file.InputStream))
        {
            //open and read the xlsx file.                   
                //Get the work book in the file
            ExcelWorkbook workBook = excel.Workbook;
                if (workBook != null)
                {
                    if (workBook.Worksheets.Count > 0)
                    {
                        //Get the first worksheet
                        ExcelWorksheet currentWorkSheet = workBook.Worksheets.First();


                        for (int rowNumber = startRow + 1; rowNumber <= currentWorkSheet.Dimension.End.Row; rowNumber++)
                        // read each row from the start of the data (start row + 1 header row) to the end of the spreadsheet.
                        {
                            object col1Value = currentWorkSheet.Cells[rowNumber, 1].Value;
                            object col2Value = currentWorkSheet.Cells[rowNumber, 2].Value;
                            object col3Value = currentWorkSheet.Cells[rowNumber, 3].Value;
                            object col4Value = currentWorkSheet.Cells[rowNumber, 4].Value;                             

                            if ((col1Value != null && col2Value != null))
                            {
                                exampleDataList.Add(new PersonalData {firstname = col1Value.ToString(),lastname = col2Value.ToString(), address=col3Value.ToString(), salary=col4Value.ToString() });
                            }                                  

                        }

                        int myresultcount = WriteToDb(exampleDataList);
                    }

                }                  

        }
    }

    return RedirectToAction("Index");        
}

ここに私のクラスがあります

public class PersonalData
{
    public int Id { get; set; }
    public string  firstname { get; set; }
    public string lastname { get; set; }
    public string address { get; set; }
    public string salary { get; set; }
}

エラー メッセージが表示されます: オブジェクト参照がオブジェクトのインスタンスに設定されていません

どうすればこれを修正できますか? 私は何を間違っていますか。私の目標は、一日の終わりにこれをデータベースに書き込むことです。

4

3 に答える 3

1

value3 と value4 の null をチェックするのを忘れていると思います。または、これらの値を null にすることが許可されている場合は、実行する前に null をチェックしてください。ToString()

if (col1Value != null && col2Value != null && 
    col3Value != null && col4Value != null)
{
    exampleDataList.Add(new PersonalData 
     {
          firstname = col1Value.ToString(),
          lastname = col2Value.ToString(), 
          address = col3Value.ToString(), 
          salary = col4Value.ToString() 
     });
}  

また

if (col1Value != null && col2Value)
{
    exampleDataList.Add(new PersonalData 
    {
       firstname = col1Value.ToString(),
       lastname = col2Value.ToString(), 
       address = col3Value != null ? col3Value.ToString() : String.Empty, 
       salary = col4Value.ToString() != null ? col4Value.ToString() : String.Empty
    });
}  
于 2013-07-02T18:07:33.967 に答える
1

3 列目と 4 列目のヌルをチェックします。

if ((col1Value != null && col2Value != null && col3Value != null && col4Value != null))
{
    exampleDataList.Add(new PersonalData {firstname = col1Value.ToString(),lastname = col2Value.ToString(), address=col3Value.ToString(), salary=col4Value.ToString() });
} 

または、列 3 と 4 に NULL ではなく空の文字列が必要な場合:

if ((col1Value != null && col2Value != null))
{
    exampleDataList.Add(new PersonalData {
            firstname = col1Value.ToString(),
            lastname  = col2Value.ToString(), 
            address   = col3Value == null ? "" : col3Value.ToString(), 
            salary    = col4Value == null ? "" : col4Value.ToString() });
}

NULL チェックを簡素化するために、+null 値に空の文字列を使用し.ToString()、オブジェクトを自動的に呼び出す の動作を活用できます。

if ((col1Value != null && col2Value != null))
{
    exampleDataList.Add(new PersonalData
        {
            firstname = col1Value.ToString(),
            lastname  = col2Value.ToString(), 
            address   = "" + col3Value, 
            salary    = "" + col4Value
        });
}
于 2013-07-02T18:08:11.943 に答える
0

colXValue オブジェクトのいくつかの検証が行われていません。ToString() メソッドを呼び出そうとする前に行う必要があります。

null 値をどのように処理するかによって異なります。

いずれかの列に null があるレコードを無視する場合は、次のように拡張します。

 if ((col1Value != null && col2Value != null))

のように見えるように:

 if (    col1Value != null 
      && col2Value != null
      && col3Value != null
      && col4Value != null)

null 値を空の文字列に変換することもできます。その場合、次のようにすることができます。

 object col1Value = currentWorkSheet.Cells[rowNumber, 1].Value;
 object col2Value = currentWorkSheet.Cells[rowNumber, 2].Value;
 object col3Value = currentWorkSheet.Cells[rowNumber, 3].Value;
 object col4Value = currentWorkSheet.Cells[rowNumber, 4].Value;
 if (col1Value == null) col1Value = string.Emtpy;
 if (col2Value == null) col2Value = string.Emtpy;
 if (col3Value == null) col3Value = string.Emtpy;
 if (col4Value == null) col4Value = string.Emtpy;
 exampleDataList.Add(new PersonalData {firstname = col1Value.ToString(),lastname = col2Value.ToString(), address=col3Value.ToString(), salary=col4Value.ToString() });
于 2013-07-02T18:14:15.800 に答える