プロパティ | C#でExcelを読み込んで操作する方法を公開|C# Excel操作テクニック.NET

メソッドに貼り付けるだけで機能するソースコードを多数用意しています。

プロパティ

二次元配列をセルに一括出力する

二次元配列の値をそのままセルに一括出力する方法です。

二次元配列の各要素が1つのセルに設定されます。

以下の処理では、適当な二次元配列を作成後、指定したセルの範囲に値を出力しています。


            #region "work 貼り付ける値を作成"

            // 10行4列イメージの二次元配列
            object[,] setValue = new object[9, 4];

            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    setValue[i, j] = string.Format("{0}行{1}列目", i + 1, j + 1);
                }
            }

            #endregion


            // Excel操作用オブジェクト
            Microsoft.Office.Interop.Excel.Application xlApp = null;
            Microsoft.Office.Interop.Excel.Workbooks xlBooks = null;
            Microsoft.Office.Interop.Excel.Workbook xlBook = null;
            Microsoft.Office.Interop.Excel.Sheets xlSheets = null;
            Microsoft.Office.Interop.Excel.Worksheet xlSheet = null;

            // Excelアプリケーション生成
            xlApp = new Microsoft.Office.Interop.Excel.Application();

            // 既存のBookを開く
            xlBooks = xlApp.Workbooks;
            xlBook = xlBooks.Open(System.IO.Path.GetFullPath(@"..\..\..\data\work01.xlsx"));

            // シートを選択する
            xlSheets = xlBook.Worksheets;
            // 1シート目を操作対象に設定する
            // ※Worksheets[n]はオブジェクト型を返すため、Worksheet型にキャスト
            xlSheet = xlSheets[1] as Microsoft.Office.Interop.Excel.Worksheet;

            // 表示
            xlApp.Visible = true;

            int iColCnt = 0;    //列数カウンタ
            int iRowCnt = 0;    //行数カウンタ
            Microsoft.Office.Interop.Excel.Range xlCellsFrom = null;   //セル始点(中継用)
            Microsoft.Office.Interop.Excel.Range xlRangeFrom = null;   //セル始点
            Microsoft.Office.Interop.Excel.Range xlCellsTo = null;     //セル終点(中継用)
            Microsoft.Office.Interop.Excel.Range xlRangeTo = null;     //セル終点   
            Microsoft.Office.Interop.Excel.Range xlTarget = null;      //配列設定対象レンジ

            //配列の要素数取得
            iRowCnt = setValue.GetLength(0) - 1;
            iColCnt = setValue.GetLength(1) - 1;

            // 貼り付け位置
            int col = 4;
            int row = 5;

            //始点セル取得
            xlCellsFrom = xlSheet.Cells;
            xlRangeFrom = xlCellsFrom[row, col] as Microsoft.Office.Interop.Excel.Range;

            //終点セル取得
            xlCellsTo = xlSheet.Cells;
            xlRangeTo = xlCellsTo[row + iRowCnt, col + iColCnt] as Microsoft.Office.Interop.Excel.Range;

            //貼り付け対象レンジ
            xlTarget = xlSheet.Range[xlRangeFrom, xlRangeTo];

            //◆値設定◆
            xlTarget.Value = setValue;

            // ■■■以下、COMオブジェクトの解放■■■

            // cell解放
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlTarget);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRangeTo);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlCellsTo);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRangeFrom);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlCellsFrom);

            // Sheet解放
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets);

            // Book解放
            //xlBook.Close();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks);

            // Excelアプリケーションを解放
            //xlApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);



セルの値を取得/設定する

指定したセルの値を取得/設定します。

以下の処理は、行列番号でセルを指定し、そのセルに任意の値を設定し、入力された値を取得しています。


            // Excel操作用オブジェクト
            Microsoft.Office.Interop.Excel.Application xlApp = null;
            Microsoft.Office.Interop.Excel.Workbooks xlBooks = null;
            Microsoft.Office.Interop.Excel.Workbook xlBook = null;
            Microsoft.Office.Interop.Excel.Sheets xlSheets = null;
            Microsoft.Office.Interop.Excel.Worksheet xlSheet = null;

            // Excelアプリケーション生成
            xlApp = new Microsoft.Office.Interop.Excel.Application();

            // 既存のBookを開く
            xlBooks = xlApp.Workbooks;
            xlBook = xlBooks.Open(System.IO.Path.GetFullPath(@"..\..\..\data\work01.xlsx"));

            // シートを選択する
            xlSheets = xlBook.Worksheets;
            // 1シート目を操作対象に設定する
            // ※Worksheets[n]はオブジェクト型を返すため、Worksheet型にキャスト
            xlSheet = xlSheets[1] as Microsoft.Office.Interop.Excel.Worksheet;

            // 表示
            xlApp.Visible = true;

            // セルのオブジェクト
            Microsoft.Office.Interop.Excel.Range xlRange = null;
            Microsoft.Office.Interop.Excel.Range xlCells = null;

            // B3セルを指定
            xlCells = xlSheet.Cells;
            xlRange = xlCells[3, 2] as Microsoft.Office.Interop.Excel.Range;

            // ◆現在の値を表示◆
            MessageBox.Show(xlRange.Value);

            // ◆値を設定◆
            xlRange.Value = "変更後の値";

            // 変更後の値を表示
            MessageBox.Show(xlRange.Value);

            // ■■■以下、COMオブジェクトの解放■■■

            // cell解放
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlCells);

            // Sheet解放
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets);

            // Book解放
            //xlBook.Close();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks);

            // Excelアプリケーションを解放
            //xlApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);


Sheetの名称を取得・設定する

操作中Sheetの名称を取得・設定します。

注意点は、Sheet[n]をWorkSheetオブジェクトに設定する際はキャストが必要だということです。

        {
            // Excel操作用オブジェクト
            Microsoft.Office.Interop.Excel.Application xlApp = null;
            Microsoft.Office.Interop.Excel.Workbooks xlBooks = null;
            Microsoft.Office.Interop.Excel.Workbook xlBook = null;
            Microsoft.Office.Interop.Excel.Sheets xlSheets = null;
            Microsoft.Office.Interop.Excel.Worksheet xlSheet = null;

            // Excelアプリケーション生成
            xlApp = new Microsoft.Office.Interop.Excel.Application();

            // 新規のExcelブックを開く
            xlBooks = xlApp.Workbooks;
            xlBook = xlBooks.Add();

            // シートを選択する
            xlSheets = xlBook.Worksheets;
            // 1シート目を操作対象に設定する
            // ※Worksheets[n]はオブジェクト型を返すため、Worksheet型にキャスト
            xlSheet = xlSheets[1] as Microsoft.Office.Interop.Excel.Worksheet;

            // 表示
            xlApp.Visible = true;

            // Sheet名表示
            MessageBox.Show(xlSheet.Name);

            // ◆シート1の名称を変更する◆
            // Nameプロパティ
            xlSheet.Name = "Sheet999";

            // Sheet名表示
            MessageBox.Show(xlSheet.Name);


            // ■■■以下、COMオブジェクトの解放■■■

            // Sheet解放
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets);

            // Book解放
            //xlBook.Close();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks);

            // Excelアプリケーションを解放
            //xlApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);

        }

Excelアプリケーション(Excel.exe)のパスを取得する

Excel.exeのフォルダの完全パスを取得します。

※操作中のファイルパスではありません、注意してください。

(32bit OSでのデフォルトはC:\Program Files\Microsoft Office…あたりだと思います。)

{
            // Excel操作用オブジェクト
            Microsoft.Office.Interop.Excel.Application xlApp = null;
            

            // Excelアプリケーション生成
            xlApp = new Microsoft.Office.Interop.Excel.Application();

            // ◆Exe格納パスをメッセージボックスに表示◆
            // Pathプロパティ
            System.Windows.Forms.MessageBox.Show(xlApp.Path);

            // Excelアプリケーションを解放
            xlApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);

 }

ExcelのSheet数を取得する

操作対象Excelのシート数を取得します。

        {
            // Excel操作用オブジェクト
            Microsoft.Office.Interop.Excel.Application xlApp = null;
            Microsoft.Office.Interop.Excel.Workbooks xlBooks = null;
            Microsoft.Office.Interop.Excel.Workbook xlBook = null;
            Microsoft.Office.Interop.Excel.Sheets xlSheets = null;

            // Excelアプリケーション生成
            xlApp = new Microsoft.Office.Interop.Excel.Application();

            // 既存のBookを開く
            xlBooks = xlApp.Workbooks;
            xlBook = xlBooks.Open(System.IO.Path.GetFullPath(@"..\..\..\data\work01.xlsx"));

            // シートを取得する
            xlSheets = xlBook.Worksheets;

            // 表示
            xlApp.Visible = true;

            // ◆シート数取得◆
            // Countプロパティ
            System.Windows.Forms.MessageBox.Show(xlSheets.Count.ToString());

            // ■■■以下、COMオブジェクトの解放■■■

            // Sheet解放
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets);

            // Book解放
            //xlBook.Close();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks);

            // Excelアプリケーションを解放
            //xlApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);


        }

Excelの確認メッセージを非表示に設定する(アラート設定)

操作対象のExcelアプリケーションのDisplayAlertsプロパティを取得・設定します。

DisplayAlertsにFalseを設定すると、Excelを閉じるときなどに表示されるメッセージの表示/非表示を制御できます。

以下の処理を実行すると、表示されたExcelの編集→閉じる操作をしても保存要否の確認メッセージが表示されません。

逆にxlApp.DisplayAlertsにTrueを設定すると、確認メッセージが表示されるようになります。

        {

            // Excel操作用オブジェクト
            Microsoft.Office.Interop.Excel.Application xlApp = null;
            Microsoft.Office.Interop.Excel.Workbooks xlBooks = null;
            Microsoft.Office.Interop.Excel.Workbook xlBook = null;
            Microsoft.Office.Interop.Excel.Sheets xlSheets = null;
            Microsoft.Office.Interop.Excel.Worksheet xlSheet = null;

            // Excelアプリケーション生成
            xlApp = new Microsoft.Office.Interop.Excel.Application();

            // ◆アラートメッセージ非表示設定◆
            xlApp.DisplayAlerts = false;

            // 新規のExcelブックを開く
            // Addメソッド
            xlBooks = xlApp.Workbooks;
            xlBook = xlBooks.Add();

            // シートを選択する
            xlSheets = xlBook.Worksheets;
            xlSheet = xlSheets[1] as Microsoft.Office.Interop.Excel.Worksheet; // 1シート目を操作対象に設定する

            // 表示
            xlApp.Visible = true;

            // ■■■以下、COMオブジェクトの解放■■■

            // Sheet解放
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheets);

            // Book解放
            //xlBook.Close();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBooks);

            // Excelアプリケーションを解放
            //xlApp.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);


        }

Excelのバージョンを取得する

Excelのバージョンを取得します。

このプロパティによって取得できる値は以下の通りです。

 

Excel バージョン
2010 14.0
2007 12.0
2003 11.0
2002 10.0
2000 9.0
97 8.0

 

取得方法は以下のようになります。


 {

     // Excel操作用オブジェクト
     Application xlApp = null;

     // Excelアプリケーション生成
     xlApp = new Application();

     // ◆バージョン番号をメッセージボックスに表示◆
     // Versionプロパティ
     System.Windows.Forms.MessageBox.Show(xlApp.Version);

     // Excelアプリケーションを解放
     xlApp.Quit();
     System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);

 }