programing

16진수를 사용하여 Excel 셀의 뒤 색상을 변경하면 Excel이 스프레드시트에 완전히 다른 색상으로 표시됩니다.

telecom 2023. 7. 9. 09:48
반응형

16진수를 사용하여 Excel 셀의 뒤 색상을 변경하면 Excel이 스프레드시트에 완전히 다른 색상으로 표시됩니다.

그래서 Excel 셀의 내부 색상을 아래와 같이 일정한 값으로 설정하고 있습니다.

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

그러나 Excel에서 스프레드시트를 열면 나온 색이 완전히 다르다는 것을 알 수 있습니다(위의 경우 결과 스프레드시트의 색은 0xDCDCEF입니다).몇 가지 다른 색상을 시도해봤는데 항상 바뀌는데 패턴이 안 보이네요.

무슨 이유라도 있습니까?색을 써서 색을 설정하기도 했습니다.Argb(241, 220, 219)로부터.Argb()에게, 그리고 같은 일이 일어났습니다.

저는 많은 테스트를 거쳐 마침내 그것을 알아냈습니다. 그리고 그것은 정말 간단한 것이었습니다.Excel의 Interop 라이브러리에 버그가 있어 빨간색과 파란색 값을 반대로 적용하고 있으므로 RGB 16진수를 전달하는 대신 BGR을 통과해야 하는데 갑자기 색상이 정상적으로 작동합니다.이 버그가 인터넷 어디에도 기록되어 있지 않다는 것이 놀랍습니다.

따라서 다른 사용자가 이 문제에 부딪히면 Excel 값을 BGR 값으로 전달하기만 하면 됩니다. (또는 색상을 사용하는 경우)Argb()에서 색상을 전달합니다.출처 Argb(B, G, R)

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

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

엑셀의 컬러 시스템은 항상 이런 식이었기 때문에, 사실 버그는 아닙니다.C# - Excel 인터오프를 고통스럽게 만드는 또 다른 것입니다.

이것은 버그가 아닙니다!빨간색은 낮은 비트에서 시작하고 녹색은 중간에 있으며 파란색이 가장 높은 비트를 차지합니다.

GBR
00000000 00000000 00000000

계산은 (65536 * 파란색) + (256 * 녹색) + (빨간색)입니다.

감사해요.

해라worksheet.cells(1,1).interior.color = rgb(241, 220, 219).

편집 저는 바보입니다, 방금 당신이 VBA 8)을 사용하지 않는다는 것을 알았습니다.이건 좀 긴 스트레칭인데 10진수로 보내주실 수 있나요?...color.color = &HF1DCDB는 = 15850715와 마찬가지로 VBA에서 작동합니다.

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

HTML을 사용하여 색상 #FF9900을 지정하면 Excel에서 라이트 오렌지라고 부르는 것을 얻을 수 있습니다.색상 #003366을 지정하면 Excel에서 다크틸이라고 부르는 것을 얻을 수 있습니다.하지만 만약 당신이 vba와 함께 Light orange 또는 Dark teal을 원한다면 당신은 &H0099를 지정해야 합니다.FF와 &H663300.

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

Excel Interop을 코딩한 사람은 Excel이 색상을 지정하기 위해 비표준 숫자를 사용한다는 것을 몰랐을 것입니다.

RGB 색상만 구문 분석할 수 있습니다.HTML hex문자열:

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

별도의 알파 값이 있는 경우 다음을 적용할 수 있습니다(문서).

Color colour = ColorTranslator.FromHtml("#E7EFF2");
Color transparent = Color.FromArgb(128, colour);

내 코드도 올리고 싶었을 뿐이에요저는 복사&붙여넣기 솔루션이 없었기 때문입니다.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);
}

언급URL : https://stackoverflow.com/questions/7423456/changing-an-excel-cells-backcolor-using-hex-results-in-excel-displaying-complet

반응형