2007年03月25日

C# で xlsの中身を取得 ADO.NET版

C# だと、ADO.NETを使うのがナウイヤングの間で流行っているということなので、作成してみました。
感想は、普通のADOと比べて面倒くさい、というか、作ったやつは死ねって感じかな、、、
簡単なことを複雑に実装する天才かもしれぬ。


//箱根の皆さん OLEDBですよ
using System.Data.OleDb;

//ADO.NET版
//Hashtable[ArrayList(ArrayList)]って構造で返ってくる(w
//Hashtable[表の名前][行][列] という構成かな、、、
//極悪だな。
public static Hashtable XLSReader(string inFilename)
{
//これに結果を代入します.
Hashtable returnValue = new Hashtable();

OleDbConnection connect = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + inFilename + ";" + " Extended Properties=Excel 8.0;");
//接続開始
connect.Open();

//テーブル名を求めます
string tablename;
DataTable schemaTable = connect.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new Object[] { null, null, null, "TABLE" });
foreach (DataRow schemaTableRow in schemaTable.Rows)
{
//テーブルの名前
tablename = schemaTableRow["TABLE_NAME"].ToString();

//SQLのようなもの を構築します.
string sql = "SELECT * FROM `" + tablename + "`";
OleDbCommand command = connect.CreateCommand();
command.CommandText = sql;

OleDbDataAdapter adapter = new OleDbDataAdapter(command);
DataSet dts = new DataSet();
adapter.Fill(dts);

DataTable table = dts.Tables[0];

//行
ArrayList arrayY = new ArrayList();

//ADOとの互換性を取るためにヘッダーも結果に含めます。
{
ArrayList arrayX = new ArrayList();
foreach (DataColumn column in table.Columns)
{
arrayX.Add(column.ToString());
}
arrayY.Add(arrayX);
}

foreach (DataRow row in table.Rows)
{
//列
ArrayList arrayX = new ArrayList();
foreach (DataColumn column in table.Columns)
{
arrayX.Add(row[column].ToString());
}
arrayY.Add(arrayX);
}
returnValue[tablename] = arrayY;
}

connect.Close();
connect = null; //開放汁

return returnValue;
}

posted by rti at 04:42 | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/36785464

この記事へのトラックバック