ボタンを押した際に指定したエクセルファイルを起動させるプログラムを作りました。
(一応プロセスの解放漏れがないようにしたつもりです。。)
■前提
参照の追加で「Microsoft Excel ~~~ Object Library」を追加する。
usingに「Microsoft.Office.Interop.Excel」と「System.Runtime.InteropServices」いれる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
using System; using System.Windows.Forms; using Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; namespace エクセルひらくサンプル { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Button1_Click(object sender, EventArgs e) { //開きたいファイルのパスを指定 string Folderpath = @"(ファイルのパス)"; Microsoft.Office.Interop.Excel.Application ExcelApp = null; Workbooks books = null; Workbook book = null; ExcelApp = new Microsoft.Office.Interop.Excel.Application(); ExcelApp.Visible = true; books = ExcelApp.Workbooks; book = books.Open(Folderpath); //Book解放 Marshal.ReleaseComObject(books); Marshal.ReleaseComObject(book); //app解放 Marshal.ReleaseComObject(ExcelApp); //ゴミ掃除してくれるやつ(効果があるかは知らない) GC.Collect(); } } } |
解放の処理でだいぶ悩みましたが、取り敢えず使ったものは全部解放します。
31行目以降にある「Marshal.ReleaseComObject」は解放するCOMの指定が出来るので、
今回であれば「ExcelApp」、「books」、「book」を解放の対象とします。
38行目の「GC.Collect()」はガーベージコレクションを強制するメソッドです。
0 Comments
2 Pingbacks