我必须将每个阴影BackgroundPatternColor
更改为Highlight
(不要问“为什么?”,我必须)
逐个字符改变非常非常慢。
最快的方法是使用.Find
方法。
但是在文档中可以有很多不同的着色颜色(24位颜色)。 在WordOpenXML中是......像这样:
<w:shd w:val="clear" w:color="auto" w:fill="8064A2">
从这个xml中,我知道文档中使用了“8064A2”着色颜色 - “8064A4”编号是十六进制RRGGBB掩码,其均值RGB(128, 100, 162)
- 十六进制“80”是十进制128等。
但是......函数RGB(128, 100, 162)
返回10642560。
我正在寻找的阴影返回-687800321
Debug.print Selection.Range.Shading.BackgroundPatternColor
为什么呢?以及如何从RGB接收-687800321号码(因为Selection.Find.Shading.BackgroundPatternColor = -687800321
效果很好)
答案 0 :(得分:0)
我认为这篇文章解释了发生了什么:http://www.wordarticles.com/Articles/Colours/2007BuildSet.php
简而言之,您正在处理主题颜色以及它们似乎从十六进制转换为RGB的原因是因为它们被“亮度 - 黑暗”修改了。口音。
文章介绍了颜色系统的工作原理 - 据我所知,正如您所知,您正在寻找的数字:-687800321,当用HEX编写时:&amp; HD 7 00FFFF (不是RGB);相反,这个符号代表主题颜色&#34;数字7&#34; FFFF的亮度 - 黑暗。
我认为这实际上意味着你需要创建/找到某种转换表来存储在你的转换宏中(或弄清楚所有的主题颜色是什么,做鬼鬼祟祟的事情,见下文)。
无论如何,基于MS Word存储RGB但仍坚持使用主题信息来查找阴影的理解存在一种解决方案。因此,对于一个简单的2字文档,您有:
<w:r>
<w:rPr>
<w:shd w:val="clear" w:color="auto" w:fill="C0504D" w:themeFill="accent2"/>
</w:rPr>
<w:t>Red</w:t>
</w:r>
...
<w:r>
<w:rPr>
<w:shd w:val="clear" w:color="auto" w:fill="E5B8B7" w:themeFill="accent2" w:themeFillTint="66"/>
</w:rPr>
<w:t>Red-Lighter</w:t>
</w:r>
填充值(C0504D)和&amp; (E5B8B7)是RGB,但您必须使用主题信息进行查找和替换,这很烦人......所以,例如,您必须使用w:themeFill="accent2"
&amp; w:themeFillTint="66"
。
然后您可以使用原始文章中的此功能(请参阅下文)将重音 2 和色调 66 转换为无法确定的晦涩数字。
' All Credit to Tony Jollans - http://www.wordarticles.com/Articles/Colours/2007.php
Function GetThemeColor(ThemeColorIndex As WdThemeColorIndex, TintAndShade As Double) As Long
Const HexadecimalPrefix As String = "&H"
Const UseThemeColor As String = "D"
Const UnusedZeroByte As String = "00"
Const Unchanged As String = "FF"
Dim ThemeColor As String
Dim LightnessOrDarkness As String
ThemeColor = Hex$(ThemeColorIndex)
If TintAndShade >= 0 Then
LightnessOrDarkness = Unchanged & Right$("0" & Hex$((1 - TintAndShade) * &HFF), 2)
Else
LightnessOrDarkness = Right$("0" & Hex$((1 + TintAndShade) * &HFF), 2) & Unchanged
End If
GetThemeColor = CLng(HexadecimalPrefix & UseThemeColor & ThemeColor & UnusedZeroByte & LightnessOrDarkness)
End Function
答案 1 :(得分:0)
经过长时间的调查,我几乎找到了解决方案。这是我在其他论坛的第二个主题。 https://social.microsoft.com/Forums/pl-PL/2ea570b5-ce3a-4f37-a37c-9b2100941d39/how-to-find-shading-in-word-document-using-color-number-reciving-from-wordopenxml
所有魔法都在位:)
part 1 part 2 part 3 part 4 part 5
fixed w:themeFill don't know w:themeFillShade w:themeFillTint
1101 0111 00000000 11111111 11111111
第1部分。 已修复主题颜色(负数)
第2部分。 w:themeFill是WdThemeColorIndex Enumeration(accent4 == 7 == 0111)
第3部分。 还在看这是什么
第4部分。 w:themeFillShade == 11111111(“FF”)如果在xml中被忽略
第5部分。 w:themeFillTint == 11111111(“FF”)如果在xml中被省略
w:如果使用w:themeFill,则填充对颜色编号没有影响。
*差不多,因为9-16位仍然很神秘。