2014-06-05 53 views
2

我有一个word文档,我通过自动生成。我需要在此文档中放置一个图表(由Excel生成),并调整图表的大小,使其不超过文档的边距。我怎样才能做到这一点? Visual Basic在录制宏时不记录此活动,所以我不知道如何继续。德尔福自动化调整图表

有什么想法?

我的做法是:

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

所以我这是怎么添加到Word Excel中生成的图表。 唯一的问题是,图表太大,我需要使它更小,所以它会适合更好的文字文档,而无需用户交互

我试图记录在word中完成的大小调整,宏说:

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

所以我尝试:

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

但是,显然,德尔福:"Shapes" is not a method 所以也没有任何以这种方式工作。

如果我改变

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

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

然后我得到:"Item" is not a property

请帮助。

谢谢

+2

你可能会发现早期绑定COM用武之地了。您至少有一个接口声明,其中列出了所有可用的道具和方法。 –

+0

你的意思是使用Excel_TLB和Word_TLB? – user1137313

+0

是的。它至少可以清楚地说明用什么语法来深入挖掘对象模型。 –

回答

2

您可以访问的形状是这样的:

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

如果你阅读我的问题上面,你会看到我已经试过,调试器说:“形状”不是一种方法 – user1137313

+0

我看过我的答案上面你会看到我的代码与你尝试的不同。 –

+0

我的歉意。你是对的。而你刚刚救了我的一天。谢谢 – user1137313