0

アプリケーションがファイルからデータをインポートできるようにしたいと考えていXLSます。私はすでにCSVファイルとXMLファイルでこれを行っていますが、ユーザーのスコープを開きたいです。ファイルの読み込みに問題があります。XLSファイル ( 、CSV、 ) をデータセットにロードし、XMLそこから処理します。の読み込みコードXLSは以下のとおりです

FileInfo fi = new FileInfo(filename);

//create and open a connection with the supplied string
OleDbConnection objOleDBConn;
objOleDBConn = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data  Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'", fi.FullName));
objOleDBConn.Open();

DataTable dt = objOleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

if (dt == null || dt.Rows.Count == 0)
{
    return;
}

string sheet = dt.Rows[0]["TABLE_NAME"].ToString();

//then read the data as usual.
OleDbDataAdapter objOleDBDa;
objOleDBDa = new OleDbDataAdapter(string.Format("select * from [{0}]",sheet), objOleDBConn);
objOleDBDa.Fill(data);
objOleDBConn.Close();

したがって、データは正常に読み込まれますが、さまざまな列のデータ型が設定されているように見えます。これは、列の 1 つに問題があります。これはビット フィールドであり、 、 、 、 、および を受け入れることFalseTrue選択YesNoましYN。後でこれをブール値に変換するコードがあります。これはCSVファイル (接続文字列が異なる) では正常に機能しますがXLS、最初の 10 行がFALSEまたはTRUEであり、11行目が であると言うとYES、null エントリが取得されます。最初のいくつかのエントリを読み取り、それに基づいてデータ型を決定すると思いますか?

質問: 最初のいくつかのエントリに基づいて列のデータ型を識別するメカニズムをオフにする方法はありますか?

4

4 に答える 4

0

この質問は、 Excel cell-values are truncated by OLEDB-provider and Excel reading in ASP.NET : Data not being read if column has different data formatと非常によく似ています 。

于 2009-11-25T12:53:17.100 に答える
0

列のデータ型を推測するために読み取る行数を Jet プロバイダーに伝えるレジストリ設定があります。デフォルトは8だと思います。それは:

HKLM\Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel\TypeGuessRows

(必要に応じてバージョンを変更します)。あなたの場合、ブール値を推測しているため、文字列値「yes」を無視します。

于 2009-11-25T12:53:30.657 に答える
0

スタック オーバーフロー経由で投稿したこのOleDBAdapter Excel QAを試してください。

ワークシートの列にすべてTRUEまたはFALSEを入力してから、いくつかの「はい」または「いいえ」の値をランダムに投入したところ、うまくいきました...

デバッグ モードで実行し、データが読み込まれた後に DataSet ビジュアライザーをクリックして結果を確認します。または、これを出力のコードの最後に追加します

// DataSet:          
Object row11Col3 = ds.Tables["xlsImport"].Rows[11][3];
string rowElevenColumn3 = row11Col3.ToString();
于 2011-05-03T20:17:37.413 に答える
0

トリックは、すべての列が文字列として読み取られるように、データ型を推測する行としてヘッダー行を含めることです。次に、値を失うことなく、必要に応じてコードを解析してデータ型を修正することができます - この HDR=No に使用します

objOleDBConn = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data  Source={0};Extended Properties='Excel 8.0;HDR=No;IMEX=1'", fi.FullName));
于 2018-05-16T12:45:23.180 に答える