2009-09-03 5 views
2

Excelファイルを読み込み、そのデータをグリッドビューで表示するにはどうすればよいですか?私は、ODBCプロバイダを試してみましたが、それは勝つ "Dns = EXCELF"、接続sringでどうなるでしょうか?私のExcelシート接続文字列は次のように生成されます:C#のExcelファイルを接続文字列で読み取る方法は?

プロバイダー= MSDASQL.1;ユーザーID = admin;データソース= Excelファイル;初期カタログ= D:\ Parallelminds \ Tryouts \ sample.xlsx

それは間違っていますか?私を案内してください。どの接続文字列をそこに付ける必要がありますか?

答えて

4

これはExcelのバージョンによって多少異なりますが、これは前の2007年である場合、あなたはここで必要なものを見つけることができます:http://connectionstrings.com/excel

そうでない場合は、http://connectionstrings.com/を参照します。それはどこかにある、私は約束:)

+1

+1非常に良いリンク!あなたの答えにいくつかの情報をコピーすることを忘れないでください、リンクがどれくらい生き残るかは決して決してありません! – backslash17

+0

良い点バックスラッシュ、connectionstrings.comは少なくとも今の8年か9年は良いです:) – jvenema

+0

価値のない方法!読み込み時にテキスト列を255文字に切り捨てます。注意してください!参照:http://stackoverflow.com/questions/1519288/jet-engine-255-character-truncation ACEエンジンは同じことをします!そのリンクの選択された答えに私のコメントを参照してください。 – Triynko

0

このExcel Data Providerは非常に便利です。私は最近、いくつかのマイナーなカスタマイズでクライアントのWebサイトの1つで使用しました。コードを調べると、C#からExcelにクエリを実行する方法の確かなアイデアを得ることができます。

警告:デプロイメントマシンにExcelがインストールされていない場合は、標準XLSファイル(Office through 2003)の解析に制限され、XLSX(Office 2007)を読み取ることはできません。

+0

別の警告があります。 JETエンジンとACEエンジンはフィールドを255文字に切り詰めることができるので、実際には信頼できません。 Excelファイルからの読み込みは、基本的には完全なハックです。信頼できる唯一の方法は、Excelのインスタンスを実際に実行し、.NET COM interopクラスを使用することですが、これはアプリケーションに依存関係を追加し、Excelをマシンにインストールする必要があります。なんて冗談だ! – Triynko

2
public string BuildExcelConnectionString(string Filename, bool FirstRowContainsHeaders){ 
     return string.Format("Provider=Microsoft.Jet.OLEDB.4.0; 
     Data Source='{0}';Extended Properties=\"Excel 8.0;HDR={1};\"", 
     Filename.Replace("'", "''"),FirstRowContainsHeaders ? "Yes" : "No"); 
} 

public string BuildExcel2007ConnectionString(string Filename, bool FirstRowContainsHeaders){ 
     return string.Format("Provider=Microsoft.ACE.OLEDB.12.0; 
     Data Source={0};Extended Properties=\"Excel 12.0;HDR={1}\";", 
     Filename.Replace("'", "''"),FirstRowContainsHeaders ? "Yes" : "No"); 

} 

private void ReadExcelFile(){ 
    string connStr = BuildExcel2007ConnectionString(@"C:\Data\Spreadsheet.xlsx", true); 
    string query = @"Select * From [Sheet1$] Where Row = 2"; 
    System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connStr); 

    conn.Open(); 
    System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(query, conn); 
    System.Data.OleDb.OleDbDataReader dr = cmd.ExecuteReader(); 
    DataTable dt = new DataTable(); 
    dt.Load(dr); 
    dr.Close(); 
    conn.Close(); 
} 
関連する問題