14

そこで、Excelセルの内部色を次のように特定の値に設定します。

worksheet.Cells[1, 1].Interior.Color = 0xF1DCDB;

ただし、Excelでスプレッドシートを開くと、出力された色が完全に異なっていることがわかります(上記の場合、結果のスプレッドシートの色は0xDCDCEFです)。いくつかの異なる色を試してみましたが、常に色が変わり、パターンが表示されません。

これには何か理由がありますか?Color.FromArgb(241、220、219).ToArgb()と書いて色を設定してみたところ、同じことが起こりました。

4

7 に答える 7

19

たくさんのテストを経て、ようやくわかりました。とてもシンプルなものでした。どうやら、ExcelのInteropライブラリにはバグがあり、赤と青の値が逆になっているため、RGBの16進数を渡す代わりに、BGRを渡す必要があり、突然色が正常に機能します。このバグがインターネット上の他のどこにも文書化されていないことに驚いています。

したがって、他の誰かがこの問題に遭遇した場合は、BGR値でExcel値を渡すだけです。(または、Color.FromArgb()を使用している場合は、Color.FromArgb(B、G、R)を渡します)

于 2011-09-15T02:28:56.883 に答える
8

次のように、色を16進数からExcelのカラーシステムに変換する必要があります。

ColorConverter cc = new ColorConverter();
worksheet.Cells[1, 1].Interior.Color = ColorTranslator.ToOle((Color)cc.ConvertFromString("#F1DCDB"));

Excelのカラーシステムは常にこのようになっているので、これは実際にはバグではありません。それはC#を作るもう1つのことです-Excelの相互運用は苦痛です。

于 2011-09-15T03:21:26.920 に答える
2

これはバグではないことに注意してください!赤は下位ビットから始まり、緑は中央にあり、青は上位ビットを取ります

BGR
00000000 00000000 00000000

計算は次のとおりです:(65536 *青)+(256 *緑)+(赤)

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

于 2012-02-02T09:26:11.903 に答える
1

試すworksheet.cells(1,1).interior.color = rgb(241, 220, 219).

編集私はばかげています、ちょうどあなたがVBAを使用していないことに気づきました8)。これは少し長いストレッチですが、10進数で送信してみてください。価値があるのは、... internal.color =&HF1DCDBがVBAで機能するのと同じように=15850715です。

于 2011-09-14T21:58:56.677 に答える
1

これは、答えを説明する可能性のある背景情報です。

HTMLで色#FF9900を指定すると、Excelでライトオレンジと呼ばれるものが得られます。色#003366を指定すると、Excelでダークティールと呼ばれるものが得られます。ただし、vba付きのライトオレンジまたはダークティールが必要な場合は、&H0099FFおよび&H663300を指定する必要があります。

つまり、vba関数はRGB(&Hrr、&Hgg、&Hbb)ですが、Excelの表示エンジンが必要とするため、生成される数値は&Hbbggrrです。

Excel Interopをコーディングした人は、Excelが色を指定するために非標準の数値を使用していることに気付いていなかったと思います。

于 2011-11-12T19:18:08.103 に答える
1

RGBカラーHTML hexのみを文字列から解析できます。

Color colour = ColorTranslator.FromHtml("#E7EFF2");

別のアルファ値がある場合は、これを適用できます(ドキュメント)。

Color colour = ColorTranslator.FromHtml("#E7EFF2");
Color transparent = Color.FromArgb(128, colour);
于 2014-09-19T12:47:41.810 に答える
1

私のコードも投稿したかっただけです。私にはコピー&ペーストの解決策がなかったので。Sandeshのコードに基づく:

private void ColorMe(Color thisColor){
rng = xlApp.ActiveCell;
Color mycolour = ColorTranslator.FromHtml("#" + thisColor.Name.Substring(2, 6));
rng.Interior.Color = Color.FromArgb(mycolour.R, mycolour.G, mycolour.B);
}
于 2016-10-19T13:41:55.230 に答える