Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测(并更改)Excel和PowerPoint中图表中使用的字体是否符合样式,或者是否由用户指定?_Excel_Vba_Formatting_Vsto_Powerpoint - Fatal编程技术网

如何检测(并更改)Excel和PowerPoint中图表中使用的字体是否符合样式,或者是否由用户指定?

如何检测(并更改)Excel和PowerPoint中图表中使用的字体是否符合样式,或者是否由用户指定?,excel,vba,formatting,vsto,powerpoint,Excel,Vba,Formatting,Vsto,Powerpoint,将图表从Excel复制到PowerPoint时,如果轴上的字体因Excel中应用的样式或主题而更改,则它们通常会更改为与PowerPoint中应用的主题一致(这很好)。但是,当字体(可能是一般格式)已被用户覆盖时,用户指定的字体就是使用的字体 编写代码来检测默认字体是什么并应用它可能没有那么棘手,但我更愿意以一种匹配后续主题更改的方式应用主题字体。谁能告诉我怎么做 我使用的是C#,但我熟悉VBA,并且两种语言的对象模型或多或少都相同,因此两种语言中的方法都可以。进一步挖掘后,将任何字体设置为主题

将图表从Excel复制到PowerPoint时,如果轴上的字体因Excel中应用的样式或主题而更改,则它们通常会更改为与PowerPoint中应用的主题一致(这很好)。但是,当字体(可能是一般格式)已被用户覆盖时,用户指定的字体就是使用的字体

编写代码来检测默认字体是什么并应用它可能没有那么棘手,但我更愿意以一种匹配后续主题更改的方式应用主题字体。谁能告诉我怎么做


我使用的是C#,但我熟悉VBA,并且两种语言的对象模型或多或少都相同,因此两种语言中的方法都可以。进一步挖掘后,将任何字体设置为主题字体看起来都可以通过使用特殊的字体名来完成,这些字体名包括:

  • 标题或正文字体分别为
    +mj
    +mn
  • -lt
    -ea
    -cs
    分别用于拉丁、东亚或复杂脚本字体
因此,出于我的目的,如果我只是将所有标题形状的字体属性指定为具有
font.name=“+mn lt”
,那么我就完成了我需要完成的任务,即字体将匹配主题并反映后续的主题更改


注意,由于可以使用特殊字体名称或实际字体名称来分配字体,因此检测这种情况是否已经发生是一个困难的问题(已解决)。谢天谢地,我不必太担心这个…

FWIW,看看字体的.NameComplexScript属性就足够了。我没有做过任何广泛的测试,但如果它是例如+mj cs,它似乎是一个主题字体;如果只是Calibri或其他什么,它是用户应用的/非主题字体。
.NameComplexScript
是否实际保留了
+mj cs
?对于字体名称,看起来大多数时候(有时除外)它们都会从这些名称转换为实际的字体名称。如果任何fontname属性都不是这样,那可能会非常有用。我不确定“保留”是什么意思,但是,例如,如果您将文本添加为Calibri正文或标题,并将文本添加为just Calibri,然后为每个属性查询Font.Name.ComplexScript属性,则所有正文/标题格式的文本都将返回+mn cs或+mj cs,其中常规文本将返回“Calibri”。是的,这就是我的意思-我习惯于
.Name=“+mn lt”;WriteLine(.Name)//Calibri