图片操作

图片也是组成图表的基本图形元素。常将图片用于面的填充,或直接在图表中添加图片作为标注。本节介绍图片的创建和几何变换。[大谦Excel,dqexcel点com]

添加图片

使用Shape对象的AddPicture方法从现有文件创建图片。 该方法返回一个表示新图片的Shape对象。该方法的语法格式为:

code.vba
sht.Shapes.AddPicture FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height

其中,sht为工作表。各参数的意义如表2-14中所示。

表2-14 AddPicture方法各参数的意义

名 称 必需/可选 数据类型 说 明
FileName 必需 String 图片文件名
LinkToFile 必需 MsoTriState 设置为False时,使图片成为文件的独立副本,不链接。设置为True时将图片链接到创建它的文件
SaveWithDocument 必需 MsoTriState 将图片与文档一起保存。使用False仅将链接信息存储在文档中。 使用True将链接的图片与插入到的文档一起保存。 如果LinkToFile的值为 False,则此参数必须为 True
Left 必需 Single 图片左上角相对于文档左上角的位置 (以磅为单位)
Top 必需 Single 图片左上角相对于文档顶部的位置(以磅为单位)
Width 必需 Single 图片的宽度, 以磅为单位 (输入-1 可保留现有文件的宽度)
Height 必需 Single 图片的高度, 以磅为单位 (输入-1 可保留现有文件的高度)

本示例将一张图片添加到图表坐标系中。完整代码见:Samples->ch05 创建新图表->44 添加图片->py.py。

code.vba
Sub CreateChart()
  ‘…
  x = ShapeX(cht, 100)
  y = ShapeY(cht, 50)
  w = cht.PlotArea.InsideWidth / (ax1.MaximumScale - ax1.MinimumScale) * 100
  h = cht.PlotArea.InsideHeight / (ax2.MaximumScale - ax2.MinimumScale) * 100
  cht.Shapes.AddPicture "D:\picpy.jpg", True, True, 100, 50, 100, 100
End Sub

效果如图2-48所示。

Document Image
\[\]

图2-48 创建图片

图片的几何变换

2.6节介绍了图形的几何变换,使用Shape对象提供的方法,可以对给定的图形进行平移变换、旋转变换、比例变换和对称变换。在实现方法上,图片几何变换的完全相同。

下面利用指定文件创建图片后,对它连续进行旋转变换和水平对称变换。完整代码见:Samples->ch05 创建新图表->45 图片的几何变换->py.py。

code.vba
Sub CreateChart()
  ‘…
  x = ShapeX(cht, 100)
  y = ShapeY(cht, 50)
  w = cht.PlotArea.InsideWidth / (ax1.MaximumScale - ax1.MinimumScale) * 100
  h = cht.PlotArea.InsideHeight / (ax2.MaximumScale - ax2.MinimumScale) * 100
  Set shp2 = cht.Shapes.AddPicture("D:\picpy.jpg", True, True, 100, 50, 100, 100)
  shp2.IncrementRotation 30
  shp2.Flip 0
End Sub

旋转变换和对称变换后的图片如图2-49所示。注意,对称变换是在前面旋转变换结果的基础上进行的,而不是针对原始图片。

Document Image
\[\]

图2-49 对图片作旋转变换

在图表中添加图片

图2-50将一组数据从大到小排序后,利用排序数据绘制简单柱状图。然后在图表中添加一张箭头图片,指示柱状图中柱面从高到低的下降趋势。

Document Image
\[\]

图2-50 带误差条的柱状图

图片导入图表中后,其位置和大小可能需要调整,就要用到2.7.2小节介绍的图片几何变换的知识。

下面的代码创建柱状图并添加箭头图片,然后将图片在水平方向和垂直方向上进行缩放变换,以调整到合适的大小。完整代码见:Samples->ch05 创建新图表->46 在图表中添加图片->py.py。

code.vba
Sub Test()
  ‘…
  DrawBar cht, CDbl(data(1, 1)), 1, 76, 200, 132, 0.5, False
  DrawBar cht, CDbl(data(2, 1)), 2, 76, 200, 132, 0.5, False
  DrawBar cht, CDbl(data(3, 1)), 3, 76, 200, 132, 0.5, False
  DrawBar cht, CDbl(data(4, 1)), 4, 76, 200, 132, 0.5, False
  DrawBar cht, CDbl(data(5, 1)), 5, 76, 200, 132, 0.5, False
  DrawBar cht, CDbl(data(6, 1)), 6, 76, 200, 132, 0.5, False
  Dim shp2 As Shape
  Dim x As Double
  Dim y As Double
  Dim w As Double
  Dim h As Double
  x = ShapeX(cht, 2.6)
  y = ShapeY(cht, 0.55)
  w = cht.PlotArea.InsideWidth / (ax1.MaximumScale - ax1.MinimumScale) * 4
  h = cht.PlotArea.InsideHeight / (ax2.MaximumScale - ax2.MinimumScale) * 0.4
  Set shp2 = cht.Shapes.AddPicture("d:\arrow.png", True, True, x, y, w, h)
  shp2.ScaleWidth 0.7, False
  shp2.ScaleHeight 0.7, False
End Sub

运行代码生成图2-50.。