lisz-works

技術と興味の集合体

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

【スポンサーリンク】

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

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

今回は既存部分となる

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

についてです!

事前準備

それではまずは準備をしていきましょう。

参照を追加(※2019/02/10追記)

まずは参照の追加を行います。

ソリューションエクスプローラの「参照」を右クリックして、「参照の追加」を選択します。

参照の追加

参照マネージャが表示されます。
左のメニューから「COM」を選択。

参照マネージャのCOMを開く

右上にある検索バーで「Object Library」で検索。

検索結果から、

1 Microsoft Excel 14.0 Object Library 2. Microsoft Office 14.0 Object Library

の2つを選択します。

ExcelとOfficeのObject Libraryをチェック

チェックをつけたら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表示

やっていることは

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

の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);

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

参考

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

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#の方が見やすい気がする……
個人的な慣れのせいかもしれませんがね(笑)