トップ
ジャンル別トップ

C#でエクセルシートへアクセス




サンプルコード

@エクセルへアクセスするための準備

広く一般的、そしてとても便利な「Excel」大量のデータグラフにしたりと大変重宝します。
ゲーム作成なんてきますと、8割以上が調整項目であることなんてわりかしあることです。
そんなリストをエクセルから直接アクセスして取り出してみようというのが今回の章の目的です。
では、準備をしていきましょう。


今回はC#でのアクセスとなりますので、プロジェクトをC#で作成します。
C#では参照設定が可能です。
この参照に
「Microsoft.Office.Interop.Excel」
「Microsoft.Office.Interop.Core」

の2つを追加します。
COMの欄に入っているはずです。
ここにエクセルへアクセスするためのキットが入っています。

プロジェクトへの設定はこれだけです。
次は、コードを見ていきましょう。


Aエクセルへアクセスまでのコード

エクセルへのアクセスには主に以下の3つを使います。

クラス名 説明
Application エクセルへアクセスするための、関数が入ったクラスです。
基本、一度作りシートへの情報を取り出したらほとんど使いません。
最後にCOM解放をしないといけないので注意!
Workbook エクセル情報が入るクラスです。
ワークブック全体が指定となります。
Worksheet エクセルのシート情報を入れるクラス。
Workbookから特定のシート情報を入れ込みます。

以上が今回使う、クラス群です。
使い方はシンプルなので、コードと一緒に行きましょう。


ファイルオープンまでの流れ

//アクセスクラス
Excel.Application m_xlsApp = null;
Excel.Workbook m_workBook = null; 

//エクセルアクセサの作成
m_xlsApp = new Excel.Application();

//ファイルオープンからワークブックの作成
m_workBook = (Excel.Workbook)(m_xlsApp.Workbooks.Open(
    _fileName,	//オープンするエクセルファイル名を指定
    Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing, Type.Missing,
    Type.Missing, Type.Missing
    ));

まずは、エクセルファイルを開く所までです。
一番上のnewはただ単にアクセスするためのクラス作成なので、問題はありません。

次に引数がやたら多いOpne関数がありますが、第一引数以外はあまり重要ではないのでここでは省略します。
第一引数に、オープン指定ファイル名を指定します。
成功すれば、ワークブックへアクセスするためのクラスが返ります。

対象シート選択まで

//シートクラス
Excel.Worksheet m_sheet = null;

//シート名を指定して、インデックスを返す
int sheetId = getSheetIndex( "SheetName" );

//ワークブックから、シートを指定する。
m_sheet = (Excel.Worksheet)m_workBook.Sheets[ sheetId ];

//シート名から:アクセスインデックスを探し出す
private int getSheetIndex(string sheetName)
{
	int i = 0;
	foreach (Excel.Worksheet sh in m_workBook.Sheets)
	{
		if (sheetName == sh.Name)
		{
			return i + 1;
		}
		i += 1;
	}
	return -1;
}

今度は、ワークブックからシートを選別する方法です。
getSheetIndex関数はシート名を指定して、そのシートのIDを返す関数です。
目的のシート名が見つかるまでループするだけの簡単な関数です。
もちろんアクセスするIDが解っているのであれば、直接書き込んでしまっても問題ありません。

見つからない時は、不正アクセスになってしまうので、エラーチェックは忘れないようにお願いします。
上記では省略しています。

次は、いよいよエクセルから情報を取り出します。


Bシートからの情報取得から解放までのコード

情報取得から解放まで

//アクセス
string access(int _row, int _column)
{
	//アクセスセル
	Excel.Range param;
	param = (Excel.Range)m_sheet.Cells[ _row, _column ];
	//取得方法は2種類	
	//param.Value2;			//数値として取得
	param.Text.ToString();	//文字列として取得
}
//解放処理
void closeFile()
{
	//閉じる
	m_xlsApp.Quit();
	//COM解放
	System.Runtime.InteropServices.Marshal.ReleaseComObject(m_xlsApp);
}

読み込みまでを考えると、とてもシンプルなコードでおさまりました。
アクセスではエクセル上の行列を指定します。
それぞれ最小値が1なのを忘れないようにしてください。
アクセスが数値であろうと文字列であろうと、C#なら気軽に変換できるので、まよったら文字列アクセスで事が十分にたりそうです。

そして解放処理でのCOM解放を忘れないようにしましょう。
これを忘れると、タスクマネージャにどんどんエクセルが追加されていってしまします。
デバッグの時も、途中で切ってしまったりするとたまっていくので注意です。


以上、簡単にエクセルへのアクセス方法でした。