Graphique de redimensionnement d'automatisation Delphi
-
21-12-2019 - |
Question
J'ai un document Word que je génère via l'automatisation.Je dois insérer un graphique (généré dans Excel) dans ce document et redimensionner le graphique afin qu'il ne dépasse pas les marges du document.Comment puis je faire ça?Visual Basic n'enregistre pas cette activité lors de l'enregistrement d'une macro, je n'ai donc aucune idée de la manière de procéder.
Des pensées?
Mon approche est la suivante :
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);
C'est ainsi que j'ajoute à Word un graphique généré dans Excel.Le seul problème est que le graphique est trop grand, je dois le réduire pour qu'il s'intègre mieux dans le document Word sans l'interaction de l'utilisateur.
J'ai essayé d'enregistrer le redimensionnement effectué dans Word, et la macro dit :
ActiveDocument.Shapes("Object 2").Select
Selection.ShapeRange.ScaleWidth 0.81, msoFalse, msoScaleFromTopLeft
Selection.ShapeRange.ScaleHeight 0.81, msoFalse, msoScaleFromTopLeft
alors j'ai essayé :
MSWord.ActiveDocument.Shapes('Object 2').Select;
MSWord.Selection.ShapeRange.ScaleWidth(0.51, 0, 0);
MSWord.Selection.ShapeRange.ScaleHeight(0.51, 0, 0);
Cependant, apparemment, pour Delphi : "Shapes" is not a method
Cela ne fonctionne donc pas non plus de cette façon.
Si je change
MSWord.ActiveDocument.Shapes('Object 2').Select;
à
MSWord.ActiveDocument.Shapes['Object2'].Select;
alors j'obtiens : "Item" is not a property
S'il vous plaît, aidez-moi.
Merci
La solution
Vous pouvez accéder à la forme comme ceci :
MsWord.ActiveDocument.Shapes.Item('Object 2').Select;