Delphi Automation调整图表大小
-
21-12-2019 - |
题
我有一个通过自动化生成的单词文档。我需要在本文档中放置一个图表(在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中录制调整大小,宏说:
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;
. 不隶属于 StackOverflow