我在《用PowerBI将制作数据报告变成复制粘贴的简单工作》中描述了如何用Power BI来简化生成大量文字描述 图表的报告。作为一个终极懒人,我想把复制粘贴这一步也省略掉。
方法一:利用PDF作中转我首先想到的是利用Power BI Desktop的导出pdf功能,将报告直接在power bi中生成后导出pdf,再用Acrobat转化成word。但这个方法操作起来很麻烦,有几个问题需要去解决:
1.要为每一页设置A4格式,这个倒是好办,直接把某个页面设置为842*595像素,然后无限复制该页面即可。
2.要将数字嵌入到文字中。这个也好办,直接生成数字对应的度量值,然后将其生成卡片视图,并取消显示“类别标签”,调整大小。然后在文本框中按table键生成需要的空格,再把卡片拖进空格处。虽然繁琐,但也好解决。
3.最繁琐的是客户产品名字的处理。在文字中,客户产品名字随处可见;在图表中,需要根据客户产品名字进行筛选。由于Power BI文本框没有便捷的文字替换功能,所以要批量变更产品名字异常麻烦。有一个办法是生成pdf后,用Acrobat来批量替换,或用Acrobat转化成word后再批量替换。图表中的客户名字筛选,可以直接在Powerquery中就筛选完毕然后再加载,这样就能把客户产品参数化,然后在多个表格中按产品名字筛选。
然后我想到了用python来操作word。但这必须先用python操作数据和图表,这相当于重构报告模型,而且我对python处理数据几乎是门外汉,作罢。
不过在学习python处理word过程中,我无意中发现了用python来实现word邮件合并的功能,作者举一反三,认为邮件合并功能并不仅仅适用于邮件合并,还有更广阔的用途。
word邮件合并功能实际上是对域的操作,那么,是不是域可以有更广泛的功能,比如,动态更新数据?
方法二:【推荐】利用粘贴Excel元素为链接对象的方法爬网,寻找资料,果然被我找到相关资料,一番摸索之后,结合实际应用场景,梳理如下:
1.首先是把Power BI Desktop中的报告模型复制到excel中。这个好办,其实是复制粘贴查询。遗憾的是建立的度量值和制作的图表全部失效,得重新做。
2.在excel中构建报告所需的图表、数据透视表(具体操作步骤略过),把word报告中所需的值和图表都做出来备用。
3.打开word版本的报告,一个一个地复制excel中的数据或图表,然后选择性地粘贴到相应位置。
在excel中复制所需元素后,在word中选择选择性粘贴
4.如果复制的是文字,那么选择“粘贴链接”选项下的“无格式的Unicode文本”。
如果复制的是文字,那么选择“粘贴链接”选项下的“无格式的Unicode文本”
5.如果复制的是图表,那么选择“粘贴链接”选项卡的任意一个选项即可”。
如果复制的是图表,那么选择“粘贴链接”选项卡的任意一个选项即可
6.重复步骤3-5,确保所有需要动态更新的元素都以粘贴链接的方式从excel中复制并粘贴到word中了。
7.当excel中数据更新后,全选word中的所有元素,按F9刷新域代码,这样所有需要动态更新的地方就全部更新成最新数据了。
【注意事项】
A.第3-5步特别容易搞错,弄成了直接“粘贴”,那样粘贴的结果是excel中的数据更新不会动态反映到word中去。
B.excel文件位置必须保持固定,不要轻易挪动其位置,否则word中刷新后直接报错,提示“有错误!链接无效。”
甚至我用的链接是SharePoint的onedrive文件都不行:在公司创建好之后,在家里打开word刷新,就出现下面的提示:
不过如果确实需要挪动excel文件位置,那么也可以在word中更新域代码:按ALT F9,就会显示所有域代码,可以对其像普通文本那样进行查找替换操作,以更新excel文件路径。不过实际操作中我发现,要选择域代码的某一部分还是要仔细操作,否则一不小心就选择了整个域代码,这样一来,即使选中后复制了所选部分,粘贴出来的也是该域代码所代表的值而不是域代码本身。