Mixing threads in SpreadsheetML

I struggled with this all day. Inside my styles.xml file, I have color information specified like this:

<fgColor theme = "0" tint = "- 0.249977111117893" / ">

ECMA 376 defines a theme color link as:

An index to the <clrScheme> collection referring to a specific <sysClr> or <srgbClr> expressed in the subject part.

Ok, that sounds easy. Here is an excerpt from my clrScheme xml:

<a: clrScheme name = "Office">
<a: DK1>
<a: sysClr val = "windowText" lastClr = "000000" / ">
& L; / a: DK1>
<a: LT1>
<a: sysClr val = "window" lastClr = "FFFFFF" / ">
</ a: lt1>

Index zero is black and they want to darken it? I can tell you that after applying the hue, the color should be # F2F2F2.

My confusion is what theme = "0" really means? It is impossible to mean to obscure # 000000. Checking the MSDN only confuses me even more. From http://msdn.microsoft.com/en-us/library/dd560821.aspx

note that the integer color of the theme starts from left to right in the palette starting from zero. theme color 3 - dark 2 text / background color.

In fact, if you start counting at zero, the third entry is Light 2. Dark 2 is the second. Can anyone here shed light on this subject for me? What does topic = "0" mean?

Here is the VB6 code I worked with to apply the hue. You can paste it into your vba editor and run a test sub.

Public Type tRGB R As Byte G As Byte B As Byte End Type Public Type tHSL H As Double S As Double L As Double End Type Sub TestRgbTint() Dim c As tRGB RGB_Hex2Type "ffffff", c RGB_ApplyTint c, -0.249977111117893 Debug.Print Hex(cR) & Hex(cG) & Hex(cB) End Sub Public Sub RGB_Hex2Type(ByVal HexString As String, RGB As tRGB) 'Remove the alpha channel if it exists If Len(HexString) = 8 Then HexString = mID(HexString, 3) End If RGB.R = CByte("&H" & Left(HexString, 2)) RGB.G = CByte("&H" & mID(HexString, 3, 2)) RGB.B = CByte("&H" & Right(HexString, 2)) End Sub Public Sub RGB_ApplyTint(RGB As tRGB, tint As Double) Const HLSMAX = 1# Dim HSL As tHSL If tint = 0 Then Exit Sub RGB2HSL RGB, HSL If tint < 0 Then HSL.L = HSL.L * (1# + tint) Else HSL.L = HSL.L * (1# - tint) + (HLSMAX - HLSMAX * (1# - tint)) End If HSL2RGB HSL, RGB End Sub Public Sub HSL2RGB(HSL As tHSL, RGB As tRGB) HSL2RGB_ByVal HSL.H, HSL.S, HSL.L, RGB End Sub Private Sub HSL2RGB_ByVal(ByVal H As Double, ByVal S As Double, ByVal L As Double, RGB As tRGB) Dim v As Double Dim R As Double, G As Double, B As Double 'Default color to gray R = L G = L B = L If L < 0.5 Then v = L * (1# + S) Else v = L + S - L * S End If If v > 0 Then Dim m As Double, sv As Double Dim sextant As Integer Dim fract As Double, vsf As Double, mid1 As Double, mid2 As Double m = L + L - v sv = (v - m) / v H = H * 6# sextant = Int(H) fract = H - sextant vsf = v * sv * fract mid1 = m + vsf mid2 = v - vsf Select Case sextant Case 0 R = v G = mid1 B = m Case 1 R = mid2 G = v B = m Case 2 R = m G = v B = mid1 Case 3 R = m G = mid2 B = v Case 4 R = mid1 G = m B = v Case 5 R = v G = m B = mid2 End Select End If RGB.R = R * 255# RGB.G = G * 255# RGB.B = B * 255# End Sub Public Sub RGB2HSL(RGB As tRGB, HSL As tHSL) Dim R As Double, G As Double, B As Double Dim v As Double, m As Double, vm As Double Dim r2 As Double, g2 As Double, b2 As Double R = RGB.R / 255# G = RGB.G / 255# B = RGB.B / 255# 'Default to black HSL.H = 0 HSL.S = 0 HSL.L = 0 v = IIf(R > G, R, G) v = IIf(v > B, v, B) m = IIf(R < G, R, G) m = IIf(m < B, m, B) HSL.L = (m + v) / 2# If HSL.L < 0 Then Exit Sub End If vm = v - m HSL.S = vm If HSL.S > 0 Then If HSL.L <= 0.5 Then HSL.S = HSL.S / (v + m) Else HSL.S = HSL.S / (2# - v - m) End If Else Exit Sub End If r2 = (v - R) / vm g2 = (v - G) / vm b2 = (v - B) / vm If R = v Then If G = m Then HSL.H = 5# + b2 Else HSL.H = 1# - g2 End If ElseIf G = v Then If B = m Then HSL.H = 1# + r2 Else HSL.H = 3# - b2 End If Else If R = m Then HSL.H = 3# + g2 Else HSL.H = 5# - r2 End If End If HSL.H = HSL.H / 6# End Sub 
+7
vb6 themes spreadsheetml openxml
source share
2 answers

I checked xsl with odf-converter.sourceforge.net, and it looks like 0 and 1 are switching and 2 and 3 are switching. Here is the xsl part:

  <xsl:variable name="theme"> <xsl:choose> <xsl:when test="@theme = 0"> <xsl:text>1</xsl:text> </xsl:when> <xsl:when test="@theme = 1"> <xsl:text>0</xsl:text> </xsl:when> <xsl:when test="@theme = 2"> <xsl:text>3</xsl:text> </xsl:when> <xsl:when test="@theme = 3"> <xsl:text>2</xsl:text> </xsl:when> <xsl:otherwise> <xsl:value-of select="@theme"/> </xsl:otherwise> </xsl:choose> </xsl:variable> 

Now everything is consistent. Pay attention to the switch 0 = 1, 1 = 0, 2 = 3, 3 = 2.

+6
source share

Yes, this is the color index of the theme. 0 is "first", which means 1. It looks like you are doing Excel. Note that for PowerPoint, note that the hue / shadow algorithm is different - it is not based on HSL, but rather on linear RGB.

+2
source share

All Articles