c# - 함수 - 스프레드시트 조건부서식 맞춤수식




스프레드 시트에서 완전히 다른 색을 표시하는 Excel에서 16 진수 결과를 사용하여 Excel 셀의 백 색을 변경하는 중 (5)

그래서 Excel 셀의 내부 색상을 다음과 같이 특정 값으로 설정합니다.

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

그러나 Excel에서 스프레드 시트를 열면 나왔던 색이 완전히 다른 것을 볼 수 있습니다 (위의 경우 결과 스프레드 시트의 색은 0xDCDCEF 임). 나는 약간 다른 색깔을 시도하고 항상 그것을 바꾼다, 나는 본을 보지 않는다.

이것에 대한 이유가 있습니까? 심지어 Color.FromArgb (241, 220, 219) .ToArgb ()를 작성하여 색상을 설정하려고 시도해도 같은 결과가 발생했습니다.


다음과 같이 16 진수의 색상을 Excel의 색상 시스템으로 변환해야합니다.

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

Excel의 색상 시스템은 항상 이런 식으로되어 있기 때문에 실제로 버그는 아닙니다. C #을 만드는 또 하나의 기능입니다 - Excel interop에 통증이 있습니다.


worksheet.cells(1,1).interior.color = rgb(241, 220, 219). 시도하십시오 worksheet.cells(1,1).interior.color = rgb(241, 220, 219).

편집 나는 바보, 그냥 VBA를 사용하지 않는 것으로 나타났습니다 8). 이것은 약간 긴 스트레칭이지만 10 진수로 보낼 수 있습니까? 가치가있는 것을 위해 ... interior.color = & HF1DCDB는 = 15850715처럼 VBA에서 작동합니다.


이것은 답변을 설명 할 수있는 배경 정보입니다.

HTML을 사용하여 # FF9900 색상을 지정하면 Excel에서 연한 오렌지색을 얻습니다. color # 003366을 지정하면 Excel에서 Dark teal이라고하는 것을 얻을 수 있습니다. 그러나 vba와 함께 밝은 주황색이나 어두운 색을 원하면 & H0099FF와 & H663300을 지정해야합니다.

즉, vba 함수는 RGB (& Hrr, & Hgg, & Hbb)이지만 Excel 디스플레이 엔진이 원하는 것이기 때문에 생성하는 숫자는 & Hbbggrr입니다.

Excel Interop을 코딩 한 사람이 Excel에서 색상을 지정하는 데 비표준 숫자를 사용한다는 사실을 모른다고 추측 할 수 있습니다.


이것은 버그가 아니므로 빨간색은 하위 비트부터 시작하고 녹색은 중간에 파란색은 가장 높은 비트를 취합니다.

BGR
00000000 00000000 00000000

계산은 다음과 같습니다. (65536 * Blue) + (256 * Green) + (Red)

고맙습니다.


내 코드도 게시하고 싶었습니다. 저를위한 사본 & 풀 해결책이 없었기 때문에. 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);
}




excel-interop