2013-04-24 1 views
1


업데이트를 검색 : 당신이 내 대답은 아래를 보면 오피스 문서 (형식 2007)에 RGB 색상을 결정해야합니다.오피스 2007 [이상] 상호 운용성은 : RGB 컬러를

은 유무 :

  • Interop.Word.dll ver.14 VS2010 PIA에서,
  • VS2010 Express Edition을
  • MS 워드 2010 (ver.14)
  • .DOCX 파일을 Interop없이 수동으로 언급 한 Word에서 만들었습니다. 파일에 색칠 된 모서리 셀이있는 여러 테이블이 있습니다.

목적 : 상호 운용성은 모서리 색상을 기반으로 그라데이션 컬러로 채워진 해당 테이블을 포함하여 다른 .DOCX 파일을 빌드합니다.
문제가 나타나는 곳 : 그라데이션을 계산하려면 테이블 모서리의 색상을 WdColor에서 System.Drawing.Color으로 변환해야합니다. 그래서 저는 세포의 Shading.BackgroundPatternColor 속성으로 작업합니다. 그리고 때로는 올바른 BGR 24 비트 값을 포함하고 때로는 그렇지 않음을 발견했습니다.
두 번째 경우는 셀에 테마 팔레트 색상 중 하나가있는 경우에만 나타납니다 (표준 및 rgb- 팔레트 색상은 잘 작동하지만 테마 팔레트 색상은 문제가됩니다). 예를 들어 0x00F2F2F2 (가장 밝은 회색)으로 설정하면 0xDC00F2FFShading.BackgroundPatternColor 속성이 올바르게 설정되어 있지만 .docx 파일 아카이브 내에서 document.xml에 올바르게 저장됩니다. 따라서 ColorTranslator.FromOle은 다른 색상을 반환합니다.
Btw,이 회색의 열거 형에는 WdColor가 없습니다. 회색 반사판으로 인해 가장 두꺼운 회색 wdColorGray05 = 0xF3F3F3. 모든 팔레트 기본 색상이 열거 색상에 해당하는 것은 아닙니다.
또한 Word (예 : 242, 242, 242)의 RGB 팔레트에서 동일한 색상을 수동으로 설정 한 경우 파일을 저장하고 Interop에 의해 다시 열 때 - 색상이 0x00F2F2F2으로 올바르게 설정됩니다!
질문 : 아무도 그 문제가 있었나요? Shading.BackgroundPatternColor 속성에서 RGB 색상을 올바르게 검색하는 방법은 무엇입니까? 이 속성이 document.xml에 저장된 값과 일치하지 않는 이유는 무엇입니까?

답변

2

두 번째로 사무실 문서에서 RGB 색상을 가져 오는 데 문제가 있습니다. 처음에는 Excel 2007 .xlsx 파일 형식 이었지만 이제는 Word 2010 .docx (그래도 2007 형식 임)입니다. 약간의 수색을 한 후에 나는 똑같은 문제를 겪을 동료들을 위해 나 자신의 질문에 답하기로 결심했다.

더 자세한 설명과 예는 article which helped me a lot으로 보내드립니다. 이 기사에서 사용 된 예제는 아마도 VBA로 작성 되었기 때문에 C# 개발자를 위해 읽기가 어려울 것입니다. rgb color retriever 구현에 대한 링크를 첨부했습니다.

So. Office 프로그램 (특히 Excel 또는 Word) 중 하나를 열면 대부분의 개체, 텍스트, 배경 등의 색을 설정할 수 있습니다. 대화 상자에서이를 선택하는 대화 상자가 나타납니다. Office 2007 이상에서는 10 색 standard 색을 표시하고 60 색세트를 볼 수 있습니다. '기타 색상 ..'을 클릭하면 사전 설정된 색상 세트 또는 RGB 팔레트에서 색상을 선택할 수 있습니다.

대화 상자에서 선택한 색상이 색상 저장 형식을 결정합니다.색상 값을 저장하는 속성은 32 비트 정수로 1 번째 최상위 바이트 (FormatByte이라고 함)는 형식 지정 용이고 나머지 24 비트는 색상 값 또는 다른 것 (이 24 비트를 ColorValue이라고 부름)입니다. 가능한 포맷 사양 바로 여기에 :

  • FormatByte == 0x00
    ColorValue 공통 BGR 값이다. C#에서는 RGB를 ColorTranslator.FromOle(ColorValue);까지 검색 할 수 있습니다. 이 형식은 표준 색상 또는 '기타 색상 ..'대화 상자 (미리 결정된 색상 표 또는 팔레트)의 색상 중 하나를 선택한 경우 사용됩니다.

  • FormatByte == 0xFF
    ColorValue은 0x000000입니다. 그것은 wdColorAutomatic 값입니다. 그것은 대비되는 색깔이고 그것은 내가 그것에 대해 알고있는 모든 것입니다 (제 경우에는 항상 배경색은 흰색이고 글꼴은 검정색이었습니다). 그것을 더 연구하지 않았습니다.

  • FormatByte == 0x80ColorValue
    는 [0x000018, 0x000000에서] 범위에있을 것이다. 이러한 색상은 문서의 ActiveX 컨트롤에서 만날 수 있습니다. 시스템 KnownColors입니다 (해당 값이 포함 된 C# superset - System.Drawing.KnownColor). 만약 내가 오른쪽으로 이해가 ColorTranslator.FromOle(_color);, _color 모든 32 비트 속성 값, ColorTranslator.FromOle()의 반영 구현으로 인해 색상 KnownColor 열거 형에서 있는지 확인하기 때문에 RGB를 검색 할 수 있습니다. 그러나 나는 Office 파일을 구문 분석하는 동안 그 값에 결코 대면하지 않았습니다. 당신은 색상 based on theme 처리하는 경우

  • FormatByte in range [0xD4, 0xDF]
    . 기본 색상 및 색조 또는 음영 전환의 인덱스로 나타냅니다.

더 많은 어려움이 있으므로 마지막 사례를 자세히 살펴 보겠습니다.
FormatByte의 전반은 항상 0xD이고 나머지 절반은 0x4에서 0xF까지 다양합니다. 이 두 번째 절반은 10 가지 기본 색상 중 하나의 색인입니다.

가 해당 인덱스에 대한 Word에서 wdThemeColorIndex 열거 형 그리고 그것은 더 기본적인 사무실 msoThemeColorSchemeIndex 열거로 변환 할 수 있습니다 (이 Microsoft Office XX.0 Object Library로 tabPage .COM에서 링크 할 수있는 Microsoft.Office.Core.dll에 배치 어디 XX.0 - 버전의 Office). 번역 시트 나 VBA 함수 또는 C# 메소드 구현에 대한 링크가있는 기사를 살펴볼 수 있습니다. 이 msoThemeColorSchemeIndex에서 RGB 속성을 ActiveDocument.DocumentTheme까지 얻을 수 있습니다.
그런 다음 ColorValue에서 색조 또는 음영을 검색하고 기본 색상을 HSL (색조, 채도, 밝기)로 변환하고 색조 또는 음영을 적용한 다음 결과를 다시 RGB로 변환합니다.

관련 문제