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 methodEntã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

Foi útil?

Solução

Você pode acessar a forma assim:

MsWord.ActiveDocument.Shapes.Item('Object 2').Select;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top