0

これが私の問題です:

.NET MVCアプリでExcelファイルからデータを読み取っています。これは、Excelからすべてのデータを読み取り、各レコードをループして、レコードに含まれるデータをビジネスモデルに挿入することです。

すべてが完璧に機能します。ただし、Excelから取得すると、1つのフィールドが空の文字列を返す場合があることがわかりました。不思議なことに、このフィールドには、単純な文字列または配列として扱われる文字列(配列を構築するための「|」文字を含めることができます)を含めることができます。一部のExcelファイルでは、「|」のときにフィールドが空になります。charは存在し、存在しない場合は他の場所に存在し、この動作はそのファイル全体で一貫しています。

セパレータを受け取り、常に問題なく機能するフィールドは他にもあります。両方のフィールドの唯一の違いは、機能するフィールドは純粋な文字列であり、失敗するフィールドは可能性のある「|」を含む数字の文字列であるということです。それらを分離します。

区切り文字を変更して(同じ結果で「#」を試してみました)、セルをテキストとして具体的にフォーマットしようとしましたが、成功しませんでした。

これは、Excelからデータを抽出する方法です

private DataSet queryData(OleDbConnection objConn) {
    string strConString = "SELECT * FROM [Hoja1$] WHERE NUMACCION <> ''";
    OleDbCommand objCmdSelect = new OleDbCommand(strConString, objConn);
    OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
    objAdapter1.SelectCommand = objCmdSelect;
    DataSet objDataset = new DataSet();
    objAdapter1.Fill(objDataset, "ExcelData");
    return objDataset;
}

私は最初にExcelからフィールドをチェックします:

fieldsDictionary.Add("Hours", table.Columns["HOURS"].Ordinal);

その後、DataSetをループするときに、次のコマンドでデータを抽出します。

string hourString = row.ItemArray[fieldsDictionary["Hours"]].ToString();

このhourStringは、一部のレコードでは空です。一部のExcelファイルでは、レコードに「|」が含まれている場合は空ですが、含まれていない場合は空です。両方のクラスのレコードで空を返すファイルをまだ見つけていません。

私はこれについてかなり混乱しています。フィールドデータの数値的な性質に関連している必要があることは確かですが、Excelファイルのセルを「テキスト」に強制すると解決しない理由を理解できません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

Ok。私はついにこれを解決しました。

おそらく異なるクラスのデータが含まれている場合、Excelは列全体を同じデータ型として認識できないようです。これは、セル形式をブックのテキストにする場合でも発生します。データをクエリすると、最初に受け取ったレコードに応じて、フィールドが確定型として認識されます。これが、さまざまなファイルがさまざまなタイプのレコードを空にし、プレーンテキストで始まるファイルが数値を空にし、その逆も同様である理由です。

接続文字列をExcelに変更するだけで、これに対する解決策を見つけました。

これは私の元の接続文字列でした

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=pathToFile;Extended Properties="Excel 8.0;HDR=Yes;"

そしてこれは問題を解決するものです

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=pathToFile;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"

パラメータIMEX=1は、すべての混合データ列をプレーンテキストとして管理する必要があることを示しています。このパラメータは読み取り専用モードでも開くため、Excelファイルを編集する必要がある場合はこれは機能しません。しかし、それは私の状況には完璧でした。

于 2012-11-29T08:11:21.073 に答える