查看原文
其他

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

2017-03-24 小魔方 数据小魔方

今天我教大家用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) 


那么接下来大家可能要问了,如果要想要自己定义配色模板是否可行呢,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语法格式的配色模板文件呢~


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


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


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


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


系统:C:\Program Files\Microsoft Office\root\Document Themes 16\Theme Colors

自定义:C:\Users\Administrator\AppData\Roaming\Microsoft\Templates\Document Themes\Theme Colors


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


接下来我们就来拆拆拆~


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



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


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


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


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中颜色;


colornames<-xmlRoot(color2)%>%xmlChildren()%>%names()

 [1] "dk1"      "lt1"      "dk2"      "lt2"      "accent1"  "accent2"  "accent3"  "accent4" 

 [9] "accent5"  "accent6"  "hlink"    "folHlink"


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


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中查看颜色了。


colorindex<-paste0("#",colorindex)

show_col(colorindex,labels=F)



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


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


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


没错就它了——Adobe Color CC 



看着还不错


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中,然后做成一个万花筒,让大家好好看看微软的工程师都给我们弄了啥花花绿绿的颜色——


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套)


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所提供的所有默认配色,给你一个眼神,自己体会~_~


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的配色模板很神秘嘛,哈哈是不是今天学到了很多,不要谢我哟~


欢迎关注魔方学院QQ群



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存