我所接触的Office Web Components(OWC)

因为项目的关系,需要将数据以柱状图进行呈现,因为使用一般的ASP画图较为繁琐,找到了OWC,向它请教,但它只教给我VBScript的方法,至于delphi中ASP的写法,只有teach myself 了。万事不怕难。历程如下:

首先定义两个记录类型的数组,为图例和柱状的数据做准备

//定义记录型数组(记录标签,最多为两个)
type
  TOWCLabelData =record
    LabelCaption : string;
end;
//定义记录型数组(记录数据项目,最多为两个)
type
  TOWCRecordData =record
    XAxesName : string;
    XAxesValue1 : string;
    XAxesValue2 : string;
end;

  OWCRecordData : array of TOWCRecordData;//SetLength(Data.OWCRecordData,intLength);
  OWCLabelData : array of TOWCLabelData;//SetLength(Data.OWCRecordData,intLength);

以下为实际过程的实现

{
根据传递变体数组,显示的维数,是否显示图例参数生成变体返回值.
应可以生成X轴类别名称为多个,项目名称为一个,标签可以设置多个
FColumCount对应 X轴类别数量 ,图表默认有一个图例,如FColumCount大于1
则添加第二个图例
数据的填充使用两个记录类型的数组,使用时,将数据填充到数组中
数组说明
1.TOWCLabelData =record 定义记录型数组(记录标签,最多为两个)
    LabelCaption : string;标签数据
2.TOWCRecordData =record 定义记录型数组(记录数据项目,最多为两个)
    XAxesName : string;  X轴项目名称
    XAxesValue1 : string; X轴第一列数据
    XAxesValue2 : string; X轴第二列数据
参数说明
FTitleCaption: 图表标题
FHasLegend:是否显示标签
FLabelCount:X轴显示每一个项目数据列数
}

function  TDataModule1.BuildOWCVarientData(FTitleCaption : Variant;FHasLegend : boolean;FLabelCount : integer) : Variant;
var
  ChartSpace1 : OleVariant;
  cht  : variant;
  c  : variant;
  dl,categoryAxis : variant;
  LegendData : Variant;//标签数据
  XAxesName : Variant;//X轴项目名称
  XAxesData : Variant;//X轴数据
  intNum : integer;
begin                    // cht.Type = c.chChartTypePie '设置图表类型为饼图
 
  try
    ChartSpace1 :=CreateOleObject('OWC11.ChartSpace');
    cht :=ChartSpace1.Charts.Add;

    c :=ChartSpace1.Constants;
    ChartSpace1.HasChartSpaceTitle := True;
    ChartSpace1.ChartSpaceTitle.Caption :=FTitleCaption; //'设置图表工作区标题内容

    ChartSpace1.ChartSpaceTitle.Font.Bold := True;
    ChartSpace1.ChartSpaceTitle.Font.Color := 'blue'; //设置图表工作区标题的颜色
    ChartSpace1.ChartSpaceTitle.Font.Italic := False; //设置图表工作区标题是否为斜体
    ChartSpace1.ChartSpaceTitle.Font.Name := '隶书'; //设置图表工作区标题内容的字体
    ChartSpace1.ChartSpaceTitle.Font.Size := 18; //设置图表工作区标题内容的大小(单位:磅)
    ChartSpace1.ChartSpaceTitle.Font.Underline := c.owcUnderlineStyleSingle; //设置下划线属性
    cht.Axes[0].MajorUnit := 10; //设置Y轴刻度递增值


    if FHasLegend then
    begin
      LegendData :=varArrayCreate([0,9],varVariant);
      for intNum :=Low(OWCLabelData) to High(OWCLabelData) do
      begin
        LegendData[intNum] :=OWCLabelData[intNum].LabelCaption;
      end;
      cht.HasLegend :=FHasLegend; //指定图表工作区中含有图例
      cht.Legend.Font.Size := 9; //其他有关字体项的设置参见设置图表标题部分
      cht.Legend.Position := c.chLegendPositionBottom ;//设置图例对其方式
      cht.SetData(c.chDimSeriesNames, c.chDataLiteral,LegendData); //系列
    end;
    //创建Variant类型的数组
    XAxesName :=varArrayCreate([0,9],varVariant);
    XAxesData :=varArrayCreate([0,9],varVariant);
    //填充数据
    for intNum :=Low(OWCRecordData) to High(OWCRecordData) do
    begin
      XAxesName[intNum] :=OWCRecordData[intNum].XAxesName;
      XAxesData[intNum] :=OWCRecordData[intNum].XAxesValue1;
    end;

    cht.SetData(c.chDimCategories, c.chDataLiteral, XAxesName);//横项(分类轴)X轴 名称
    cht.SeriesCollection[0].SetData( c.chDimValues, c.chDataLiteral, XAxesData);//X轴 数据
    dl := cht.SeriesCollection[0].DataLabelsCollection.Add; //添加图例的数据标记
    if FLabelCount > 1 then
    begin
      for intNum :=Low(OWCRecordData) to High(OWCRecordData) do
      begin
        XAxesData[intNum] :=OWCRecordData[intNum].XAxesValue2;
      end;
      cht.SeriesCollection[1].SetData( c.chDimValues, c.chDataLiteral, XAxesData);
      dl :=cht.SeriesCollection[1].DataLabelsCollection.Add;//添加图例的数据标记
    end;

    dl.HasValue := True;
    dl.HasPercentage := False;
    dl.Font.Size := 9;
    dl.Font.Color := 'red';
    dl.Position := c.chLegendPositionRight;
    //设置纵向数值属性
    categoryAxis := cht.Axes[c.chAxisPositionBottom];
    categoryAxis.Font.Size := 9;
    //设置分类组属性
    categoryAxis := cht.Axes[c.chAxisPositionLeft];
    categoryAxis.Font.Size := 9;

    //cht.Type := c.chChartTypePie; //设置图表类型为饼图
    //cht.Type := c.chChartTypeColumnClustered; //设置图表类型为簇状柱
    //cht.Type := c.chChartTypeLineMarkers; //设置图表类型为折线图
    //cht.Type :=c.chChartTypeBarClustered3D;
    //cht.type :=c.chChartTypePie3D;
    Result :=ChartSpace1.GetPicture('GIF',750,420);
  finally
    ChartSpace1.Clear;
  end;

end;

需要说明的是,这段程序,比较有局限性,只能进行一个类型柱的显示。另外柱的个数也有所限制。但可以通过传递参数进行增减。同时OWC也可以直接连接数据源进行显示的,如Access等。但我没有进行实践。但通过以上的项目的实现,OWC在web图形显示方式上,有着比较实用的价值的,同时还可以显示折线和饼图。

但是对于三维效果的图象,不能用鼠标进行旋转,这应该是OWC以及我的一个遗憾吧。

22:47,又要工作了,今夜无眠

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值