社区
博客
提取 Tableau 工作簿自定义形状和图片的 3 种方法
今天,我们就来分享一些实用方法,教你直接从工作簿中快速提取喜欢的形状或图片~

相信大家都曾遇到过这种情况:收到了同事发过来的 Tableau 工作簿,或在 Public 上看到了一些非常优秀的 Viz,视图中包含你想重复使用的形状或图片,但由于缺少原始图片,最终只能放弃这个念头。

实际上,你可以直接从工作簿中提取这些文件!今天,我们就来分享一些实用方法,教你快速提取喜欢的形状或图片~


了解形状和图像的嵌入方式

众所周知,Tableau 支持你在“标记”卡中使用形状,通过不同的形状来展示数据。

默认情况下,Tableau 自带一些形状分组(包括箭头、货币符号等),你可以在电脑本地的“我的文档 > Tableau 存储库 >“形状”文件夹中找到它们。

此外,你还可插入自定义形状,只需在“形状”文件目录下新建子文件夹,并统一放入图像(png、gif、jpg、bmp 或 tiff,不支持 svg)。然后,这些自定义形状会出现在“编辑形状”对话框中,供你使用。

在存储工作簿时,Tableau 会将自定义形状嵌入 .twb 或 .twbx 中,以确保在其他电脑上打开工作簿后也能正确显示形状,即使你手头上并没有原始的形状图片。

需要说明的是,不同于自定义形状,通过仪表板对象插入的图像并不会自动嵌入到 .twb 工作簿。只有存储为 .twbx 打包工作簿时,才有机会将其提取出来。

了解完这些基础知识,我们再结合示例场景学习以下几种提取方法。


方法一:解压 .twbx 提取仪表板图像

如下图所示,这是一个被 Tableau Public 评选为每日 Viz 精选的超市数据分析看板,且支持下载 .twbx 格式。

如果打开工作簿,你会看到,作者是在 KPI 指标可视化卡片中通过“仪表板对象嵌入图片”的方式来实现这种图文排版效果。

Public 地址

在这种情况下,可将 Viz 下载到本地,把工作簿的 .twbx 后缀改成 .zip,并对其进行解压。

然后,你就获得了组成 .twbx 打包工作簿的所有内容:一个 .hyper 格式的数据源、一个包含所有图像的文件夹,以及一个 .twb 格式的工作簿。

  • 原理说明:本质上来说,你可以把 .twbx 看作是一个压缩包,通过解压 .twbx 文件获得想要的图片元素。然后,你可以根据可视化需求,再整理成图片文件夹,以作为自定义形状或通过仪表板对象插入 Tableau 进行调用。

  • 适用场景:此方法仅限于提取仪表板对象嵌入的图像,不支持提取自定义形状。


方法二:导入或复制工作簿调用形状

正如基础知识中提到的,无论工作簿的格式是 .twb 还是 .twbx,Tableau 都会默认将自定义形状嵌入其中。因此,如果想在自己的工作簿调用它们,你就可通过“导入外部工作簿”或“复制粘贴工作表”的方式实现复用。

如下图所示,这是一个探讨“菠萝披萨是不是黑暗料理”的 Viz。可以看到,作者通过“插入自定义形状”替代纯文本,呈现了更具创意、更美观的仪表板视图。

Public 地址

如果你想分析食品或农产品等数据主题,或者在其他场景中使用,就可通过以下两种方式,让这些可爱的形状加载到你的本地工作簿。后续,即便你删除导入或粘贴的内容,这些形状都能持续为你当前的工作簿所用。

👉 点击顶部菜单栏“文件 > 导入工作簿” ,按需选择外部工作簿。

👉 复制自定义形状所在的工作表,并粘贴到你的 Tableau 工作表中。

  • 原理说明:利用 Tableau Desktop 本地缓存机制来载入外部自定义形状。

  • 适用场景:此方法的优势在于快捷;不足的是外部工作簿可能会在加载时报错,导致 Tableau 性能变慢。此外,无法直接获取形状的原始图片。如果要在多个工作簿中使用,需要重复操作。


方法三:Python 脚本提取自定义形状

如果还是希望提取自定义形状的原始图片,可以使用 Python 脚本。让我们跟随数据粉 Johan 的方法,探索一下如何快速抓取形状图片。

如下图,为了方便批量导出形状,Johan 编写了一个名为“extract-tableau-shapes.py”的简单Python 脚本,可帮助你完成以下工作:

  • 如有必要,自动解压 .twbx 文件

  • 读取原始 .twb 文件,扫描自定义形状信息

  • 如果发现嵌入的自定义形状,则提取并保存到一个名为“Shapes”的子文件夹中

GitHub 地址

具体使用方法如下:

先安装 Python 3,大多数情况下不需要安装额外的包。Mac / Linux / Windows 系统用户都可通过 Python 官网下载安装。

成功安装 Python 3 后,将 GitHub 上的 Python 脚本“extract-tableau-shapes.py”下载到本地,将其跟需要摘取图片的工作簿放置同一个目录下。

然后,在“终端”程序或命令行中依次输入以下命令。这里以 Mac 终端进行演示,其他系统可参考实现:

👉 输入 python3 --version,确认 Python 3 是否已正确安装。

如果终端返回类似 Python 3.13.x 的版本号,说明 Python 3.13 已正确安装并能被系统识别。

如果终端提示找不到命令,或者显示的版本不是 3.13,说明可能还没正确配置环境变量,或还存在其他版本的 Python 覆盖了 3.13。

👉 告诉 Python 这两个文件的准确路径。

这里,继续在终端里中输入 cd "脚本和工作簿所在目录",回车。为避免路径过于复杂导致报错,建议两个文件放在桌面上的同一目录(文件夹)下,且文件夹名称一定要简洁。

然后,输入 ls 并回车,查看当前目录下是否能看到脚本和工作簿的名字。

👉 如果看到脚本和工作簿名字,则输入:python extract-tableau-shapes.py path/to/your/workbook.twb(x) [outputdir] [tmpdir]

这串命令将运行 extract-tableau-shapes.py 脚本,并传入三个参数:

  • path/to/your/workbook.twb(x):必填,表示想处理的 Tableau 工作簿所在路径。

  • [outputdir]:可选参数,指定输出目录,即解码后的形状图片将保存到这个文件夹。默认值(不填)为工作簿所在目录下的 Shapes 文件夹。

  • [tmpdir]:可选参数,用于指定临时目录。如果是 .twbx 文件,脚本会先解压缩出 .twb 文件到这个目录。默认值(不填)为工作簿所在目录下的 tmp 文件夹。

以第二个示例(披萨 Viz)作为演示,终端命令只需这样写(建议照抄,自行更改工作簿名称即可;不同系统用户可自行尝试是否要去掉 Python 后的 3):

python3 extract-tableau-shapes.py Pizza.twbx

脚本执行完毕后,你会在工作簿所在文件夹下获得一个或多个子目录,里面包含了所有被嵌入的形状文件。并且,整个提取过程非常快速。

  • 原理说明

本质上看,.twb 工作簿只是一个 XML 文件,数据大部分为「半可读」状态。所以,这个 Python 脚本会从 Tableau 工作簿(.twb 或 .twbx)中提取自定义形状并解码保存为图像。具体流程大致如下:

1.识别并处理文件类型

如果传入的是 .twb(XML 格式),则直接读取其内容。如果传入的是 .twbx(打包工作簿),脚本会先将它当作 ZIP 文件解压,提取出其中的 .twb 文件。

2.扫描并提取形状数据

读取 .twb 文件的 XML 内容,查找形状相关的标签。形状的内容一般以 Base64 编码的方式嵌入在 .twb 中。

3.解码并保存为图片

对检索到的 Base64 编码内容进行解码,生成 PNG 文件。将解码后的文件按照对应的路径或名称保存到指定的输出文件夹(默认是工作簿所在目录下的 Shapes 文件夹)。

  • 适用场景

此方法的优势是可通过命令行传入工作簿文件路径、输出文件夹路径以及临时目录路径。如果你不想手动查找、复制、解码 Base64 字符串,这个脚本可以帮你一键搞定。


获取最新的数据新闻

注册以获取 优阅达 Data Blog 的快讯、见解和研究