Delphi Automation Cambiar el cuadro
-
21-12-2019 - |
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
Solución
Puede acceder a la forma como esta:
MsWord.ActiveDocument.Shapes.Item('Object 2').Select;