【メモ】C#でエクセルいじる(環境:Visual Studio)
C#でエクセル弄れたのでメモを残しておきます。人がわかるように書いてないです。一ヶ月後の私がこれ読んで役に立つか、とかも考えてないです。お察しください。
最初に「参照の追加」からMicrosoft Excel 15.0 Object Libraryを追加します。
Microsoft.Office.Interop.Excelがusingできるようになるのでusingします。これでExcelが弄れるようになりました。
書いたのが以下のソース。readFileName(エクセルファイル)の内容をwriteFileNameへコピーするだけです。例外処理とかは書いてないです・・・。
//報告エクセル操作用オブジェクト Application xlAppR = new Application(); Workbook xlBookR = xlAppR.Workbooks.Open(readFileName); Worksheet xlSheetR = xlBookR.Sheets[1]; //更新エクセル操作用オブジェクト Application xlAppU = new Application(); Workbook xlBookU = xlAppU.Workbooks.Open(writeFileName); Worksheet xlSheetU = xlBookU.Sheets[1]; //報告内容を更新エクセルに書き込む Range xCellsR = null; Range xCellsU = null; xCellsR = xlSheetR.Cells; xCellsU = xlSheetU.Cells; int i=1; xCellsU[1, 1].Value = "aaa"; //セルが空でない間、回る while (xCellsR[i, 1].Text.ToString() != String.Empty) { xCellsU[i, 2].Value = xCellsR[i, 1].Value; i++; } //解放をしないといけない xlBookR.Close(); xlBookU.Close(); xlAppR.Quit(); xlAppU.Quit(); Marshal.FinalReleaseComObject(xlAppR); Marshal.FinalReleaseComObject(xlAppU); xlAppR = null; xlAppU = null;
最後にオブジェクトの解放が必要です。いつまでも読み込み状態になって少し困りました。
エクセルでなくてもファイルを弄るときはだいたい必要。
上のコードだとメソッド終了後に「保存しますか?」ってダイアログが出てしまいますが、勝手に保存してくれるようにもできるみたいです。
最初のオブジェクトの用意とか最後のクローズ処理とかは共通モジュールにしたほうがいいかも。
参考サイトはいっぱいあったんですがメモり忘れました。