2017-06-16 21 views
2

空白のセルがいくつかあり、同じ列に255文字以上のセルがあるExcelファイルを読み込む必要があります。レジストリ値を " TypeGuessRows "を '0'に変更しても機能しましたが、サーバー上のレジストリを変更することはできません。Cce、Ace.OleDBでの読み込み中にデータ型を変更する方法

StrConnXLS = "provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + SFileXLS + "';Extended Properties='Excel 12.0;HDR=YES;IMEX=YES;MAXSCANROWS=0;'"; 

と私はこのようなデータテーブルに渡すことで、テーブルをお読みください:ここ

は私の接続文字列がある

using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + tabela + "]", con)) 
       { 


        con.Open(); 

        //conn.Open(); 
        //Executando o UPDATE 
        cmd.ExecuteNonQuery(); 

        OleDbDataAdapter oleAdapter = new OleDbDataAdapter(); 
        oleAdapter.SelectCommand = cmd; 
        planilha = new DataTable(""); 
        oleAdapter.FillSchema(planilha, SchemaType.Source); 
        oleAdapter.Fill(planilha); 
        //Fechando a conexão 
        con.Close(); 
       } 

と私はそれが好きで読んで:

foreach (DataRow row in planilha.Rows) 
{ 
    string dostuff = row["test"].ToString(); 
} 

ですが、255文字以上のテキストになるたびにテキストがカットされます。 それを変更する方法はありますか?

答えて

0

私はそれを見つけたことがありません。実際には本当に迷惑です。 OLEDBは、最初の8行を無関係にスキャンし、データ型について仮定します。

IMEX = 1(偶然にもYESではない)は、見つかった混在行を強制的にテキストに変換します。

私の知る限りでは、接続文字列のImportMixedTypes、TypeGuessRowsおよびMaxScanRowはこのドライバで無視されます。古いJetドライバがそれらをサポートしました。これは私の意見では逆行的な一歩です。

ファイルにヘッダー行がある場合は、HDR = Noを試してみてください。最初の行がテキストであるため、強制的にテキストになりますが、これは255文字制限の問題には役立ちません。

あなたは

SELECT * FROM [<SheetName>$<optional range>] 

例えばを使用して、各セルをターゲットに試みることができますSELECT * FROM [MySheet $ A1:A1]

しかし、これは大きなファイルでは非常に遅くなります。

関連する問題