VSTO C# Excelアドインでカラーパレットを使って文字色を変える方法

C#

VSTOはVisual Studio Tools for Office の略で、officeのアドインやマクロ付きドキュメントを、VB.netやc#などで記述できるフレームワークです。Visual Studioで開発することができ、VBAとオサラバできるMS公式フレームワークです。

この記事では、c#で、カラーパレットを表示して指定した色でセルの文字色を変更する方法を紹介します。

カラーパレットとは?

カラーパレットとは、色を選択するダイアログです。いろいろなものがありますが、今回使うカラーパレットダイアログは以下です。

このカラーパレットから色コードを取得して、セルの文字色に反映するというコードをこの記事で説明していきます。

カラーパレットを表示するコード

カラーパレットを表示するには、フォームにcolorDialogコントロールを追加します。

カラーパレットを表示してカラーコードを取得していきます。以下のコードを使用します。

colorDialog1.ShowDialog()でカラーパレットを表示します。色を選択してOKボタンを押すと、DialogResult.OKが返ります。キャンセルボタンが押されるとDialogResult.Cancelが返ります。

        bool getColorCode(out Color colorCode)
        {
            colorCode = Color.White;

            if(colorDialog1.ShowDialog() == DialogResult.OK)
            {
                colorCode = colorDialog1.Color;
                return true;
            }else
            {
                return false;
            }

        }

選択された色はcolorDialog1.Colorで取得できますので、これをcolorCodeという引数で呼び出し元に返却します。

Excelのセルの文字色を変更するコード

選択したセルの文字色を変更するには以下のコードで実現できます。

まず、Globals.ThisAddIn.Application.Selectionで選択セルをExcel.Rangeオブジェクトとして取得します。

その後、選択範囲が1セル以上あることを判定後、Colorプロパティに色コードを設定します。

この関数では色コードは引数としています。

        public static void ChangeFontColor(System.Drawing.Color colorCode)
        {
            Excel.Range selectedRange = Globals.ThisAddIn.Application.Selection;
            if(selectedRange != null && selectedRange.Count > 0) {
                selectedRange.Font.Color = colorCode;
            }
        }

カラーパレット表示から文字色変換までを繋げてみる

繋げてみます。まず、getColorCode関数を使ってカラーパレットを表示して色コードを取得します。色が選択された時のみ文字色を変更したいので、if文を使用してTrueが返ってきた時のみChangeFontColorを呼び出します。

if( getColorCode(out colorCode))
{
    ThisAddIn.ChangeFontColor(colorCode);
}

ソースコード全文

ソースコード全文は以下のgithubリポジトリに格納しています。

コンパイルすれば動作しますので、Visual Studioをお持ちの方は遊んでみてください。

https://github.com/harus0313/cliesx


コメント

タイトルとURLをコピーしました