使用 ONLYOFFICE 宏将形状替换为图表

2022年11月23日作者: Alina

演示文稿已经成为我们生活的重要组成部分。无论是商务会议还是学校的项目,我们都要使用演示文稿,向观众呈现我们的想法。可是,要给演示文稿中的 100 张幻灯片调整格式,可不是件轻松的事儿。在本篇博文中,我们来向您展示如何使用 ONLYOFFICE 宏来处理这项任务。

Use ONLYOFFICE macro to replace shapes with charts

我们小小的宏可将每张幻灯片上的形状替换为图表。在开始之前,我们先来详细说明一下这些元素的定位。与可以通过索引访问行和列的电子表格不同,我们可以仅通过其在幻灯片上的位置,即可确定演示文稿元素的位置。这些元素被放置在彼此的上面,也就意味着,我们可以通过将所有元素推入一个数组并对其进行迭代,即可定位到它们。

关于 ONLYOFFICE 宏

如果您是一名资深 Microsoft Excel 用户,那么相信您已对于 VBA 宏非常熟悉了。这些宏是帮助您自动执行日常任务的小型脚本。无论是重构数据,还是在单元格区域中插入多个值。ONLYOFFICE 宏的基础是 JavaScript 语法与文档生成器 API 方法。基于 JavaSript 的宏易于使用,具有跨平台特性且十分安全。这就使得其与 VBA 相比有着显著的优势。

ONLYOFFICE 文档免费在线宏课程

近期,我们将开始发布有关 ONLYOFFICE 解决方案的免费视频课程。首个视频课程将关注 ONLYOFFICE 文档中的宏,现已在 YouTube 上提供。

本课程分为 4 节,每节时长大约在 5-10 分钟。您将了解宏的工作原理,以及一些实际的例子。为了方便起见,我们还在视频描述中添加了时间戳 – 只需点击一下即可转到您感兴趣的主题。

阅读这篇文章,了解更多。

构建宏

这样,我们首先使用 Api.GetPresentation 方法来定位当前展示的内容:

var oPresentation = Api.GetPresentation();

然后,我们添加一个 for-loop,在演示文稿中的每张幻灯片中迭代。因此这里 i 是幻灯片的总页数。我们通过将其作为索引传递,来获取每张幻灯片:

var oPresentation = Api.GetPresentation();
var oPresentation = Api.GetPresentation();
for (let i = 0; i < 10; i++) {
    var oSlide = oPresentation.GetSlideByIndex(i);
}

然后,我们再执行 GetAllShapes 方法。它会收集幻灯片上的所有形状,并将其以阵列的形式返回:

var oPresentation = Api.GetPresentation();
for (let i = 0; i < 10; i++) {
    var oSlide = oPresentation.GetSlideByIndex(i);
    var aShape  = oSlide.GetAllShapes();
}

现在我们需要将形状从幻灯片中移除。形状和绘图继承相同的变量,这样我们就可以使用 Delete 方法,将形状或图片从幻灯片中移除。在我们的例子中,形状会被放置在底部。因此,我们将 0 作为索引进行 pass,移除所有底部的元素:

var oPresentation = Api.GetPresentation();
for (let i = 0; i < 10; i++) {
    var oSlide = oPresentation.GetSlideByIndex(i);
    var aShape  = oSlide.GetAllShapes();
      aShape[0].Delete();
}

然后,我们通过实施 APi.CreateChart 方法来添加一个图表,在参数中指定显示的图表样式和数据:

 var oChart = Api.CreateChart("bar3D", [
  [200, 240, 280],
  [250, 260, 280]
  ], ["Projected Revenue", "Estimated Costs"], [2014, 2015, 2016], 4051300, 2347595, 24);

然后,我们来设置幻灯片的大小和位置。在这个例子中,我们将图表做得更小,将其居中放置。这样,它就不会与文本相互重叠。我们会通过执行 AddObject 方法将图表插入幻灯片中:

oChart.SetSize(150 * 36000, 90 * 36000);
oChart.SetPosition(3267200, 1000000);
oSlide.AddObject(oChart);

所有的宏代码如下:

(function()
{
    var oPresentation = Api.GetPresentation();
for (let i = 0; i < 10; i++) {
    var oSlide = oPresentation.GetSlideByIndex(i);
    var aShape = oSlide.GetAllShapes();
     aShape[0].Delete();
    var oChart = Api.CreateChart("bar3D", [
       [200, 240, 280],
    [250, 260, 280]
       ], ["Projected Revenue", "Estimated Costs"], [2014, 2015, 2016], 4051300, 2347595, 24);
     oChart.SetSize(150 * 36000, 90 * 36000);
     oChart.SetPosition(3267200, 1000000);
     oSlide.AddObject(oChart);
}
})();

现在,我们来运行宏,看看它是如何运行的!

我们希望这个小巧玲珑的宏在一些单调的任务上能对您有所帮助。ONLYOFFICE 宏的用途非常广泛,您可以按需做自定义。我们建议您充分利用我们的 API 方法,创建自己的宏。欢迎提出问题或分享您的想法,欢迎您与我们讨论、合作。祝好运!