だらだらやるよ。

こげつのIT技術メモ

Excelファイルの読み込み

エクセルのファイルを読み込もうとすると、エクセルがマシンにインストールされてる必要があるんですよね
で、作ったアプリをうきうきしながら走らせると別のマシンでこける。と
ちょっと調べてたところ、読み込みだけならエクセルがインストールされてなくても大丈夫とのこと。


で、CodeProject漁ったらOleDbConnectionを使ってるサンプルを発見。


そのままだと使いづらかったので、キーワードを頼りに調べてみて自分で書いてみました。
参考にしたのはMSのここ
http://support.microsoft.com/kb/257819/ja/

public DataSet Read(String path) {
	string conString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=No;Imex=1"";",path);
	OleDbConnection con = new OleDbConnection(conString);
	con.Open();
	DataTable schemaTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
	con.Close();
	DataSet ds = new DataSet();
	foreach(DataRow row in schemaTable.Rows) {
		string tableName = row["TABLE_NAME"].ToString();
		string sql = String.Format("SELECT * FROM [{0}]",tableName);
		OleDbDataAdapter oda = new OleDbDataAdapter(sql,con);
		DataTable table = new DataTable(tableName);
		oda.Fill(table);
		ds.Tables.Add(table);
	}
	return ds;
}

やってることは単純で

  1. 接続文字列書いて接続
  2. スキーマの情報取得
  3. 各テーブル名を使ってSELECT文発行

他にもCellの範囲指定して取得したりできるみたいだけど今回は使う気ないのでパス
あと結合されたCellのデータがどうやってとられるかも試してませんー
書き込みはできるのかな?気が向いたら調べてみます。



他にも商用ライブラリとか、OpenOffice使うとか教えてもらったのですが
今回はちょろっと触りたかっただけなのでこれで十分!


でもExcelの情報探すのって大変ですね、ぐぐってもエクセルのほかの情報が大量に出てきてなかなか探せませんでした。。。

追記

会社で同僚の人と話してたけどこのコードMDAC必須かも。。。?
今度検証するっ

追記2

やっぱりMDAC必須でした。MDACの入ってないPCでエラーがでたよ!

追記3

あら、これ参考にしてくれてる人がいるのね、ありがとうございます。
他にも同じ現象がでた人のためにリンク張っておこう