知识库 KB0206

think-cell 使用错误的字体颜色

问题

think-cell 无法使用我的 PowerPoint 模板中定义的主要文本色彩。

解决方案

此问题由 PowerPoint 中的 Bug 所致。自 2017 年 7 月开始,Microsoft 已在 Office 365 和 Office 2016 中修复此问题。Office 365 和 Office 2016 即点即用版在更新到 1706 版(内部版本 8229.2073)时已接受修复。KB3203481 随附适用于基于 MSI 的 Office 2016 版本的修复。

您的 Office 版本未经修复时的说明和解决方法

think-cell 会尝试根据您的 PowerPoint 模板提供的字体颜色,来确定正确的字体颜色。若幻灯片母版的顶级幻灯片上缺少某些占位符,则包含 Bug 的 PowerPoint 版本会向 think-cell 告知不正确的字体颜色值。在不使用 think-cell 的情况下也可以重现该问题。

在不使用 think-cell 的情况下重现

以下宏会插入包含文本框的新幻灯片,该文本框会显示为您 PowerPoint 幻灯片母版的每个 TextStyleLevel 产生的字体颜色值。"TextStyleLevel[1]" 会显示 PowerPoint 提供的主要字体颜色。

  1. 打开受影响的 PowerPoint 文件,然后使用 Alt + F11 打开 VBA 编辑器
  2. 在 VBA 编辑器中,选择您的演示文稿,然后单击插入新模块
  3. 粘贴以下宏,然后关闭 VBA 编辑器
  4. 在 PowerPoint 演示文稿窗口中,按 Alt + F8 打开窗口
  5. 选择演示,然后单击运行
Function AppendToTextRange(txtfrm2 As PowerPoint.TextFrame2) As Office.TextRange2
    Set AppendToTextRange = _
	txtfrm2.TextRange.Characters(txtfrm2.TextRange.Length + 1, 0)
End Function

Sub Demonstrate()
    Dim pres As PowerPoint.Presentation
    Set pres = ActivePresentation
    
    Dim sld As PowerPoint.Slide
    Set sld = pres.Slides.Add(pres.Slides.Count + 1, PowerPoint.ppLayoutBlank)
    sld.Select
    
    Dim mstr As PowerPoint.Master
    Set mstr = sld.Design.SlideMaster
    
    Dim shp As PowerPoint.Shape
    Set shp = sld.Shapes.AddShape(Office.msoShapeRectangle, 50, 50, _
    pres.PageSetup.SlideWidth / 2 - 50, pres.PageSetup.SlideHeight - 100)
    shp.Fill.ForeColor.RGB = RGB(255, 255, 122) 'light yellow backgound

    Dim txtfrm2 As PowerPoint.TextFrame2
    Set txtfrm2 = shp.TextFrame2
    
    Dim txtrng2 As Office.TextRange2
    Dim i As Integer
    i = 1
    Dim txtlvl As PowerPoint.TextStyleLevel
    For Each txtlvl In mstr.TextStyles(PowerPoint.ppBodyStyle).Levels
        Set txtrng2 = AppendToTextRange(txtfrm2)
        txtrng2.Text = "TextStyleLevel[" & i & "] has color " & vbCr
        txtrng2.Font.Fill.Solid
        txtrng2.Font.Fill.ForeColor.ObjectThemeColor = Office.msoThemeColorText1
        
        Set txtrng2 = AppendToTextRange(txtfrm2)
        Dim col As PowerPoint.ColorFormat
        
        Set col = txtlvl.Font.Color
        If PowerPoint.ppSchemeColorMixed = col.Type Then
            txtrng2.Text = "MIXED (should not occur)" & vbCr & vbCr
        Else
            If Office.msoNotThemeColor = col.ObjectThemeColor Then
                Dim nRgb As Long
                nRgb = col.RGB()
                txtrng2.Text = "RGB: " & (nRgb Mod 256) & "/" & ((nRgb \ 256) _
                Mod 256) & "/" & (nRgb \ 256 \ 256) & vbCr & vbCr
                txtrng2.Font.Fill.ForeColor.RGB = nRgb
            Else
                txtrng2.Text = "ObjectThemeColor: " & col.ObjectThemeColor _
                & vbCr & vbCr
                txtrng2.Font.Fill.ForeColor.ObjectThemeColor = col.ObjectThemeColor
            End If
        End If
        i = i + 1
    Next txtlvl
End Sub

解决方法

在您 PowerPoint 演示文稿的幻灯片母版上插入缺少的占位符:

  1. 打开幻灯片母版:PowerPoint → 视图母版视图幻灯片母版
  2. 前往缩略图边栏中的顶级幻灯片
  3. 在多数情况下,插入缺少的文本和/或标题占位符可以解决此问题:
    母版布局母版布局 → 选中文本和/或标题确定
  4. 关闭幻灯片母版:关闭关闭母版视图
  5. 通过诸如将图表拖动到新位置等方式插入新图表或更新现有图表

此后若问题仍存在,请重复以上步骤,但是在步骤 3 中选中缺少的所有占位符。模板或演示文稿可能包含多个受影响的幻灯片母版,请对所有这些模板应用该解决方法。

您可能希望将此解决方法包括在您的 PowerPoint 模板中,或联系您 PowerPoint 模板的负责人员以更新默认模板。

若贵公司有 Microsoft Office 支持合同,而且您也希望请 Microsoft 修复您的 Office 版本,请参阅我们的 Microsoft 案例编号 116080514511540。

联系支持

若即使您使用已修复的 Office 版本或已应用该解决方法,think-cell 仍无法使用正确的字体颜色,请将示例幻灯片发送到 我们的支持团队,并告知我们您喜欢的字体颜色。

分享