提取Tableau打包工作簿中的自定义图形和数据集

教你从Tableau打包工作簿(.twbx)中提取自定义形状和数据集,无需编程即可复用他人作品中的图形资源。

最近学习了一下Robert关于如何提取Tableau中自定义图形的文章,方法非常简单,只需使用大神提供的excel文件,就可以轻松完成。

__BLOCK_p__文章地址:https://www.clearlyandsimply.com/clearly_and_simply/2014/05/extract-custom-shapes-from-a-tableau-workbook.htmlexcel文件下载地址:https://www.clearlyandsimply.com/files/2014/05/extract_custom_shapes_from_tableau.xlsm

我随便在public上找了一个《权游》的Viz,我们试着提取里面的族徽。

__BLOCK_p__https://public.tableau.com/profile/shivarajc#!/vizhome/ScreenTimeofTop100CharactersofGameofThrones/GameofThronesScreenTime

右键点击twbx文件,选择“解包”,就会出现一个twb文件和一个文件夹。

文件夹里面又有两个文件夹,分别是Date和Image,包含数据集和背景图之类的图片,但这里并不包含自定义图形。

打开下载好的xlsm文件,点击按钮,选择刚刚解包的twb文件(excel务必要启用宏功能)

确定了工作簿之后,自定义图形就提取好了

找到提取后的文件夹,自定义图形都在里面。

大家可以自己试一试,没有任何难度。

另外本着继续探究原理的精神,我稍微研究了一下实现原理,并用python复现了功能。

用记事本打开twb文件,可以发现存储格式就是xml,所有的自定义图形都存储在/external/shapes这个节点下面,并用base64编码。那么我就尝试着用python的xml库,遍历相关节点并解码,就可以获得自定义图形了。

代码如下:

from xml.etree import ElementTree as ET
import base64

twb_path= 'D:/Screen Time of Top 100 Characters of Game of Thrones.twb'  #确定提取文件的路径
twb_xml= ET.parse(twb_path)   #读取文件
shapes= twb_xml.findall('./external/shapes') #读取节点数据

image_path= 'D:/image/' # 确定要输出的文件路径(手工建一个)

 #(遍历所有子节点,并解码输出)
for shape in shapes: 
    for child in shape.getchildren():                        #遍历子节点
        image_name = child.attrib.get('name').split('/')[1]  #提取文件名
        image = base64.b64decode(child.text)                 #解码
        with open(image_path + image_name, 'wb') as file:    #存储
            file.write(image)
📖 相关文章
在Tableau中通过添加操作,控制集并高亮显示数据
在同一个工作表里建立Top-N-and-Bottom-N视图
Tableau日期计算合集
在Tableau仪表板中隐藏-显示工作表
一文搞懂Tableau中的符号、形状、图片与图像角色
——————————————————————————————

No comments yet