ExcelのファイルをC#プログラムで扱う方法の忘備録(少し更新)
はじめに
会社でとあるエクセルシートの内容を読み込み、他のデータと比べて新しいリストを作成する必要があったので、そのプログラムをC#で作りました。 (4000個近くのデータを別のシートから抜き出して並べるものなので、とても手じゃできないと。。。)
VBSを使用したマクロを組んでも良かったかと思いますが、VBSについてはよくわからないので、今回はC#でプログラムを作成しました。
その時の忘備録としてC#によるエクセルシート上のデータの取得方法について書いています。C#はVisualStudio2008で作成しました。
参照の追加
アプリケーションからエクセルにアクセスするには、エクセルが公開するCOMコンポーネントへの参照をプロジェクトに追加する必要があります。
これには[参照の追加]ウィンドウで[COM]タブを選択し、「Microsoft Excel 12.0 Object Library」を追加します。
これにより、ソリューション・エクスプローラの「参照設定」のツリーに「Microsoft.Office.Core」と「Microsoft.Office.Interop.Excel」が追加されます。
使用するエクセルのバージョンにより選ぶライブラリが違うようですので、注意してください。
名前空間のインポート
追加したライブラリによりエクセルへのアクセスを行うために名前空間のインポートが必要になります。
ソースの上の方に以下のコードを記入します。
using Excel = Microsoft.Office.Interop.Excel;
ファイルのオープン
使用するエクセルファイルのオープンを行います。オープンにはエクセルオブジェクト、ワークブックオブジェクトを指定してオープンします。
オープンの際には適当なプロパティを設定します。
string excelName = "C:\\sample.xls"; Excel.Application oXls; //エクセルオブジェクト Excel.Workbook oWBook; //ワークブックオブジェクト oXls = new Excel.Application(); oXls.Visible = true; //確認のためエクセルのウィンドウを表示する //エクセルファイルをオープンする oWBook = (Excel.Workbook)(oXls.Workbooks.Open( excelName, // オープンするExcelファイル名 Type.Missing, // (省略可能)UpdateLinks (0 / 1 / 2 / 3) Type.Missing, // (省略可能)ReadOnly (True / False ) Type.Missing, // (省略可能)Format // 1:タブ / 2:カンマ (,) / 3:スペース / 4:セミコロン (;) // 5:なし / 6:引数 Delimiterで指定された文字 Type.Missing, // (省略可能)Password Type.Missing, // (省略可能)WriteResPassword Type.Missing, // (省略可能)IgnoreReadOnlyRecommended Type.Missing, // (省略可能)Origin Type.Missing, // (省略可能)Delimiter Type.Missing, // (省略可能)Editable Type.Missing, // (省略可能)Notify Type.Missing, // (省略可能)Converter Type.Missing, // (省略可能)AddToMru Type.Missing, // (省略可能)Local Type.Missing // (省略可能)CorruptLoad ));
ワークシートの選択
使用するワークシートを選択します。ワークシートはインデックスによって指定しますので、ワークシート名からインデックスを取得して該当するワークシートオブジェクトを取得します。
// 指定されたワークシート名のインデックスを返すメソッド private int getSheetIndex(string sheetName, Excel.Sheets shs) { int i = 0; foreach (Excel.Worksheet sh in shs) { if (sheetName == sh.Name) { return i + 1; } i += 1; } return 0; } // 与えられたワークシート名から、ワークシートオブジェクトを得る string sheetName = "Sheet2"; Excel.Worksheet oSheet; // ワークシートオブジェクト oSheet = (Excel.Worksheet)oWBook.Sheets[getSheetIndex(sheetName, oWBook.Sheets)];
セルの内容を読み込む
ワークシートオブジェクトより目的とするセルの内容を読み込みます。
セルで縦方向に並ぶの「列」がカラム(Column)で横方向に並ぶ「行」はロウ(Row)です。
セルはワークシートオブジェクトのCells[row, col]により呼び出します。
ちなみに、カラム、ロウ共に(0,0)からではなく(1,1)から始まります。
string sCellVal; Excel.Range rng; // Rangeオブジェクト rng = (Excel.Range)oSheet.Cells[1, 1]; sCellVal = rng.Text.ToString(); // A1セルの内容
終了処理
最後に終了処理です。ワークブックオブジェクトを閉じて終了です。
oWBook.Close(Type.Missing, Type.Missing, Type.Missing); oXls.Quit();
最後に
こんなかんじでC#からエクセルシートについてアクセスすることができます。
まあ、CSV形式にしてただのファイルとして扱ったほうが楽なのかもしれませんが、今回はエクセルとして扱ってみました。
Xamarinプログラミング入門 C#によるiOS、Androidアプリケーション開発の基本 (マイクロソフト関連書)
- 作者: 増田智明
- 出版社/メーカー: 日経BP社
- 発売日: 2017/10/05
- メディア: 単行本
- この商品を含むブログを見る
- 作者: ハーバート・シルト,エディフィストラーニング株式会社矢嶋聡
- 出版社/メーカー: 翔泳社
- 発売日: 2010/12/03
- メディア: 大型本
- 購入: 5人 クリック: 55回
- この商品を含むブログ (6件) を見る
- 作者: Ian Griffiths,Matthew Adams,Jesse Liberty,鈴木幸敏,首藤一幸,株式会社情報技研
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/11/29
- メディア: 大型本
- 購入: 2人 クリック: 14回
- この商品を含むブログ (11件) を見る