Tableau

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

2020-01-06  本文已影响0人  扫地sir

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

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

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

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

第一步:解包

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

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

image.png
第二步:提取

打开下载好的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)

非常简单,有没有!有能力的同学可以写个图形界面,使用起来就更方便了。

此篇文章已发布到我的公众号:saodisir,有兴趣也可关注一下

上一篇下一篇

猜你喜欢

热点阅读