26. 使用 JSON 数据实现自动化

您可以使用 JSON 中的数据复制起初创建为模板的图表,并为其提供新的数据表。您可以控制为了构造新的演示文稿而使用特定模板的顺序。也可以多次使用模板。

PowerPoint 模板和 JSON 数据都可以进行本地存储或远程存储。JSON 数据甚至可以由 Web 服务动态产生。

26.1
用于 think-cell 的 JSON 数据结构
26.2
使用 JSON 数据创建演示文稿
26.3
远程提供 JSON 数据
26.4
远程提供模板
26.5
远程处理 JSON 数据

26.1 用于 think-cell 的 JSON 数据结构

以下展示了用于 think-cell 的 JSON 数据示例,也可以在 think-cell 安装目录的子文件夹 sample.ppttc 的文件 ppttc 中找到该示例。JSON 可指定演示文稿将通过一连串模板而创建。它符合 ppttc/ppttc-schema.json 中的架构。

think-cell 自动化的示例 JSON 文件.

在根级别中是项的阵列。每一项都会指定其图表的模板文件和数据。可以串联不同的模板,可以多次使用单一模板。在最简单的情况下,单一模板仅使用一次,用于向该模板中包含的所有图表填入数据。

串联模板阵列中的每项都包含两个键: image. template image. data image. template 的值是包含 think-cell 图表(已将名称设为标识符)的 PowerPoint 文件的路径(请参阅 24. 自动化简介)。也可以按照远程提供 JSON 数据中所述,从远程位置取回模板文件。

键的值 image. data 键的值是模板中所含图表的数据表格(采用 JSON 格式)列表。列表中的每一项具有两个属性: image. name image.  table. image. name 会指定使用其名称的图表, image. table 将包含数据表格。

针对以下的值的结构: image. table 值的结构直接对应于未转置的数据表(其行表示系列,列表示类别)。对于默认图表,意味着将显示以下行顺序:

  1. 行以空单元格(null)开始,然后是具有类别名称的单元格。
  2. 具有 100% 值的行。若未使用 100% 值,会将空行指定为 image.  [].
  3. 存在多行,其中行的第一个单元格提供系列名称,随后的单元格包含数值。

若可为图表指定名称,则可在 JSON 中引用该图表。如需其特定数据表布局,请参阅相应各章,或打开图表的内部数据表进行参考。

注释:think-cell 数据表范围内的任何单元格可以包含任何类型的文本。若需要,也可以填写第一行的第一个单元格。

组成 table 键值的数据必须符合架构中设置的特定规则。table 键本身的值是阵列。子阵列表示数据表的行。使用空阵列 [] 可以指定空行。单元格的内容由此类子阵列中列出的元素描述。元素的顺序对应于数据表中列的顺序。必须使用 null 元素明确描述空单元格。必须使用其他键值对描述有内容的单元格。在此情况下,键会描述数据的类型,值会包含演示文稿中将显示的实际数据。支持三种不同的数据类型:

image. string,用于表示任何类型的文本。支持所有可打印的 Unicode (UTF-8) 字符。例如:{"string":"Echo"}

image. number,用于表示任何类型的数字。所用的小数点必须是点。例如:{"number":"5"}

image. date,用于表示日期。所需的格式是 YYYY-MM-DD。例如:{"date":"2016-09-04"}

对单元格内容进行任何格式设置(例如,指定日期格式)都必须在 PowerPoint 模板中完成。

对于命名的文本字段,该 table 元素仅包含一“行”中的一个“单元格”,因此您需要使用类似于以下段的 JSON 数组,该数字对于 data 元素中的每个命名文本字段都会出现一次:

{ 
  "name": "Title", 
  "table": [[{"string":"A slide title"}]] 
},

26.2 使用 JSON 数据创建演示文稿

JSON 数据文件的文件类型必须是 .ppttc。打开此类文件时:

  1. think-cell 会读取文件并检查其结构完整性。
  2. 将创建新的演示文稿。对于位于 JSON 文件顶级的每一项,新的演示文稿都会包含所指定模板的副本。
  3. 在模板副本中,根据 name 值所识别图表的数据表将替换为 table 值中的数据。会更新任何总计标签、标签放置位置和差异箭头值,或其他图表效果。

此后,将显示新的演示文稿。用户可以进一步编辑其内容并保存,或以其他任何方式使用。

您还可以在命令行上从 JSON 数据创建演示文稿:

ppttc input.ppttc -o output.pptx

可执行的 ppttc.exe 位于 think-cell 的安装文件夹中。调用 ppttc.exe 可轻松集成到自动化工作流中。

26.3 远程提供 JSON 数据

.ppttc 文件中的 JSON 数据也可以由 Web 服务远程生成,并在 Web 浏览器中供用户下载。请参阅在下文以及在 think-cell 安装目录的子文件夹 sample.html 的文件 ppttc 中提供的示例。

<!DOCTYPE html> 
<html> 
<body> 
 
<h1>ppttc test</h1> 
 
<button type="button" onclick="myFunction()"> 
Download .ppttc 
</button> 
 
<a id="downloader" style="display:none"/> 
 
<script> 
function myFunction() { 
  var obj = [ 
    { 
      template : "https://static.think-cell.com/ppttc/template.pptx", 
      data: [ 
        { 
          name: "Chart1", 
          table: [ 
            [null, {string:"Alpha"},{string:"Bravo"},{string:"Charlie"}], 
            [], 
            [{string:"Delta"},{number:1},{number:2},{number:3}], 
            [{string:"Echo"},{number:4},{number:5},{number:6}] 
          ] 
        }, 
        { 
          name: "Chart2", 
          table: [ 
            [null, {date:"2016-09-03"},{date:"2016-09-04"},{date:"2016-09-05"}], 
            [], 
            [{string:"Foxtrot"},{number:7},{number:8},{number:9}], 
            [{string:"Gulf"},{number:10},{number:11},{number:12}] 
          ] 
        } 
      ] 
    } 
  ]; 
  var elemDownloader = document.getElementById("downloader"); 
  elemDownloader.setAttribute("href","data:application/vnd.think-cell.ppttc+json;charset=utf-8," 
    + encodeURIComponent(JSON.stringify(obj))); 
  elemDownloader.setAttribute("download", "sample.ppttc"); 
  elemDownloader.click(); 
} 
</script> 
 
</body> 
</html>

在我们的示例中,用户请求下载时,对 JSON 数据进行了动态编译。示例嵌入的是静态数据,您当然也可以使用网站上用户提供的参数,通过其他数据源动态创建 JSON。

下载 .ppttc 文件时,用户可以采用对其他下载文件的相似方式,选择保存文件或打开文件。打开文件时,JSON 数据用于按照 使用 JSON 数据创建演示文稿 中所述创建新的演示文稿。

26.4 远程提供模板

也可以通过远程服务器提供具有 think-cell 图表的模板文件。在此情况下,键 template 的值是 URL,而不是本地路径,如以上远程 JSON 示例所示。该 URL 可以指定作为协议的 http、用于安全连接的 https,或在打开 .ppttc 文件的系统上有效的其他任何协议。

对引用远程模板的 .ppttc 文件进行处理时,PowerPoint 将取回模板文件。因此,打开 .ppttc 文件的用户需要具有远程模板的适当访问权限。

若 JSON 数据由 Web 服务远程生成,且模板也已远程存储,则在用户的计算机上只需要进行标准 think-cell 安装,即可使用含 think-cell 图表且动态生成的 PowerPoint 演示文稿。

26.5 远程处理 JSON 数据

您能以服务器的形式运行 think-cell 的 JSON 数据处理功能。在此情况下,将在远程服务器上合并 JSON 数据和模板以创建 PowerPoint 演示文稿。服务器接受 JSON 片段作为输入,并提供合并后的 PowerPoint 演示文稿作为输出,两者都通过 HTTP 来实现。

若要启动 think-cell 服务器,请前往安装文件夹,然后运行 tcserver.exe。将打开以下对话框:

think-cell 服务器设置对话框.

启动服务器:

  1. 在 URL 表单中的 UrlPrefix 字段内指定服务器在侦听时使用的 IP 地址和端口。URL 的第一部分会确定将使用未加密的 HTTP 还是已加密的 HTTPS。
  2. 单击应用按钮。
  3. 在显示的“用户帐户控制 (UAC)”对话框中确认对系统的配置更改。

在窗口底部的日志字段中,您将看到确认信息,该信息将说明服务器已启动并且现在正在 URL 上进行侦听。在日志字段中,您还可以看到所有客户端请求及服务器响应。

think-cell 服务器对话框(含日志消息).

若要停止服务器,请单击删除按钮。若要更改 URL,请在 UrlPrefix 字段中输入新的 URL,然后单击应用

服务器接受 JSON 数据作为类型为 MIME 的 HTTP POST 请求,application/vnd.think-cell.ppttc+json并以 PowerPoint 文件提供响应。

若要开始使用服务器,请复制 UrlPrefix 字段中的 URL,然后在浏览器中将其打开。将打开示例页。服务器会进行自我记录,示例页的 HTML 源代码显示了其用法以及详细的示例。示例包含以下元素:

  • 按钮的 HTML 标记,在受到点击时,按钮会调用某种方法使用 XMLHttpRequest 与服务器进行通信。
  • 静态 JSON 片段。在您使用时,通常会动态生成 JSON 数据。
  • 某 JavaScript 函数,可将 JSON 数据发送到服务器。它会生成对静态 JSON 数据的 HTTP POST 请求。将以下载文件的形式向浏览器展示服务器响应。

生成 HTTP POST 请求以及将服务器响应另存成 PowerPoint 文件的任何其他方法也都有效。在您使用时,使用 JavaScript 并不限于此目的。

分享