2012-02-22 13 views
2

Excel 2007ファイルからデータを読み取るのにC#とOleDbを使用しています。私が使用していますOledbを使用してExcelファイルを読む - Excelファイルの内容をテキストのみで処理する

接続文字列は次のとおりです。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1"; 

には、以下のExcelを読み込むためのコードです:

private OleDbConnection con = null; 
private OleDbCommand cmd = null; 
private OleDbDataReader dr = null; 
private OleDbDataAdapter adap = null; 
private DataTable dt = null; 
private DataSet ds = null; 
private string query; 
private string conStr; 

public MainWindow() 
{ 
    this.InitializeComponent(); 
    this.query = "SELECT * FROM [Sheet1$]"; 
    this.conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\301591\\Desktop\\Fame.xlsx;Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text\""; 
} 

private void btnImport_Click(object sender, RoutedEventArgs e) 
{ 
    this.ImportingDataSetWay(); 
} 

private void ImportingDataSetWay() 
{ 
    con = new OleDbConnection(conStr); 
    cmd = new OleDbCommand(query, con); 
    adap = new OleDbDataAdapter(cmd); 
    ds = new DataSet(); 
    adap.Fill(ds); 
    this.grImport.ItemsSource = ds.Tables[0].DefaultView; 
} 

ここgrImport私のWPFデータグリッドであると私は、自動生成された列を使用しています。

Excelに保存されているコンテンツが常に文字列として読み取られるようにするにはどうすればよいですか。 これを達成するために、レジストリ値を変更することはできません。読みやすい優れた方法がありますか?私を案内してください。他の情報が必要な場合は、私に知らせてください。

よろしく、 Priyank

+0

Excelファイルにヘッダー行がありますか? –

+0

はい私は頭の行を持っています –

答えて

5

あなたは次のようにOLEDBプロバイダの接続文字列を試みることができます。

HDR = NOは、oledbがすべての行をデータ[NO HEADER]として読み取ることを意味します。ヘッダー列はすべてテキストなので、すべての列のすべての行データをテキストとして扱います。 DataSetにデータを埋め込んだ後、最初の行はデータではないので削除する必要があります。

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\""; 
+0

提案に感謝します。それは今でも私のために働いています:(:(私は上記のコードを更新しました。それを見直して、それが正しいかどうかを知ることができますか? –

+0

HDR = YESをHDR = NOにして、データセット内のDataTable –

+0

Okies :) :)私はあなたに知らせようとします。再度、感謝します。 –

0

最初の行にヘッダーが含まれていることを確認してください。 つまり、列名が最初の行にあることを確認します。それが可能ならば。

コードでは、最初の行をプログラムで無視する必要がありますが、 は同時に列名をスカーフする必要があります。

接続文字列でこれを使用します。私は同様の問題があった。この

 TypeGuessRows=0;ImportMixedTypes=Text 
0

のかわからない

 IMEX=1;HDR=NO; 

は..私は、文字列を次のように述べたようれたconnectionStringを分割することによってそれを解決しました。拡張プロパティの後に、文字列にIMEX = 1を追加する(char)34があることに注意してください。 (char)34で囲むことなく、 "cant find ISAM"が表示されます。これでACEプロバイダの問題が解決されることを願っています

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
         "Data Source=" + Server.MapPath("UploadedExcel/" + FileName + ".xls") + 
         ";Extended Properties=" + 
         (char)34 + "Excel 8.0;IMEX=1;" + (char)34; 
関連する問題