C#を使ってExcelを操作する方法についてです!
今回は既存部分となる
- 開く
- 閉じる
- 保存する
についてです!
事前準備
それではまずは準備をしていきましょう。
参照を追加(※2019/02/10追記)
まずは参照の追加を行います。
ソリューションエクスプローラの「参照」を右クリックして、「参照の追加」を選択します。
参照マネージャが表示されます。
左のメニューから「COM」を選択。
右上にある検索バーで「Object Library」で検索。
検索結果から、
1 Microsoft Excel 14.0 Object Library 2. Microsoft Office 14.0 Object Library
の2つを選択します。
チェックをつけたらOKボタンで完了です!
usingへの追加
コレをusingに追加する必要があります。
using Microsoft.Office.Interop.Excel;
クラスメンバを作成
あとは作業用のクラスメンバを定義しました。
この辺は自身のコードに沿って、お作りくださいませ。
private bool isNewXlsFile = false; private Microsoft.Office.Interop.Excel.Application xls = null; // Excel自体 private Microsoft.Office.Interop.Excel.Workbook book = null; // ブック private Microsoft.Office.Interop.Excel.Worksheet sheet = null; // シート
ファイル開く
ファイルを開く一連の処理はこんな感じ。
this.xls = new Microsoft.Office.Interop.Excel.Application(); ExcelVisibleToggle(xls, false); // Excelを非表示:レスポンス向上 if ( this.isNewXlsFile ) // 新規ファイルかを判定するフラグ { // ファイル新規オープン this.book = xls.Workbooks.Add(); } else { // 既存ファイルオープン this.book = xls.Workbooks.Open(@"C:\work\test.xlsx"); } this.sheet = (Microsoft.Office.Interop.Excel.Worksheet)this.book.Sheets[sheetName]; // シートを選択 ExcelVisibleToggle(xls, true); // Excel表示
やっていることは
- Excelのアプリを取得
- ファイル(ブック)を開く
- シートを開く
の3点セットです。
ExcelVisibleToggle()はこんな感じで作りました。
public void ExcelVisibleToggle(Microsoft.Office.Interop.Excel.Application xls, bool setting) { if ( xls.Visible == !setting ) { xls.Visible = setting; } }
処理中はExcelVisibleToggle()で表示と止めてあげると、レスポンスが早くなるらしい。
Excelのアプリを取得
まずは母体となるExcelのアプリのオブジェクトを取得します。
this.xls = new Microsoft.Office.Interop.Excel.Application();
新規ファイル(ブック)を開く
Excelのファイルである「ブック」を新規で開きます。
this.book = xls.Workbooks.Add();
既存ファイル(ブック)を開く
既に作ってあるファイルを開きたい場合はコレ。
this.book = xls.Workbooks.Open(this.xlsName);
シートを選択
シートの選択はこのようにして行います。
「ブックからシートを選ぶ」という操作をしているイメージですね。
this.sheet = (Microsoft.Office.Interop.Excel.Worksheet)this.book.Sheets[sheetName]; // シートを選択
保存
ファイルを上書き
ファイルを上書きする場合。
this.book.Save();
ファイル名を指定して保存(別名保存)
ファイル名を指定して、別名保存する場合です。
this.book.SaveCopyAs(newFileName);
任意のパスを引数に渡します。
ファイル閉じる
ファイルを閉じる方法です。
this.book.Close(isSaving);
引数によって
- true: 保存する
- false: 保存しない
なので、必要に応じて変えましょう!
Excelを閉じる
Excelも閉じる場合はコレも追加。
this.xls.Quit();
Excelは開いたまま全オブジェクトを開放
「COMオブジェクトの開放」を行うことで、オブジェクトは開放しているけど、Excelのアプリ/ファイルは開きっぱなしという状態にできます。
COMオブジェクトの開放は
System.Runtime.InteropServices.Marshal.ReleaseComObject()
なので、
System.Runtime.InteropServices.Marshal.ReleaseComObject(this.sheet); System.Runtime.InteropServices.Marshal.ReleaseComObject(this.book); System.Runtime.InteropServices.Marshal.ReleaseComObject(this.xls);
とすることで、使用しているオブジェクトを全て開放することができます。
参考
コチラを参考にしました。 ありがとうございました!
あとがき
ということで、C#からExcelを操作する処理の基礎部分、「開く」、「閉じる」、「保存する」についてでした。
プログラムからのExcel操作は、Pythonの「openpyxl」で以前やりましたが、雰囲気は一緒ですね!
もしかしたらopenpyxlの内部では、同じオブジェクトで操作しているのかもしれませんね。
言語のせいなのか、心なしかC#の方が見やすい気がする……
個人的な慣れのせいかもしれませんがね(笑)