基于Data Shape的可视化数据导出研究

       这是一个用户界面易于使用的脚本,脚本将通过一个可视化手动输出的过程从Revit的明细表中导出一个Excel表格。用户可以通过它来完成Excel表格的输出。但是很多用户不知道其中的工作原理是什么或者它只是一个教人们如何在Excel中划分文件的脚本因为它输出的文件包含的是一个以逗号作为分隔符的值。因此,针对用户的需求本脚本直接对Excel文件进行操作。建立一个基于Data Shape的用户界面,同时也设置一些提示信息,让用户知道脚本运行时发生了什么。脚本中还使用了一些自定义包,包括:Data shape(版本:2021.2.92),Crumple(版本:2021.5.27), Bimorph Nodes(版本:2.5.1)。整个脚本制作过程是先使用Crumple包提取数据,再使用Data Shape包生成用户界面,最后使用Biomorph nodes(生物形态节点)来读取明细表中的值并以列表的形式返回。

       首先要按类型寻找明细表并提取数据。创建一个Crumple包的Schedules By Type节点,这个节点可以获取模型中所有明细表,然后使用Element name节点过滤一些可能满足已经有的另一个标准明细表的名称。如果没有用节点过滤出明细表,你就会发现很多明细表是由代码图例或者主题图例的名称加上内部的乱码组成,也称为Keynote legend。因为它有点像一个介于两者之间的类别,既是一个Keynote legend,又表现得像一个明细表。然后需要用到String contains节点检查是否有子字符串,用户需要注意明细表的命名方式,检查字符串中是否包含空格。再创建一个新的Code Block节点,在明细表前面设定“Internal”,注意此处不能使用空格。为了不过滤掉小写的“internal”,因为你可能有一个明细表命名为“internal”或类似的东西且内容相同,所以需要使用列表的Booleans节点来屏蔽输入,把那作为一个选项拿出来,然后重新命名。接着使用一个布尔掩码的过滤器节点,让列表中只留下想要的明细表。最后使用Element name节点再次获取这些明细表的名称,这些元素的名称将作为一个按钮显示在用户界面上,如下图:

       接着创建一个下拉菜单。创建Data shape包中的Drop Down Data节点,按钮的名称设置成明细表的名称,值将是明细表内部的值,但是用户将只看到按钮。只需要做一个Code Block节点,内容设置为“选择明细表”和“true”,如下图:

       创建获得文件路径实现明细表导出到指定的excel文件中。需要通过Data shape包中的File Path Data节点实现。再创建一个Code Block节点,内容设置为“明细表路径”和“选择文件路径...”,如果客户没有选择指定路径,则输入文件路径为默认路径。“选择文件路径...”向用户提示希望他们选择一个明细表数据输出位置的路径,如下图:

       最后用户可以自定义工作表的名称。先创建一个Data shape包里的Text Box Data节点,这样默认情况下,明细表中的表在Excel中被称为工作表,即sheet。我们要设定sheet1是默认的,这里设定成工作表名称,这样用户就会明白,默认情况下我们说的是Excel工作表,且数字输入设定为false,因为这是一个文本输入,如下图:

       接下来将实现多表单输出。先创建一个MultipleInputForm++节点,使用List Create来组合以上输出的数据,再做一个布尔值,把它设置为True。由于这是实际运行的用户界面,还需要做一个Code Block节点,设置交互界面标题为“导出明细表”,导出按钮为“导出”,取消按钮为“取消”。设置交互界面尺寸,高度是900,宽度是600,左右标签间距是150,如下图:

       此时我们的用户界面已经创建完成。用户界面已经可以显示下拉界面,选择数据输入文件的路径,以及文件名称,当需要运行时点击“导出”按钮,当需要取消运行时点击“取消”按钮。如果导出的数据需要指定文件,则需要提前在指定位置创建好Excel文件;如果不指定文件路径和名称,则输出的是默认路径。中文显示不全但是英文显示完全是由于Revit版本的原因。如下图:

       最后要创建一个小用户界面说明脚本是否运行完成,因为有时Dynamo播放器中一个脚本完成时表达的并不清晰。先创建一个if节点实现检查脚本是否被运行。如果运行完成,就会反馈“导出完成”,如果取消运行或运行未完成新,就会反馈“导出取消”,如下图:

       为了将所有的数据输出,要使用代码块索引每个项目,则创建一个Code Block节点并设定sched=out[0];path=out[1];sheet=out[2],out为一个变量,这样就可以避免使用List.GetItemAtIndex节点,简化了程序,还需要创建一个Bimorph Nodes包中的Get Data节点,此时获得的所有数据是以行的形式,因此我们不必对数据进行转置。默认情况下数据会定时更新,为了不更新数据需要创建一个Code Block节点并设定为False。我保留了“remove Heading”接口,如果需要的话,可以在Data Shape包中做另一个输入。接下来要使用Data.ExportExcel节点来导出数据,从用户界面上获取文件路径和工作表名称,然后在一个Code Block中,设定从第0列第0行开始,设定覆盖文件为true,如下图:

 最后一步就是制作一个弹出的用户界面。脚本将等待到数据完成输出后再弹出用户界面,此时使用Crumple包中的© Flow.WaitFor节点,把信息作为数据,等待Excel节点产生一个结果,再使用Crumple包中的© UI.Messenger节点,输入来自If节点的信息,脚本完成,如下图:

完整脚本程序如下图:

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邱榆超

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值