【问题标题】:Delphi automation resize chartDelphi 自动调整图表大小
【发布时间】:2014-07-26 01:30:22
【问题描述】:

我有一个通过自动化生成的 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);

这就是我将 Excel 生成的图表添加到 Word 中的方式。 唯一的问题是图表太大了,我需要把它变小,这样在没有用户交互的情况下更适合word文档

我尝试用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);

但是,显然,对于 Delphi:"Shapes" is not a method 所以这种方式也不行。

如果我改变了

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

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

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

请帮忙。

谢谢

【问题讨论】:

  • 您可能会发现早期绑定的 COM 在这里很有用。您至少有一个接口声明,其中列出了所有可用的道具和方法。
  • 你的意思是使用 Excel_TLB 和 Word_TLB ?
  • 是的。它至少明确了使用什么语法来深入挖掘对象模型。
  • 不幸的是,我找不到关于在 TLB 文件中调整大小的参考。我在问问题之前做了搜索...
  • TLB 引导我找到解决方案。我查看了Shapes接口的属性和方法。

标签: excel vba delphi automation ms-word


【解决方案1】:

您可以像这样访问形状:

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

【讨论】:

  • 如果你阅读了我上面的问题,你会看到我已经尝试过了,调试器说:“形状”不是一种方法
  • 您阅读了我上面的答案,您会发现我的代码与您尝试的不同。
  • 我很抱歉。你说的对。而你刚刚拯救了我的一天。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
相关资源
最近更新 更多