none
C#からエクセルのセルを結合し、斜線を描きたい。 RRS feed

  • 質問

  • いつも、お世話になります。

    C#アプリ(Windows7)からエクセル(2010)シートを開き、特定のセルを結合し、

    斜線を描きたいのですが、実現方法をご存知の方、お願い致します。

    VisualStudioは2010で、using Infragistics.Documents.Excel

    を使用した例はあるのですが、以下のコンパイルエラーとなります。

    型または名前空間名 'Infragistics' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。

    よろしく、お願い致します。

    2014年3月14日 0:51

回答

  • アセンブリ Infragisticsxxx.Documents.Excel (xxxの部分は製品により異なる) がプロジェクトの参照設定に追加されているでしょうか?

    またInfragisticsxxx.Documents.Excel はInfragistics 社が開発しているExcel操作用のライブラリです。Infragistics Professional もしくは同 Ultimate に同梱されていますが、すでに購入済みでしょうか?もし購入されていない場合、有償製品なのでライセンスを購入する必要があります。


    ひらぽん http://d.hatena.ne.jp/hilapon/

    • 回答としてマーク MitsuoTAKEI 2014年3月14日 1:41
    2014年3月14日 1:17
    モデレータ
  • COM参照という方法を使うと特にライブラリを入れることなく操作することはできます。
    作ったアプリケーションを配布する際は開発環境と実行環境とでインストールされているExcelのバージョンなどに注意しないといけないかと思います。

    環境がないので、Windows8.1上のVisual Studio 2013からExcel2013を操作したコードをのせておきます。
    プロジェクトで「コンソールアプリケーション」を作成し、プロジェクトの参照設定を右クリックして「参照の追加」を選び、COMのタイプライブラリから「Excel XX Object Library」というものを選択してOKを押してください。(XXはバージョン)

    そのうえで下記のコードを実行すると、A1とA2セルが結合され、斜線が追加されるはずです。なお、この際Excelが立ち上がりますが表示はされません。

    using Microsoft.Office.Interop.Excel;
    
    namespace ExcelApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                var fileName = @"C:\tmp\test.xlsx";
                //Excelを起動するが表示はしない
                var app = new Application {Visible = false};
                var wb = app.Workbooks.Open(fileName);
                //シートをインデックスで参照。1から始まる
                ((Worksheet)wb.Sheets[1]).Select();
                //セルA1とA2の範囲を取得
                var range = app.Range["A1", "A2"];
                if (range != null)
                {
                    //結合する
                    range.Cells.Merge();
                    //斜線を引く
                    var border = range.Borders[XlBordersIndex.xlDiagonalDown];
                    border.Weight = XlBorderWeight.xlThin;
                    border.LineStyle = XlLineStyle.xlContinuous;
                }
                wb.Close(true);
                app.Quit();
            }
        }
    }
    

    より詳細な情報は

      .NET TIPS Excelファイルにアクセスするには?[C#、VB]

    Excel オブジェクト モデルの概要

    範囲の使用

    などをご覧になるのがいいかと思います。



    2014年3月14日 2:12
  • 文字列型で "A1" "B2" といった値が入っている変数を使えば可能です。

    var c1 = "A1";
    var c2 = "B2";
    var range = app.Range[c1, c2];

    2014年3月14日 5:48

すべての返信

  • アセンブリ Infragisticsxxx.Documents.Excel (xxxの部分は製品により異なる) がプロジェクトの参照設定に追加されているでしょうか?

    またInfragisticsxxx.Documents.Excel はInfragistics 社が開発しているExcel操作用のライブラリです。Infragistics Professional もしくは同 Ultimate に同梱されていますが、すでに購入済みでしょうか?もし購入されていない場合、有償製品なのでライセンスを購入する必要があります。


    ひらぽん http://d.hatena.ne.jp/hilapon/

    • 回答としてマーク MitsuoTAKEI 2014年3月14日 1:41
    2014年3月14日 1:17
    モデレータ
  • ひらぽん様

    ご回答ありがとうございました。

    >Infragisticsxxx.Documents.Excel はInfragistics 社が開発しているExcel操作用のライブラリです。

    やはり、有償ソフトでしたか。

    これらのライブラリを使わず、セルの結合は出来ないのでしょうか?

    2014年3月14日 1:47
  • COM参照という方法を使うと特にライブラリを入れることなく操作することはできます。
    作ったアプリケーションを配布する際は開発環境と実行環境とでインストールされているExcelのバージョンなどに注意しないといけないかと思います。

    環境がないので、Windows8.1上のVisual Studio 2013からExcel2013を操作したコードをのせておきます。
    プロジェクトで「コンソールアプリケーション」を作成し、プロジェクトの参照設定を右クリックして「参照の追加」を選び、COMのタイプライブラリから「Excel XX Object Library」というものを選択してOKを押してください。(XXはバージョン)

    そのうえで下記のコードを実行すると、A1とA2セルが結合され、斜線が追加されるはずです。なお、この際Excelが立ち上がりますが表示はされません。

    using Microsoft.Office.Interop.Excel;
    
    namespace ExcelApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                var fileName = @"C:\tmp\test.xlsx";
                //Excelを起動するが表示はしない
                var app = new Application {Visible = false};
                var wb = app.Workbooks.Open(fileName);
                //シートをインデックスで参照。1から始まる
                ((Worksheet)wb.Sheets[1]).Select();
                //セルA1とA2の範囲を取得
                var range = app.Range["A1", "A2"];
                if (range != null)
                {
                    //結合する
                    range.Cells.Merge();
                    //斜線を引く
                    var border = range.Borders[XlBordersIndex.xlDiagonalDown];
                    border.Weight = XlBorderWeight.xlThin;
                    border.LineStyle = XlLineStyle.xlContinuous;
                }
                wb.Close(true);
                app.Quit();
            }
        }
    }
    

    より詳細な情報は

      .NET TIPS Excelファイルにアクセスするには?[C#、VB]

    Excel オブジェクト モデルの概要

    範囲の使用

    などをご覧になるのがいいかと思います。



    2014年3月14日 2:12
  • tanaka_733様

    丁寧な、ご回答ありがとうございました。

    いま、テストしていましたが、動作はOKでしたが、

    以下の文で止まってしまいました。

                //セルA1とA2の範囲を取得
                var range = app.Range["A1", "A2"];
    

    上記の”A1”、”A2"のところを変数にしたいのですが、可能でしょうか?

    手取り足取りで誠に申し訳ございませんが、お教えください。

    2014年3月14日 5:01
  • 文字列型で "A1" "B2" といった値が入っている変数を使えば可能です。

    var c1 = "A1";
    var c2 = "B2";
    var range = app.Range[c1, c2];

    2014年3月14日 5:48
  • 文字列型で "A1" "B2" といった値が入っている変数を使えば可能です。

    var c1 = "A1";
    var c2 = "B2";
    var range = app.Range[c1, c2];

    tanaka_733様

    ご回答ありがとうございました。

    先ほど解決し、無事、セル結合と斜線描画ができました。

    満点のご回答、本当にありがとうございました。

    2014年3月14日 6:27