Domanda

Ho un documento di word che generò attraverso l'automazione.Ho bisogno di mettere un grafico (generato in Excel) all'interno di questo documento e ridimensionare il grafico in modo che non superi i margini del documento.Come posso fare ciò?Visual Basic non registra questa attività durante la registrazione di una macro, quindi non ho idea su come procedere.

Qualche idea?

Il mio approccio è:

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);
.

Quindi è così che aggiungo a scrivere un grafico generato in Excel. L'unico problema è che il grafico è troppo grande, ho bisogno di renderlo più piccolo, quindi si adatterebbe meglio nel documento di parole senza l'interazione dell'utente

Ho provato a registrare il ridimensionamento fatto in Word, e la macro dice:

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

Così ho provato:

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

Tuttavia, a quanto pare, per Delphi: "Shapes" is not a method Quindi non funziona in questo modo.

Se cambio

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

a

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

Allora ottengo: "Item" is not a property

Aiuto.

Grazie

È stato utile?

Soluzione

È possibile accedere alla forma come questa:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top