ファイル入出力
- エクセルファイル入出力
エクセルファイルのセルの値を読み書きします。Excel2003にて動作確認を行っています。
以下のCOMを参照して下さい。
Microsoft Excel 11.0 Object Library
エクセルのバージョンが違えばCOMのバージョンも違うし、メソッドの引数も変わってきます。適切なバージョンのエクセルがインストールされている必要があります。あらゆるバージョンのエクセルに対応させるには遅延バインディング等の実装が必要になります。
パフォーマンスもそんなに良くないと思っておいたほうがいいでしょう。
using System.Reflection; // System.Reflecton.Missing
using System.Runtime.InteropServices; // System.Runtime.InteropServices.Marshal.ReleaseComObject
using Microsoft.Office.Interop.Excel;
......
// ファイルパス。絶対パスを指定。
string szPath = @"C:\FileExcel.xls";
Application objExcel;
Workbooks objWorkBooks;
_Workbook objWorkBook;
Sheets objSheets;
Range objRange;
_Worksheet objWorkSheet;
// COM起動。メッセージボックスは出さないようにする。
objExcel = new Application();
objExcel.Visible = false;
objExcel.DisplayAlerts = false;
objWorkBooks = objExcel.Workbooks;
// ファイルを開く
objWorkBook = ( _Workbook )( objWorkBooks.Open(
szPath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value ) );
// ワークシートを開く
objSheets = objWorkBook.Sheets;
objWorkSheet = ( _Worksheet )objSheets.get_Item( "Sheet1" );
// 読み出し
objRange = objWorkSheet.get_Range( "B5", "B5" );
string szValue = objRange.Value2.ToString();
// 書き込み
objRange.Value2 = "8";
// ワークシートを保存
objWorkSheet.SaveAs( szPath, Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value );
// COM解放。上手に解放しないとEXCEL.EXEプロセスが残ったままになる。
int nRelease;
do
{
nRelease = Marshal.ReleaseComObject( objRange );
}while( nRelease > 0 );
do
{
nRelease = Marshal.ReleaseComObject( objWorkSheet );
}while( nRelease > 0 );
do
{
nRelease = Marshal.ReleaseComObject( objSheets );
}while( nRelease > 0 );
objWorkBook.Close( false, Missing.Value, Missing.Value );
do
{
nRelease = Marshal.ReleaseComObject( objWorkBook );
}while( nRelease > 0 );
objWorkBooks.Close();
do
{
nRelease = Marshal.ReleaseComObject( objWorkBooks );
}while( nRelease > 0 );
objExcel.Quit();
do
{
nRelease = Marshal.ReleaseComObject( objExcel );
}while( nRelease > 0 );