图表的渲染,除了着色外,还有设置透明度、纹理映射、添加光照和设置材质等内容。本节进一步进行介绍。[大谦Excel,dqexcel点com]
透明度
将图形对象设置为半透明在三维可视化中是一个很有用的技巧。它使用户不仅能看到对象的外观,还能看到对象内部的结构特征。
使用FillFormat对象和LineFormat对象的Transparency属性可以设置面和线的透明度。图1-9中设置复合柱状图中第一个序列的透明度为0.5,为半透明。
纹理映射
纹理映射技术将二维图像映射到曲面对象上。Excel中面的图片填充和纹理填充都是纹理映射技术的应用。
使用FillFormat对象的UserPicture方法进行图片填充。使用FillFormat对象的UserTextured方法进行纹理填充。前者通过拉伸图像对指定面进行填充,后者通过平铺和裁剪进行填充。图1-12介绍了对复合柱状图的不同序列进行图片填充和纹理填充的实现。
光照和材质
添加光照使图形场景更加真实,这一点是通过模拟自然光下对象的明暗色调来实现的。这里,自然光也就是阳光。Excel中可以对三维对象设置光照。另外还可以设置对象的材质,如金属材质、塑料材质等。
编程实现时,引用某些对象的ThreeD属性返回一个三维对象,设置该对象的跟光照和材质有关的属性可进行设置。
特效:阴影
Excel可以给图表中的对象添加阴影,可以设置阴影的方向、颜色、透明度、大小、模糊程度、角度和跟对象之间的距离。
本例创建简单柱状图和复合线形图,给它们添加阴影。完整代码见:Samples->ch04 美化Excel图表->21 特效:阴影->py.py。
root=os.getcwd() #获取当前工作路径
app=xw.App(visible=True,add_book=False) #创建Excel应用
wb=app.books.open(root+r'/data.xlsx',read_only=False) #打开数据文件返回工作簿对象
sht=wb.sheets('Sheet1') #获取指定工作表对象
sht.api.Range('A2:B7').Select() #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlColumnClustered,20,20,350,250,True)
cht=shp.Chart #获取图表
shadow=cht.SeriesCollection(1).Format.Shadow #给序列1添加阴影,返回阴影对象
shadow.Type=21 #阴影类型
shadow.Visible=True #阴影可见
shadow.Style=2 #阴影样式msoShadowStyleOuterShadow
shadow.Blur=4 #阴影的模糊度
shadow.OffsetX=4.95 #水平向偏移
shadow.OffsetY=4.95 #垂向偏移
shadow.RotateWithShape=False #不旋转
shadow.ForeColor.RGB=xw.utils.rgb_to_int((0,0,0)) #颜色
shadow.Transparency=0.6 #透明度
shadow.Size=100 #大小
sht.api.Range('A2:C11').Select() #数据
#生成第2个图表,为复合线形图
shp2=sht.api.Shapes.AddChart2(-1, xw.constants.ChartType.xlLine, 30, 20, 350, 250, True)
cht2=shp2.Chart #获取图表
cht2.SeriesCollection(1).Format.Shadow.Type=24 #序列1添加阴影
cht2.SeriesCollection(2).Format.Shadow.Type=24 #序列2添加阴影
运行代码生成图1-28和图1-29。
图1-29 给折线添加阴影
特效:发光
Excel可以给图表中的二维对象添加发光特效,可以设置光影的方向、颜色、透明度和大小。
本例创建简单柱状图和复合线形图,给它们添加发光特效。完整代码见:Samples->ch04 美化Excel图表->22 特效:发光->py.py。
root=os.getcwd() #获取当前工作路径
app=xw.App(visible=True,add_book=False) #创建Excel应用
wb=app.books.open(root+r'/data.xlsx',read_only=False) #打开数据文件返回工作簿对象
sht=wb.sheets('Sheet1') #获取指定工作表对象
#柱状图
sht.api.Range('A2:B7').Select() #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlColumnClustered,20,20,350,250,True)
cht=shp.Chart #获取图表
glow=cht.SeriesCollection(1).Format.Glow #添加发光特效,返回发光对象
glow.Color.ObjectThemeColor=1 #msoThemeColorAccent1颜色
glow.Color.Brightness=0 #亮度
glow.Transparency=0.6 #透明度
glow.Radius=8 #半径
#线形图
sht.api.Range('A2:C11').Select() #数据
shp2=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlLine,30,20,350,250,True)
cht2=shp2.Chart #添加图表
glow2=cht2.SeriesCollection(1).Format.Glow #给序列1添加发光特效,返回发光对象
glow2.Color.ObjectThemeColor=1 #msoThemeColorAccent1颜色
glow2.Color.Brightness=0 #亮度
glow2.Transparency=0.6 #透明度
glow2.Radius=5 #半径
glow3=cht2.SeriesCollection(2).Format.Glow #给序列2添加发光特效
glow3.Color.ObjectThemeColor=1 #msoThemeColorAccent1
#glow3.Color.TintAndShade=0
glow3.Color.Brightness=0
glow3.Transparency=0.6
glow3.Radius=8
运行代码生成图1-30和图1-31。
图1-31 给折线添加发光特效
特效:边缘柔化
Excel可以给图表中的二维对象添加边缘柔化特效。
本例创建简单柱状图,给它添加边缘柔化特效。完整代码见:Samples->ch04 美化Excel图表->23 特效:边缘柔化->py.py。
root=os.getcwd() #获取当前工作路径
app=xw.App(visible=True,add_book=False) #创建Excel应用
wb=app.books.open(root+r'/data.xlsx',read_only=False) #打开数据文件返回工作簿对象
sht=wb.sheets('Sheet1') #获取指定工作表对象
sht.api.Range('A2:B7').Select() #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlColumnClustered,20,20,350,250,True)
cht=shp.Chart #获取图表
shadow=cht.SeriesCollection(1).Format.SoftEdge.Radius=3 #边缘柔化
运行代码生成图1-32。
特效:三维效果
Excel可以给图表中的某些对象添加三维特效。1.4.3小节介绍的光照和材质是三维特效的一部分。此外还可以改变三维对象顶部和底部的形状及其宽度和高度。
本例创建简单柱状图,给它添加三维特效。完整代码见:Samples->ch04 美化Excel图表->24 特效:三维效果->py.py。
root=os.getcwd() #获取当前工作路径
app=xw.App(visible=True,add_book=False) #创建Excel应用
wb=app.books.open(root+r'/data.xlsx',read_only=False) #打开数据文件返回工作簿对象
sht=wb.sheets('Sheet1') #获取指定工作表对象
sht.api.Range('A2:B7').Select() #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlColumnClustered,20,20,350,250,True)
cht=shp.Chart #获取图表
threed=cht.SeriesCollection(1).Format.ThreeD #添加三维效果
threed.BevelTopType=3 #柱面顶部斜面类型
threed.BevelTopInset=6 #顶部斜面厚度
threed.BevelTopDepth=6 #顶部斜面深度
threed.PresetMaterial=2 #使用预设材质
threed.LightAngle=60 #设置光照角度
threed.PresetLighting=1 #设置预设光照
运行代码生成图1-33。