Pregunta

Tengo un documento de Word que genero a través de la automatización.Necesito poner un gráfico (generado en Excel) dentro de este documento, y cambiar el tamaño de la tabla para que no exceda los márgenes del documento.¿Cómo puedo hacer eso?Visual Basic no registra esta actividad al grabar una macro, por lo que no tengo idea de cómo proceder.

¿Alguna idea?

Mi enfoque es:

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

Entonces, así es como agrego a la palabra un gráfico generado en Excel. El único problema es que la tabla es demasiado grande, necesito hacerlo más pequeño, por lo que encajaría mejor en el documento de Word sin la interacción del usuario

Intenté grabar el cambio de tamaño realizado en Word, y la macro dice:

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

Así que lo intenté:

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

Sin embargo, aparentemente, para Delphi: "Shapes" is not a method Así que tampoco funciona de esta manera.

si cambio

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

a

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

Entonces recibo: "Item" is not a property

Ayuda.

Gracias

¿Fue útil?

Solución

Puede acceder a la forma como esta:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top