21
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

.NETでExcelファイルに接続する

Last updated at Posted at 2016-03-24

ExcelファイルにSQL投げられるよ!よ!

対象のファイルをExcelで開いていると、お互いにリアルタイムで反映されて楽しいかもしれない。

ランタイム

今回はAccessデータベースエンジン(ACEエンジン)を使います。Accessのコンポーネントなので、インストールされていない環境であれば「Microsoft Access データベース エンジン 再頒布可能コンポーネント」を入れるとよいです。Access全体のランタイムもありますが、でかいです。

あと最近のOfficeを「クイック実行形式」でインストールするとOLEDBプロバイダも登録されないようなので、やはり別途インストールするのがよさそうです。

インストールされていれば new OleDbEnumerator().GetElements() でそれらしいのが見れるはず。あと、例によってx86とx64別です。

なおExcel2003以前の形式(.xls)かつ32bit版でよければ、Windows付属の Microsoft.Jet.OLEDB.4.0 というプロバイダでも基本的に同じように使えます。

参考: Microsoft Access(.mdb、.accdb)のODBC、OLEDBドライバーに関するまとめ | アシスト

接続する

接続文字列に必要なパラメータは以下の通り。

  • Provider: Microsoft.ACE.OLEDB.12.0
    • 2013では15.0(12.0は存在しても使えなかった記憶)
    • 2016では16.0(12.0も付属しているし使える)
  • Data Source: ファイル名
  • Extended Properties: {ISAM形式}; {オプション}

ISAM形式は Excel 12.0 Excel 12.0 Xml Excel 12.0 Macro Excel 8.0 など。 HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Access\Access Connectivity Engine\ISAM Formats (もしくはそれに準ずる場所)で一覧が見れます。

オプションは例えばこんなのがあります。

  • HDR=NO:ヘッダ行なし(F1, F2, ...といった列名になる)
  • MAXSCANROWS=[1..16]:データ型の自動判定に使われる行数
var constr = new OleDbConnectionStringBuilder
	{
		["Provider"] = "Microsoft.ACE.OLEDB.12.0",
		["Data Source"] = @"r:\hoge.xls",
		["Extended Properties"] = "Excel 12.0 Xml"
	}.ToString();
var con = new OleDbConnection(constr);

何ができるか

  • [名前](Excelで定義した領域名)
  • [シート名$](データが入力されている左上から右下までの範囲)
  • [シート名$名前]
  • [シート名$セル範囲][シート名$] の範囲内のみ)

をテーブル名として、SELECT/INSERT/UPDATEが普通に使えます。ただしDELETEはできない。

  • CREATE TABLE
    既存の領域を指定すると見出しを変更できます。
    $を含まない文字列を指定するとシート名として扱われ、新しいシートが作成されます。
  • DELETE TABLE
    列見出しも含めて消去します。定義済みの名前で指定すると、その名前も削除されるようです。

参考

21
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?