一篇文章揭开office配色模板的的神秘面纱~

今天我教大家用R语言做一些有趣的事情,什么事情呢~暂时保密哦,想知道的话,认真往下看哟!

背景介绍:

想必经常使用office的童鞋(无论你用的Word、PPT、还是Excel),经常会遇到这样的问题,如果做出来的图表不加修饰的话,然后效果就巨难看,你知道这是为什么嘛~

好吧让小魔方来告诉你吧,因为office给你用的默认配色模板,这种配色模板呢,坦白的说,我不认为好看(至少跟主流的设计搭配风格比起来的话),可是没有办法呀,谁让偌大的地球,只有微软一家开发出了完善的office办公平台了吧(虽然有些组件是收购的,某软只是做了整合的工作)。

可是你要知道,微软是一年技术驱动的公司(至少跟苹果这种设计驱动的公司相比的话),你要让哪些整天码代码的码农给你设计好看的配色,这个也有点儿不现实不是(真的跟公司创始人和企业文化有关,想想当年乔布斯为什么竭力地址IE和Windows甚至不惜自己开发了一套专供MAC平台使用的演示文稿软件——keynote)。

这种配色的不协调、不养眼、没品位在office2003及以前版本中体现的最深(不过也不可以过分苛责、毕竟整个社会的审美水平也是有选序渐进的趋势)。

好吧,说到这里,小魔方就给大家展示一下自己所使用平台的office官方默认配色系统是什么样的:

因为office系统组件贡献配色模板,所以这里给大家对比下Word、PPT、Excel的配色模板入口:

  • word:设计——颜色——下拉菜单
  • Excel:页面布局——主题——颜色
  • ppt:视图——幻灯片模板——背景——颜色

本人office版本及系统信息:
 W10专业版(64) office2016(64)

office配色系统:

那么接下来大家可能要问了,如果要想要自己定义配色模板是否可行呢,yes of course!

方法很简单,我刚才已经强调过一点,office平台所有组件共享诸多模块,当然也包含配色模板,也就是说,无论你在那个组件界面自定义了色板,最终都会保存在office平台公用的自定义配色模板文件夹里。(确实如此,无论是在Word界面自定义、还是Excel甚至PPT或者其他office组件内自定义配色模板,最终都会保存在同一个公用自定义配色模板文件夹,但是在软件界面你无法看到该文件保存的路径)。

所以说你就不用纠结应该在哪儿设置自定义配色了,那么我们就用Excel做一个尝试吧~

当你在Excel软件界面的页面布局——颜色下拉菜单底部点击自定义配色的时候,弹出菜单如下:

主题颜色一共12个选项,前四个是分深浅的两组文字背景颜色,中间6组是以着色1:6进行编号命名的颜色组合(通常用在系列配色中,如图表序列、线条系列等)。最后两个是超链接颜色(包括默认颜色和访问过的颜色显示)。

自定义模板一般来说是定义3:10这8个颜色,因为这也是显示在你软件界面配色选项中第一排的颜色(无论是字体颜色菜单、形状填充颜色菜单还是线条颜色菜单都是如此)。至于颜色1和颜色2为何不显示这个问题我也很纳闷,最后两个超链接颜色用的频率不高可以忽略。

随意打开一个颜色对应下拉框,你就可以看到很熟悉的调色板,没错跟软件主界面的字体、线条和图形填充颜色菜单一模一样,接下来就不用我说了,自己选就行。

定义完目标色之后,点击保存,在公用配色模板目录就会多一个配色模板(.xml格式,没错就是xml,透露一个秘密,office文档结构其实是一组.xml文件组成的压缩包,不信你用任意一个docx、pptx、xlsx文档修改后缀名为.rar,然后用解压软件打开仔细看看里面都放了什么东西,有惊喜哦~)

我保存了一个名为balalala的自定义配色模板。然后……

对吧,我没有骗你吧,确实是定义一个,所有的软件都可以共用——

接下来做一些有挑战性的事情,既然office平台的配色模板是.xml格式的文件,那么我们可不可以不用再软件里面手动定义,而直接生成符合xml语法格式的配色模板文件呢~

答案当然是可以的啦,不过做这个需要你掌握以下两点知识:

知道office配色模板的存放路径:

一般有两类模板,一类是系统模板,就是安装软件时候,系统自动加载的,一般配色都不甚好看,显示在颜色下拉菜单的第二个栏目,而自定义模板可以给大家充分发挥想象力的空间。一般显示在颜色下拉菜单的第一个部分。

模板的路径如下(个人电脑的路径,其他平台及品牌类比操作):

  • 系统:C:\Program Files\Microsoft Office\root\Document Themes 16\Theme Colors
  • 自定义:C:\Users\Administrator\AppData\Roaming\Microsoft\Templates\Document Themes\Theme Colors

了解xml语法结构,并会适当修改色值。(只是了解,不要求会写,事实上看不懂没关系,我也不会写,一会儿会一步一步的教你拆解xml)。

接下来我们就来拆拆拆~

使用R语言的XML包处理office配色模板:

首先先随便自定义一个模板(在软件里面自定义),然后定位到自定义模板文件夹里:将xml文件用txt记事本打开(notpad++也可以),随便浏览下xml文档结构:

看吧,其实模板也没啥神秘的,xml语法结构树中,包含了刚才自定义的所有12中颜色的十六进制色值信息。(数一数一共几个val)。

但是介于好多小伙伴没有xml基础,txt记事本没有标注xml机构的功能,本文全部是紧凑排列的,挤在一起看不出来什么。

这里我将其导入R中,使用规范的xml树结构工具来拆解xml文档。

1
2
3
4
5
6
7
library(XML)
library(plyr)
library(dplyr)
library(scales)
setwd("C:/Users/Administrator/AppData/Roaming/Microsoft/Templates/Document Themes/Theme Colors")
color2<-xmlTreeParse("balalala.xml",useInternalNodes=TRUE)
color2

这回看清楚了吧,以上函数将该xml还原成其xml结构下的树结构,这也是一个语法完整的xml文档,第一行是xml的头文件,声明该xml文档的类型、版本号编码方式以及是否含有外部DTD(什么鬼我也不知道)该树结构分为三级子元素结构:

分别是带有命名空间的元素a:clrScheme
二级元素:a:dkl……a:folHlink 刚好12个二级子元素,对应之前自定义的12中颜色;

1
2
3
colornames<-xmlRoot(color2)%>%xmlChildren()%>%names()
[1] "dk1" "lt1" "dk2" "lt2" "accent1" "accent2" "accent3" "accent4"
[9] "accent5" "accent6" "hlink" "folHlink"

三级元素:a:sysClr 12个三级元素拥有同样的名称,而我们定义的颜色色值变存储在这12个三级空子元素的val属性值内。

1
2
3
4
colorgroup<-getNodeSet(color2,'//a:srgbClr') #选取所有三级节点a
colorindex<-laply(colorgroup,xmlAttrs,name='val') #提取所有三级节点中的val属性值
colorindex
[1] "44546A" "E7E6E6" "4472C4" "ED7D31" "A5A5A5" "FFC000" "5B9BD5" "70AD47" "0563C1" "954F72"

因为R中的16进制色值需要加前缀#才能识别,所以最好加上前缀,这样我们就可以愉快的在R中查看颜色了。

1
2
colorindex<-paste0("#",colorindex)
show_col(colorindex,labels=F)

好吧,就问你,这个配色方案丑不丑,之前自定义的时候一个颜色没改,就是office2016默认的配色方案,怪不得你做不出来好点的图表作品~

那么我们是不是可以自己在txt中把一些好看的色值给黏贴进去呢,这样也做成了也挺神奇的哈~说干就干~

自制调色板:

首先找一个好的在线配色平台——

没错就它了——Adobe Color CC

看着还不错

1
2
3
4
5
6
setwd("C:/Users/Administrator/AppData/Roaming/Microsoft/Templates/Document Themes/Theme Colors")
color2<-xmlTreeParse("balalala.xml",useInternalNodes=TRUE)
colorgroup<-getNodeSet(color2,'//a:srgbClr')
colorindex<-laply(colorgroup,xmlAttrs,name='val')
colorindex<-paste0("#",colorindex)
show_col(colorindex,labels=F)

哈哈,这回配色是不是稍微好一些了,至少要比刚才好很多!

接下来我有个疯狂的想法,我想把office平台系统默认配色模板全部都导出到R中,然后做成一个万花筒,让大家好好看看微软的工程师都给我们弄了啥花花绿绿的颜色——

1
2
3
4
5
6
7
8
9
10
11
setwd("C:/Program Files/Microsoft Office/root/Document Themes 16/Theme Colors")
a<-list.files(".",pattern = "*.xml$")
[1] "Aspect.xml" "Blue Green.xml" "Blue II.xml"
[4] "Blue Warm.xml" "Blue.xml" "Grayscale.xml"
[7] "Green Yellow.xml" "Green.xml" "Marquee.xml"
[10] "Median.xml" "Office 2007 - 2010.xml" "Orange Red.xml"
[13] "Orange.xml" "Paper.xml" "Red Orange.xml"
[16] "Red Violet.xml" "Red.xml" "Slipstream.xml"
[19] "Violet II.xml" "Violet.xml" "Yellow Orange.xml"
[22] "Yellow.xml"

没错这就是某软提供的所有默认配色模板(一共22套)

1
2
3
4
5
6
7
8
9
10
11
12
13
mycolorfile<-c()
fun<-function(i){
color2<-xmlTreeParse(a[i],useInternalNodes=TRUE)
colornames<-xmlRoot(color2)%>%xmlChildren()%>%names()
colorgroup<-getNodeSet(color2,'//a:srgbClr')
colorindex<-laply(colorgroup,xmlAttrs,name='val')
colorindex<-paste0("#",colorindex)
}
for ( i in 1:length(a)){
mycolorfile<-c(mycolorfile,fun(i))
}
show_col(mycolorfile,labels=F)

好吧,这就是微软office所提供的所有默认配色,给你一个眼神,自己体会~_~

1
2
3
4
5
6
colordata<-myfullcolorfile[c(-221,-222)]
dim(colordata)<-c(10,length(a))
rownames(colordata)<-colornames[c(-1,-2)]
colnames(colordata)<-sub(".xml","",a)
colordata<-t(colordata)
write.table(colordata,"F:/colordata.txt",sep=" ",row.names=FALSE,col.names=TRUE,quote=FALSE)


好了,大功告成,这样你还会觉得office的配色模板很神秘嘛,哈哈是不是今天学到了很多,不要谢我哟~


联系方式:
wechat:ljty1991
Mail:578708965@qq.com
个人公众号:数据小魔方(datamofang)
团队公众号:EasyCharts
qq交流群:[魔方学院]298236508

个人简介:
杜雨
财经专业研究僧;
伪数据可视化达人;
文科背景的编程小白;
喜欢研究商务图表与地理信息数据可视化,爱倒腾PowerBI、SAP DashBoard、Tableau、R ggplot2、Think-cell chart等诸如此类的数据可视化软件,创建并运营微信公众号“数据小魔方”。

Mail:578708965@qq.com

备注信息:
知识共享许可协议
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议

坚持原创技术分享,您的支持将鼓励我继续创作!