none
Wordの文字スタイルの背景色の設定方法について RRS feed

  • 質問

  • 現在、Wordのアドインを作成しています。

    いくつかのスタイルを作成する予定ですが、この中の背景色の設定方法で詰まってしまいました。

    下記のように指定しようとしましたが、2行目の代入の際に型が異なるようで、明示的な変換が必要だとVisual Studioに指摘されています。

    Word.Style addedStyle = doc.Styles.Add("name", Word.WdStyleType.wdStyleTypeCharacter);
    addedStyle.Font.Shading.BackgroundPatternColor = Color.FromArgb(0, 10, 50);
    

    BackgroudPatternColorには24bit colorを指定しなければならないようですが、Color.FormArgb(0, 10, 50)は8bit×(3色+アルファ値)で32bit colorのようです。

    この2者間の明示的な変換方法を教えていただけませんでしょうか。

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


    2014年12月26日 3:59

回答

  • こんな方法があるようですが、試したでしょうか?

    c# - Convert System.Color To Microsoft Word WdColor - Stack Overflow
     <http://stackoverflow.com/questions/13075335/convert-system-color-to-microsoft-word-wdcolor>

    • 回答としてマーク kkkokkk 2015年1月5日 9:19
    • 回答としてマークされていない kkkokkk 2015年1月5日 9:33
    • 回答としてマーク kkkokkk 2015年1月5日 9:35
    2014年12月26日 5:40

すべての返信

  • こんな方法があるようですが、試したでしょうか?

    c# - Convert System.Color To Microsoft Word WdColor - Stack Overflow
     <http://stackoverflow.com/questions/13075335/convert-system-color-to-microsoft-word-wdcolor>

    • 回答としてマーク kkkokkk 2015年1月5日 9:19
    • 回答としてマークされていない kkkokkk 2015年1月5日 9:33
    • 回答としてマーク kkkokkk 2015年1月5日 9:35
    2014年12月26日 5:40
  • 補足で、

    Shading.BackgroundPatternColor プロパティ

    使用できる値は、有効な WdColor 列挙型の定数のいずれか、または Visual Basic の RGB 関数で取得する値です。

    との記述があります。RGB関数の実体はInformation.RGB メソッドでそのソースコードを見ますとどのような演算を行えばいいかを確認できます。

    // Color c;
    c.B << 24 | c.G << 16 | c.R

    かな?

    2014年12月26日 6:56
  • >> こぐま様

    ありがとうございます。

    お礼が遅くなってしまい、申し訳ありません。

    VisualBasic関数が使えるんですね。RGB関数は試していませんでした。

    教えていただいたページが大変参考になりました。

    念のため書いたコードを貼ります。

    Word.Style addedStyle = doc.Styles.Add("name", Word.WdStyleType.wdStyleTypeCharacter);
    int rgbValue = Information.RGB(0, 10, 50);
    addedStyle.Font.Shading.BackgroundPatternColor = (Word.WdColor)rgbValue;
    
                           

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

    2015年1月5日 9:18
  • >> 佐祐理様

    ありがとうございます。

    お礼が遅くなってしまい、申し訳ありません。

    Shading.BackgroundPatternColorプロパティの記述の「Visual BasicのRGB関数~」という部分が理解できていませんでした。

    ソースコードからも考えることができるんですね。大変勉強になりました!

    8進数での変換でしたので、シフトを利用すると下記のようになりました。

    念のため、書いたものを貼っておきます。

    Color color = Color.FromArgb(0, 10, 50);
    Word.Style addedStyle = doc.Styles.Add("name", Word.WdStyleType.wdStyleTypeCharacter);
    int rgbValue = getRGBValue(color);
    addedStyle.Font.Shading.BackgroundPatternColor = (Word.WdColor)rgbValue;
    
    private int getRGBValue(Color c)
    {
         return (int)(c.R | c.G << 8 | c.B << 16);
    }

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


    • 編集済み kkkokkk 2015年1月5日 9:38
    2015年1月5日 9:34