使用几何变换,可以利用已有图形快速得到新的图形或新的位置上的图形。利用Shape对象的属性,可以实现图形平移、旋转、缩放和翻转等几何变换操作。[大谦Excel,dqexcel点com]
图形平移
使用Shape对象的IncrementLeft方法,将该对象所表示的图形进行水平方向的平移。该方法有一个参数,参数的值大于0时图形向右移,值小于0时向左移。
使用Shape对象的IncrementTop方法,将该对象所表示的图形进行垂直方向的平移。该方法有一个参数,参数的值大于0时图形向下移,值小于0时向上移。
下面的例子创建一个添加水滴预设纹理的矩形区域,然后将该区域向右平移70个单位,向下平移50个单位。
【Excel VBA】
示例文件的存放路径为Samples\ch17\Excel VBA\图形平移.xlsm。
Sub Test()
Dim shp As Shape
Set shp = ActiveSheet.Shapes.AddShape(1, 100, 50, 200, 100) '矩形区域
shp.Fill.PresetTextured 5 '水滴预设纹理
shp.IncrementLeft 70 '右移70
shp.IncrementTop 50 '下移50
End Sub
运行过程,生成图形并进行平移。
【Python】
在Python Shell窗口输入:
>>> shp=sht.api.Shapes.AddShape(1, 100, 50, 200, 100) #矩形区域
>>> shp.Fill.PresetTextured(5) #水滴预设纹理
>>> shp.IncrementLeft(70) #右移70
>>> shp.IncrementTop(50) #下移50
平移前后的图形如图5-14和图5-15所示。
图5-14 平移前的图形 图5-15 平移后的图形
图形旋转
使用Shape对象的IncrementRotation方法实现图形的旋转。该方法绕Z轴旋转指定的角度。有一个参数,表示旋转的角度,以度为单位。为正值时顺时针方向旋转图形,为负值时逆时针方向旋转图形。
下面的例子创建一个添加水滴预设纹理的矩形区域,然后将该区域绕Z轴顺时针方向旋转30度。
【Excel VBA】
示例文件的存放路径为Samples\ch17\Excel VBA\图形旋转.xlsm。
Sub Test()
Dim shp As Shape
Set shp = ActiveSheet.Shapes.AddShape(1, 100, 50, 200, 100) '矩形区域
shp.Fill.PresetTextured 5 '水滴预设纹理
shp.IncrementRotation 30 '顺时针方向旋转30度
End Sub
运行过程,生成图形并进行旋转。
【Python】
在Python Shell窗口输入:
>>> shp=sht.api.Shapes.AddShape(1, 100, 50, 200, 100) #矩形区域
>>> shp.Fill.PresetTextured(5) #预设纹理
>>> shp.IncrementRotation(30) #顺时针方向旋转30度
图5-16和图5-17为旋转前后的矩形区域。
图5-16 旋转前的图形 图5-17 旋转后的图形
图形缩放
图形缩放又称为比例变换,是将给定的图形按照一定的比例放大或缩小。使用Shape对象的ScaleWidth方法和ScaleHeight方法可以指定水平方向和垂直方向的缩放比例,实现图形的缩放操作。
ScaleWidth方法和ScaleHeight方法都有3个参数,如表5-11所示。
表5-11 ScaleWidth方法和ScaleHeight方法的参数
| 名 称 | 必需/可选 | 数据类型 | 说 明 |
|---|---|---|---|
| Factor | 必需 | Single | 指定图形调整后的宽度与当前或原始宽度的比例 |
| RelativeToOriginalSize | 必需 | MsoTriState | 值为False时,相对于其当前大小进行缩放。 仅当指定的图形是图片或 OLE 对象时,才能将此参数指定为True |
| Scale | 可选 | Variant | MsoScaleFrom类型的常量之一, 指定缩放图形时, 该图形的哪一部分保持在原有的位置 |
Scale参数的值为MsoScaleFrom枚举类型常量,表示缩放以后,图形那部分保持原来的位置。该参数的取值如表5-12中所示。
表5-12 Scale参数的取值
| 名 称 | 值 | 说 明 |
|---|---|---|
| msoScaleFromBottomRight | 2 | 图形的右下角保持在原有的位置 |
| msoScaleFromMiddle | 1 | 图形的中点保持在原有的位置 |
| msoScaleFromTopLeft | 0 | 图形的左上角保持在原有的位置 |
下面创建一个椭圆区域,添加花岗岩纹理。然后对该区域图形水平方向缩小为原来宽度的0.75倍,垂直方向放大为原来高度的1.75倍。
【Excel VBA】
示例文件的存放路径为Samples\ch17\Excel VBA\图形缩放.xlsm。
Sub Test()
Dim shp As Shape
Set shp = ActiveSheet.Shapes.AddShape(9, 100, 50, 200, 100) '椭圆区域
shp.Fill.PresetTextured 12 '预设纹理,花岗岩
shp.ScaleWidth 0.75, False '宽度*0.75
shp.ScaleHeight 1.75, False '高度*1.75
End Sub
运行过程,生成图形并进行缩放。
【Python】
在Python Shell窗口输入:
>>> shp=sht.api.Shapes.AddShape(9, 100, 50, 200, 100) #椭圆区域
>>> shp.Fill.PresetTextured(12) #预设纹理,花岗岩
>>> shp.ScaleWidth(0.75,False) #宽度*0.75
>>> shp.ScaleHeight(1.75,False) #高度*1.75
缩放前后的图形如图5-18和图5-19所示。
图5-18 原始图形 图5-19 缩放以后的图形
图形翻转
图形的翻转也叫做图形的镜像变换,或对称变换。使用Shape对象的Flip方法实现图形的翻转。该方法是相对于水平对称轴或垂直对称轴作翻转的,它有一个参数,指定是水平翻转还是垂直翻转。水平翻转和垂直翻转对应的取值分别为0和1。
下面的例子创建一个矩形区域,为了便于对比,添加了木质纹理。然后对该区域进行水平翻转和垂直翻转操作。
【Excel VBA】
示例文件的存放路径为Samples\ch17\Excel VBA\图形翻转.xlsm。
Sub Test()
Dim shp As Shape
Set shp = ActiveSheet.Shapes.AddShape(1, 100, 50, 200, 100) '矩形区域
shp.Fill.PresetTextured 22 '预设纹理
shp.Flip 0 '水平翻转
shp.Flip 1 '垂直翻转
End Sub
运行过程,生成图形并进行翻转。
【Python】
在Python Shell窗口输入:
>>> shp=sht.api.Shapes.AddShape(1, 100, 50, 200, 100) #矩形区域
>>> shp.Fill.PresetTextured(22) #预设纹理
>>> shp.Flip(0) #水平翻转
>>> shp.Flip(1) #垂直翻转
翻转前的图形如图5-20所示。图5-21为原图形水平翻转后的图形。图5-22为水平翻转后的图形再垂直翻转后的结果。所以,当前翻转操作是针对前步变换结果进行的,而不是针对原图形。
图5-20 原图形 图5-21 水平翻转 图5-22 垂直翻转