3

LinqToExcelを使用して、ExcelデータをSQLServerに簡単にインポートしています。

        var fileName = ConfigurationManager.AppSettings["ExcelFileLocation"];
        var excel = new ExcelQueryFactory(fileName);
        var employees = excel.Worksheet<Employee>().ToList();

すべて問題ありません。問題は1つだけです。フィールドはデータベーステーブルのフィールドに正確にマップされており、データベースではNULLではありません。

Excelファイルを入力します

そうは言っても、このExcelファイルのスクリーンショットを見ると、行3の下のいくつかの行は実際には空ではありません。スペースはありませんが、どういうわけかLinqToExcelもスペースを読み取ります。もちろん、EntityFrameworkによって例外がスローされ、フィールドをnullにすることはできません。

3から8980までの空白行をすべて選択して、削除する必要があります。そうして初めて、空白行をインポートしようとせずにLinqToExcelを使用できます。

問題を解決する方法はありますか?

ありがとう。

4

2 に答える 2

4

LINQステートメントに条件を追加して、空の行が含まれないようにすることができます。

var employees = excel.Worksheet<Employee>().Where(x => x.VS2012 != null).ToList();

また、null以外のチェックが機能しない場合は、空の文字列をチェックできます

var employees = excel.Worksheet<Employee>().Where(x => x.VS2012 != "").ToList();
于 2013-02-06T22:43:33.560 に答える
1

しかし、どういうわけか、LinqToExcelはそれらも読み取ります

これはExcelの癖です。シートが最大サイズのときに使用された行と列の数を記憶しています。Ctrl-Endを入力すると、これを確認できます。これにより、これまでに使用された最後の行と列のセルが選択されます。

Officeサポートでは、最後のセルをリセットする方法について説明しています。ワークシートの最後のセルを見つけてリセットします。

基本的に、余分な行と列を削除し、書式をクリアし、ブックを保存してから再度開きます。

この回避策は、Excelファイルがインポートされるのを待っていて、固定のLinq2Excelクライアントを展開する時間がない場合に役立つ可能性があります。

于 2016-12-06T12:09:11.687 に答える