執筆者: インフラジスティックス・ジャパン株式会社 池原 大然

動作確認環境: Visual Studio 2008 SP1,.NET Framework 3.5 SP1

更新日: 2010 年 5 月 21 日


.NET Framework では COM 相互運用性を用いて、例えば Microsoft Excel を操作することができます。この中では Workbook の作成、ロード、保存や Worksheet の追加、セルの値の参照や設定など、多岐にわたる操作を行うことが可能です。今回は "C:\test\testExcel.xlsx" という Excel ファイルを開き、A1 セルの値の取得、変更を行う方法を紹介します。A1 セルには予め "コード レシピ" という値が設定されているものとします。

Excel をプロジェクトで扱うにはプロジェクトで COM の Microsoft Excel [バージョン番号] Object Library を参照する必要があります。(Office 2007 では [バージョン番号] は 12.0、Office 2010 では 14.0 となり、それぞれ Microsoft Excel 12.0 Object Library、Microsoft Excel 14.0 Object Library と表示されます。)

今回のサンプル コードではスペースの都合上、妥当性のチェックを行っていません。ファイルが存在しない、あるいは開けない、書き込み権限を実行ユーザが持っていないなどといった場合は例外が発生するので、実際の実装では妥当性の確認を行うように心がけてください。

C#
using System;
using Microsoft.Office.Interop.Excel;

namespace COMAutomation_Excel_CS
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = @"C:\test\testExcel.xlsx";
            Application xlApp = new Application();
            if ( xlApp != null )
            {
                xlApp.Visible = true;
                Workbook wb = xlApp.Workbooks.Open(fileName,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                ((Worksheet)wb.Sheets[1]).Select(Type.Missing);
                Range aRange = xlApp.get_Range("A1",Type.Missing) as Range;
                if ( aRange != null )
                {
                    Console.WriteLine(aRange.Value2 ?? String.Empty);
                    aRange.Value2 = "コード レシピ Excel編";
                    Console.WriteLine(aRange.Value2);
                }
                wb.Close(true, Type.Missing, Type.Missing);
                xlApp.Quit();
            }
        }
    }
}
 

ファイルの状態や権限に問題がない場合、コンソールに下記のように実行結果が表示され、ファイルが更新されます。

コード レシピ
コード レシピ Excel 編

今回は Visual Studio 2008 SP1、.NET Framework 3.5 SP1 における C# での実装方法をご紹介しましたが、Visual Studio 2010、.NET Framework 4 における C# 4.0 では Type.Missing を省略し、以下のように書くことも可能です。

C#
using System;
using Microsoft.Office.Interop.Excel;

namespace COMAutomation_Excel_CS
{
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = @"C:\test\testExcel.xlsx";
            Application xlApp = new Application();
            if (xlApp != null)
            {
                xlApp.Visible = true;
                Workbook wb = xlApp.Workbooks.Open(Filename: fileName);
                ((Worksheet)wb.Sheets[1]).Select();
                Range aRange = xlApp.get_Range("A1") as Range;
                if (aRange != null)
                {
                    Console.WriteLine(aRange.Value2 ?? String.Empty);
                    aRange.Value2 = "コード レシピ Excel編";
                    Console.WriteLine(aRange.Value2);
                }
                wb.Close(true);
                xlApp.Quit();
            }
        }
    }
}
 

関連リンク


Code Recipe Code Recipe

ページのトップへ