Excelを扱う

先日の日記のようにCOMやMicrosoft.Office.Interop.Excelを使えば良いのですが、解放処理が面倒だったりします。もし、Excelを使う用途がデータの読み書きだけならADO.NETでやってしまうのも一つの手です。

using System;
using System.Data;
using System.Data.Odbc;

class Program
{
    static void Main (string[] args)
    {
        string connstr = "Driver={Microsoft Excel Driver (*.xls)}; ReadOnly=False;" 
            + @"DBQ=c:\home\book.xls";
        OdbcConnection conn = new OdbcConnection (connstr);
        conn.Open ();
        IDbCommand cmd = conn.CreateCommand ();
        cmd.Connection = conn;

        // シートの作成
        cmd.CommandText = "CREATE TABLE [USERS](Name char(255), Age number)";
        cmd.ExecuteNonQuery ();

        // 行を追加
        cmd.CommandText = "INSERT INTO [USERS$](Name, Age) VALUES('太郎', 20)";
        cmd.ExecuteNonQuery ();
        cmd.CommandText = "INSERT INTO [USERS$](Name, Age) VALUES('花子', 18)";
        cmd.ExecuteNonQuery ();

        // 読み取り
        cmd.CommandText = "SELECT * FROM [USERS$]";
        IDataReader reader = cmd.ExecuteReader ();
        while (reader.Read ())
            Console.WriteLine ("{0},{1}",reader[0],reader[1]);
        reader.Close ();

        conn.Close ();
    }
} 

/* 結果
太郎,20
花子,18
 */

ってな感じで。