lisz-works

技術と興味の集合体

C#でExcelを操作!「開く・閉じる・保存」

【スポンサーリンク】

プログラムのソースコード

C#を使ってExcelを操作する方法についてです!

今回は既存部分となる

  • 開く
  • 閉じる
  • 保存する

についてです!

事前準備

コレを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表示

やっていることは

  1. Excelのアプリを取得
  2. ファイル(ブック)を開く
  3. シートを開く

の3点セットです。

処理中は、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);

とすることで、使用しているオブジェクトを全て開放することができます。

参考

コチラを参考にしました。 ありがとうございました!

movie-memo.bookmarks.jp

movie-memo.bookmarks.jp

excelcsharp.lance40.com

excelcsharp.lance40.com

あとがき

ということで、C#からExcelを操作する処理の基礎部分、「開く」、「閉じる」、「保存する」についてでした。

プログラムからのExcel操作は、Pythonの「openpyxl」で以前やりましたが、雰囲気は一緒ですね!

www.lisz-works.com

www.lisz-works.com

www.lisz-works.com

もしかしたらopenpyxlの内部では、同じオブジェクトで操作しているのかもしれませんね。

言語のせいなのか、心なしかC#の方が見やすい気がする……
個人的な慣れのせいかもしれませんがね(笑)