Gráfico de redimensionamento de automação Delphi
-
21-12-2019 - |
Pergunta
Tenho um documento Word que gero por meio de automação.Preciso colocar um gráfico (gerado no Excel) dentro deste documento, e redimensionar o gráfico para que não ultrapasse as margens do documento.Como eu posso fazer isso?O Visual Basic não registra essa atividade ao gravar uma macro, portanto não tenho ideia de como proceder.
Alguma ideia?
Minha abordagem é:
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);
Então é assim que adiciono ao Word um gráfico gerado no Excel.O único problema é que o gráfico é muito grande, preciso diminuí-lo para que caiba melhor no documento do Word sem a interação do usuário
Tentei gravar o redimensionamento feito em word, e a macro diz:
ActiveDocument.Shapes("Object 2").Select
Selection.ShapeRange.ScaleWidth 0.81, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 0.81, msoFalse, msoScaleFromTopLeft
então eu tentei:
MSWord.ActiveDocument.Shapes('Object 2').Select;
MSWord.Selection.ShapeRange.ScaleWidth(0.51, 0, 0);
MSWord.Selection.ShapeRange.ScaleHeight(0.51, 0, 0);
No entanto, aparentemente, para Delphi: "Shapes" is not a method
Então também não funciona assim.
Se eu mudar
MSWord.ActiveDocument.Shapes('Object 2').Select;
para
MSWord.ActiveDocument.Shapes['Object2'].Select;
então eu recebo: "Item" is not a property
Por favor ajude.
Obrigado
Solução
Você pode acessar a forma assim:
MsWord.ActiveDocument.Shapes.Item('Object 2').Select;