繁体   English   中英

Delphi 自动调整图表大小

[英]Delphi automation resize chart

我有一个通过自动化生成的 word 文档。 我需要在此文档中放置一个图表(在 Excel 中生成),并调整图表的大小,使其不会超出文档的边距。 我怎样才能做到这一点? Visual Basic 在录制宏时不记录此活动,因此我不知道如何继续。

有什么想法吗?

我的做法是:

var
MsWord,E:OleVariant;
name:Variant;
...
try
    MsWord := GetActiveOleObject('Word.Application');
  except
    try
      MsWord := CreateOleObject('Word.Application');
      MsWord.Visible := False;
    except
      Exception.Create('Error');
    end;
  end;
MSWord.Documents.Add;
MSWord.Selection.TypeText('some text');
...
E:=CreateOleObject('Excel.Application');
E.Workbooks.Add;
E.ActiveWorkbook.Sheets.Item[1].Select;
name:=E.Charts.Add.Name;
E.Charts.Item[name].ChartType:=1;
E.ActiveWorkbook.Charts.Item[name].SetSourceData(Source:=E.ActiveWorkbook.Sheets.Item[1].Range['A1:B6'],PlotBy:=2);

E.ActiveWorkbook.Charts.Item['Chart1'].Select;
E.Selection.Copy;
MSWord.Selection.PasteSpecial(,,,,wdPasteOleObject);

这就是我将 Excel 中生成的图表添加到 Word 的方式。 唯一的问题是图表太大了,我需要让它更小,这样它在没有用户交互的情况下更适合 Word 文档

我试图记录在 word 中完成的调整大小,宏说:

ActiveDocument.Shapes("Object 2").Select
Selection.ShapeRange.ScaleWidth 0.81, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 0.81, msoFalse, msoScaleFromTopLeft

所以我试过:

  MSWord.ActiveDocument.Shapes('Object 2').Select;
  MSWord.Selection.ShapeRange.ScaleWidth(0.51, 0, 0);
  MSWord.Selection.ShapeRange.ScaleHeight(0.51, 0, 0);

但是,显然,对于 Delphi: "Shapes" is not a method因此它也不能以这种方式工作。

如果我改变

 MSWord.ActiveDocument.Shapes('Object 2').Select;

 MSWord.ActiveDocument.Shapes['Object2'].Select;

然后我得到: "Item" is not a property

请帮忙。

谢谢

您可以像这样访问形状:

MsWord.ActiveDocument.Shapes.Item('Object 2').Select;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM