4

以下は私のPersonクラスです

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }       
}

以下は、LinqToExcel DLL を使用して ExcelSpreadSheet から読み取ろうとする私のコードです。

public void UseLinqToExcel(string path)
{

    var excel = new ExcelQueryFactory();  
    excel.FileName = path;
    excel.DatabaseEngine = LinqToExcel.Domain.DatabaseEngine.Ace;

    //Use Explicit Mapping
    excel.AddMapping<Person>(x => x.Name, "Name");
    excel.AddMapping<Person>(x => x.Age, "Age");
    excel.AddMapping<Person>(x => x.Gender, "Gender");            
    var bob = from x in excel.Worksheet<Person>("Bob1")
                        select x;
}

以下は、上記のメソッドを呼び出すコードです

public void ReadFromExcelSpreadSheet()
{           
    UseLinqToExcel(@"C:\temp\people.xls");
}

これが私のExcelSpreadSheetデータのサンプルです。

Name     Age  Gender
----     ---  ------
John     23   Male
Shannon  22   Female 
Joseph   21   Male

問題は、ブレークポイントをこの行 var bob = from x in excel.Worksheet("Bob1") に設定すると、オブジェクト bob にデータが入力されていることがわかります。ただし、性別の値のみが選択されて入力されています。名前と年齢の値は、それぞれ null ad 0 として取得されます。誰かがこれを修正するのを手伝ってくれませんか? ありがとうございました

4

1 に答える 1

3

プロパティと列の名前はまったく同じなので、マッピングを実行する必要はありませんAddMapping()

名前と年齢の値が返されない理由についての私の推測は、スプレッドシートの列名の前後に余分なスペースがある可能性があることです。

GetColumnNames()メソッドを使用して、列名のリストを取得できます。(そのメソッドのドキュメントは次のとおりです: https://github.com/paulyoder/LinqToExcel#query-column-names )

于 2013-12-20T15:42:54.977 に答える