使用 JSON 数据实现自动化

使用 JavaScript 对象表示法 (JSON) 自动创建 think-cell 演示文稿。借助 think-cell JSON 自动化,您可以执行以下操作:

  • 用数据(例如,幻灯片标题和图表)填充 PowerPoint 模板
  • 重复使用和重新排序模板以创建新的演示文稿
  • 使用来自本地或远程来源的 JSON 数据和 PowerPoint 模板
  • 通过 Web 服务将实时数据转化为新的演示文稿

JSON 文件结构

本节介绍了如何构建 JSON 文件。来自示例文件 sample.ppttc 的片段附带此说明。参见本节末尾的完整示例 (完整的 JSON 示例)。

在 think-cell 安装文件夹中,ppttc 文件夹包含以下文件:

  • JSON 架构 ppttc-schema.json
  • PowerPoint 模板 template.pptx
  • JSON 数据文件 sample.ppttc

文件 ppttc-schema.json 描述了使用 think-cell 创建 PowerPoint 演示文稿时 .ppttc 文件必须遵循的规则。

文件 template.pptx 包含已命名的元素(请参阅高级报告自动化)。模板可以有任意数量的幻灯片。

文件 sample.ppttc 指定:

  • think-cell 将用于创建新演示文稿的模板
  • 模板的显示顺序
  • 用于填写模板的 JSON 数据

指定模板、元素及其数据

示例 sample.ppttc 显示了表示 PowerPoint 演示文稿的阵列(请参阅完整的 JSON 示例)。

模板

阵列包含一系列对象,每个对象代表 PowerPoint 模板的一个副本。在新的演示文稿中,模板按您在阵列中指定的顺序显示。如果模板有多个幻灯片,您只能通过在 PowerPoint 中编辑模板来修改幻灯片顺序。

在阵列中,每个模板对象必须具有两个属性:templatedata

template

template 属性是字符串,用于指定要使用的 PowerPoint 模板。字符串可以是以下其中一项:

  • 如果您已本地存储模板,请在本地文件系统中指定模板的相对或绝对路径。在 Windows 上,目录分隔符必须是反斜杠 (\) — 在 JSON 中转义为双反斜杠 (\\);在 macOS 上,目录分隔符必须是斜杠 (/)。
  • 如果您已远程存储模板,请指定存储模板的 URL(请参阅远程提供模板)。

在最简单的情况下,如完整的 JSON 示例所示,字符串 template 只是 PowerPoint 模板的文件名,因为模板与 .ppttc 文件位于同一文件夹中。

"template": "template.pptx",
data

data 属性是指定以下内容的对象阵列:

  • 具有 AddRangeData 名称的图表和其他元素(请参阅高级报告自动化
  • 用于填充这些元素的数据

对象可以以任何顺序显示在 data 阵列中,无论 PowerPoint 模板中相应的元素的位置如何。

"data": [ ... ]

元素

data 阵列中的每个对象都具有两个属性:

  • name指定您在AddRangeData Name中分配的元素名称(请参阅)高级报告自动化
  • table指定用于填充元素的数据。

如果两个元素具有相同的名称,think-cell 会用相同的数据来填充它们。

table 值是阵列。阵列的结构取决于元素类型:

  • 对于自动化文本字段、哈维球或复选框,table阵列包含单个子阵列和单个对象。对象(例如文本字符串或数字)填充文本字段。
  • 对于图表或表格,table阵列包含表示元素数据表的子数组。
{
	"name": "RightChartTitle",
	"table": [[{"string": "Our orders (10K)"}]]
},
{
	"name": "LeftChart",
	"table": [
		[null, {"date": "2020-01-01"}, {"date": "2021-01-01"}, {"date": "2022-01-01"}, {"date": "2023-01-01"}, {"date": "2024-01-01"}, {"date": "2025-01-01"}],
		[{"string": "Market headroom"}, {"percentage": 46.5}, {"percentage": 47}, {"percentage": 45}, {"percentage": 45}, {"percentage": 41}, {"percentage": 40.5}],
		[],
		[{"string": "Competitor 1"}, {"percentage": 0.5}, {"percentage": 1}, {"percentage": 5}, {"percentage": 2}, {"percentage": 4}, {"percentage": 4.5}],
		[{"string": "Our brand"}, {"percentage": 53}, {"percentage": 52}, {"percentage": 50}, {"percentage": 53}, {"percentage": 55}, {"percentage": 55}]
	]
},

图表数据表结构

对于图表,table阵列中的每个子阵列代表图表数据表的一行。有关图表的特定数据表布局,请参阅用户手册中相应的章节,或打开图表的数据表进行参考(请参阅输入图表数据)。下面描述了默认图表行的结构,如 JSON 架构中所指定。

第一行

第一行是包含类别标签的子阵列。类别标签前面有一个空的第一个单元格 (null)。第一个单元格中的数据不会显示在图表中,因此实际上可以包含任何数据。

[null, {"date": "2020-01-01"}, {"date": "2021-01-01"}, {"date": "2022-01-01"}, {"date": "2023-01-01"}, {"date": "2024-01-01"}, {"date": "2025-01-01"}],

后续行

后续行是包含系列标签和图表数据点的子阵列。子阵列中元素的顺序对应于数据表行中单元格的顺序。行中的第一个单元格包含系列标签——通常是字符串。行中的后续单元格应包含数字,对于甘特图,应包含日期。

[{"string": "Market headroom"}, {"percentage": 46.5}, {"percentage": 47}, {"percentage": 45}, {"percentage": 45}, {"percentage": 41}, {"percentage": 40.5}],
[],
[{"string": "Competitor 1"}, {"percentage": 0.5}, {"percentage": 1}, {"percentage": 5}, {"percentage": 2}, {"percentage": 4}, {"percentage": 4.5}],
[{"string": "Our brand"}, {"percentage": 53}, {"percentage": 52}, {"percentage": 50}, {"percentage": 53}, {"percentage": 55}, {"percentage": 55}]

空行

若要指定空行,请使用空阵列 ([])。

在前面的片段中,空阵列会改变 think-cell 将 PowerPoint Theme 配色方案应用到图表系列的方式(请参阅图表填充方案)。配色方案将深绿色分配给第 3 行中的系列。通过将第 3 行留空,系列Competitor 1Our brand现位于第 4 行和第 5 行,配色方案分别为其分配浅蓝色和深蓝色。

可选行和列

在 PowerPoint 模板的图表数据表中,您可以添加或删除可选的行和列(请参阅编辑数据表布局)。这样做会影响 think-cell 解释相应行和列中的 JSON 数据的方式。

例如,如果您在图表数据表中添加 100%= 行,think-cell 会将第二行 JSON 数据解释为总计,再根据总计计算百分比。如果省略100%=行,如此示例所示,think-cell 会将第二行中的 JSON 数据解释为普通数据点。

下表总结了常见的可选行和列、这些行和列在数据表中的位置及这些行和列的默认设置。若要检查特定图表的数据布局,请双击图表以打开其数据表。

Option

Contents

Datasheet position

Default setting

Series

系列标签

第 1 列

已选择

Category

类别标签

第 1 行

已选择

100%=

用于计算百分比的总计

第 2 行(如果选择了“Category”)

第 1 行(如果未选择“Category”)

未选择

自动化文本字段、哈维球和复选框

使用 JSON 数据填充自动化文本字段、单个哈维球和单个复选框时,think-cell 预期一个table阵列包含一个单元格。在table阵列中,单元格表示为包含单个对象的单个子阵列。

{
	"name": "SlideTitle",
	"table": [[{"string": "Competition: Germany"}]]
},

如果哈维球或复选框是表格的一部分,只需在相应的表格单元格中指定元素的内容。

单元格数据类型

在 .ppttc 文件中,单元格可以包含以下类型的数据。

Data type

Key

Example

Notes

文本

string

{"string": "Our brand"}

支持所有可打印的 Unicode (UTF-8) 字符。

数字

number

{"number": 12.5}

小数分隔符必须是点 (.)。

日历日期

date

{"date": "2024-01-01"}

所需格式:"YYYY-MM-DD"(ISO 8601)

百分比

percentage

{"percentage": 50.5}

小数分隔符必须是点 (.)。请勿包含百分号 (%)。

数据表单元格填充颜色

fill

十六进制:{"number": 12, "fill": "#ff0000"}

RGB:{"number": 12, "fill": "rgb(255,0,0)"}

fill及其十六进制或 RBG 值添加到其他键。

若要将数据表填充颜色应用到图表功能,请在 PowerPoint 模板中选择“Use Datasheet Fill”(请参阅图表填充方案)。

空单元格

不适用

null

请勿在引号中包含null

完整的 JSON 示例

参见下面来自 sample.ppttc 的完整 JSON 示例:

[
	{
		"template": "template.pptx",
		"data": [
			{
				"name": "SlideTitle",
				"table": [[{"string": "Competition: Germany"}]]
			},
			{
				"name": "LeftChartTitle",
				"table": [[{"string": "Market share (2020–2025)"}]]
			},
			{
				"name": "RightChartTitle",
				"table": [[{"string": "Our orders (10K)"}]]
			},
			{
				"name": "LeftChart",
				"table": [
					[null, {"date": "2020-01-01"}, {"date": "2021-01-01"}, {"date": "2022-01-01"}, {"date": "2023-01-01"}, {"date": "2024-01-01"}, {"date": "2025-01-01"}],
					[{"string": "Market headroom"}, {"percentage": 46.5}, {"percentage": 47}, {"percentage": 45}, {"percentage": 45}, {"percentage": 41}, {"percentage": 40.5}],
					[],
					[{"string": "Competitor 1"}, {"percentage": 0.5}, {"percentage": 1}, {"percentage": 5}, {"percentage": 2}, {"percentage": 4}, {"percentage": 4.5}],
					[{"string": "Our brand"}, {"percentage": 53}, {"percentage": 52}, {"percentage": 50}, {"percentage": 53}, {"percentage": 55}, {"percentage": 55}]
				]
			},
			{
				"name": "RightChart",
				"table": [
					[null, {"date": "2020-01-01"}, {"date": "2021-01-01"}, {"date": "2022-01-01"}, {"date": "2023-01-01"}, {"date": "2024-01-01"}, {"date": "2025-01-01"}],
					[{"string": "Pending"}, {"number": 0, "fill": "#ff0000"}, {"number": 0, "fill": "#ff0000"}, {"number": 0, "fill": "#ff0000"}, {"number": 0, "fill": "#ff0000"}, {"number": 0, "fill": "#ff0000"}, {"number": 14, "fill": "#ff0000"}],
					[null, {"number": 709}, {"number": 712}, {"number": 710}, {"number": 700}, {"number": 760}, {"number": 747}]
				]
			}
		]
	},
	{
		"template": "template.pptx",
		"data": [
			{
				"name": "SlideTitle",
				"table": [[{"string": "Competition: Canada"}]]
			},
			{
				"name": "LeftChartTitle",
				"table": [[{"string": "Market share (2022–2025)"}]]
			},
			{
				"name": "RightChartTitle",
				"table": [[{"string": "Our orders (1K)"}]]
			},
			{
				"name": "LeftChart",
				"table": [
					[null, {"date": "2022-01-01"}, {"date": "2023-01-01"}, {"date": "2024-01-01"}, {"date": "2025-01-01"}],
					[{"string": "Market headroom"}, {"percentage": 34}, {"percentage": 38}, {"percentage": 41}, {"percentage": 42}],
					[{"string": "Competitor 2"}, {"percentage": 31}, {"percentage": 17}, {"percentage": 15}, {"percentage": 14}],
					[{"string": "Competitor 1"}, {"percentage": 20}, {"percentage": 10}, {"percentage": 9}, {"percentage": 7}],
					[{"string": "Our brand"}, {"percentage": 15}, {"percentage": 35}, {"percentage": 35}, {"percentage": 37}]
				]
			},
			{
				"name": "RightChart",
				"table": [
					[null, {"date": "2022-01-01"}, {"date": "2023-01-01"}, {"date": "2024-01-01"}, {"date": "2025-01-01"}],
					[{"string": "Pending"}, {"number": 0, "fill": "#ff0000"}, {"number": 0, "fill": "#ff0000"}, {"number": 0, "fill": "#ff0000"}, {"number": 15, "fill": "#ff0000"}],
					[null, {"number": 250}, {"number": 401}, {"number": 481}, {"number": 476}]
				]
			}
		]
	}
]

使用 JSON 数据创建演示文稿

think-cell 安装后,就会指示操作系统使用 think-cell 打开 .ppttc 文件。若要在文件资源管理器 (Windows) 或访达 (macOS) 中使用 think-cell 打开 JSON 文件(例如,通过双击),请使用 .ppttc 扩展名。

打开 JSON 文件时,think-cell 会执行以下操作:

  1. think-cell 读取文件并检查文件是否存在错误。
  2. think-cell 创建新的演示文稿。演示文稿包含 JSON 文件中顶层阵列中指定的幻灯片模板的副本。
  3. 在模板副本中,think-cell 会用相应的数据(在 table 中指定)填充元素(用 name 来标识)。元素会相应地更新。
  4. 新的演示文稿将在 PowerPoint 中打开。您可以保存或进一步编辑演示文稿。

从命令行创建演示文稿

仅限 Windows

通过输入以下内容,根据命令行中的 JSON 数据创建演示文稿:

 PPTTC_PATH PPTTC_INPUT -o PPTX_OUTPUT 

替换以下内容:

  • PPTTC_PATHppttc.exe 的路径
  • PPTTC_INPUT:.ppttc 文件的路径
  • PPTX_OUTPUT:您创建的 .pptx 文件的名称,前跟文件的保存路径

可执行文件 ppttc.exe 位于 think-cell 安装文件夹的 ppttc 中。在自动化脚本中调用 ppttc.exe,以创建新的 PowerPoint 演示文稿。

远程提供 JSON 数据

为服务器上的 .ppttc 文件远程生成 JSON 数据。若要创建新的演示文稿,用户可从网页浏览器下载 .ppttc 文件,然后使用 think-cell 打开该文件。

如需关于如何使用服务器生成和下载 JSON 数据的举例说明,请参阅 think-cell 安装文件夹中的 /ppttc/sample.html。文件 sample.html 包含以下元素:

  • 按钮的 HTML 标记,单击该按钮即会对 JSON 数据进行动态编译
  • 一些静态 JSON 数据。在典型用例中,JSON 数据来自其他来源。
  • 某 JavaScript 函数,可将 .ppttc 文件下载到用户的计算机

用户下载 .ppttc 文件后,可以保存或打开该文件。用户打开文件时,think-cell 会使用 JSON 数据创建新的演示文稿(请参阅使用 JSON 数据创建演示文稿)。

远程提供模板

若要通过服务器提供 PowerPoint 模板,请执行以下操作:

  • 在 JSON 文件中,提供 URL 而不是 template 密钥的本地路径。URL 协议可以是 HTTP 或 HTTPS。
  • 确保打开 .ppttc 文件的用户有权访问远程模板。

只需在用户的计算机上进行标准 think-cell 安装,就足以使用远程 JSON 数据和模板来生成 think-cell 演示文稿。

远程创建演示文稿

设置自动化工作流程,在这些工作流程中,用户下载包含自定义数据的 think-cell 演示文稿。用户只需使用网页浏览器即可下载演示文稿,而无需在计算机上安装 think-cell。

设置这些工作流程需要 think-cell 服务器,该服务器仅可在 Windows 上运行。think-cell 服务器将 JSON 数据作为输入,将 PowerPoint 演示文稿作为输出。

运行 think-cell 服务器

仅限 Windows

若要启动 think-cell 服务器,请按照以下步骤操作:

  1. 在 think-cell 安装文件夹中,运行 tcserver.exe
  2. 输入用于指定服务器应侦听的 IP 地址和端口的 URL。服务器协议是 HTTP 或 HTTPS。
  3. 选择“Register URL”。
  4. 出现提示时,允许 think-cell 服务器对您的设备进行更改。

若要停止 think-cell 服务器,请按照以下步骤操作:

  1. 选择“Unregister URL”。
  2. 出现提示时,允许 think-cell 服务器对您的设备进行更改。

Log”字段显示以下内容:

  • 确认服务器已开始或停止侦听 URL
  • 所有客户端请求和服务器响应

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

作为自动启动服务运行

若要在打开计算机时自动启动 think-cell 服务器,请按照以下步骤操作:

  1. 在“think-cell server”对话框中,选择“Run as auto-start service”选项。
  2. 在“Password”字段中,输入“Run as auto-start service”选项中指定的帐户的密码。

试试吧!

仅限 Windows

使用我们现成的示例,单击按钮即可创建 PowerPoint 演示文稿。

  1. 使用 URL http://127.0.0.1:8080 启动 think-cell 服务器。
  2. 在浏览器中打开 http://127.0.0.1:8080
  3. 网页“ppttc 测试”将打开。选择“Send .ppttc to server and get .pptx”。

think-cell 服务器根据 JSON 数据创建 PowerPoint 演示文稿。浏览器将演示文稿下载到您的计算机。

“ppttc 测试”页面的 HTML 源代码展示了 think-cell JSON 自动化的可能用途。源代码可以作为您自己的自动化工作流程的起点。代码包含以下元素:

  • 按钮的 HTML 标记,在受到点击时,按钮会使用 XMLHttpRequest 调用某种方法,以便与服务器进行通信。
  • 一些静态 JSON 数据。在典型用例中,JSON 数据来自其他来源。
  • 某 JavaScript 函数,可将 JSON 数据发送到 think-cell 服务器。服务器会生成对静态 JSON 数据的 HTTP POST 请求。服务器响应是文件下载。

“ppttc 测试”页面使用 JavaScript 发送 HTTP POST 请求,并将 think-cell 服务器的响应保存为 PowerPoint 文件。显然,其他语言也有效。