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 methodCela 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

Était-ce utile?

La solution

Vous pouvez accéder à la forme comme ceci :

MsWord.ActiveDocument.Shapes.Item('Object 2').Select;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top