页面树结构
转至元数据结尾
转至元数据起始

正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史

版本 1 下一个 »

1 概述

1.1 背景:

           在smartbi中,透视分析导出的EXCEL行区内容是单元格合并的,如果合并的单元格跨行比较多,可能导致现场通过excel一行行核对数据有困难,固会有导出清单excel的需求。

注意:本示例来源于实际项目,原始版本是V6.2,可作为参考性质,也许是不能运行的。

1.2 需求:


          (1)使透视分析导出excel增加类型:清单表。可以以清单列表的方式导出。如下图。
          (2)使导出的excel列宽自适应。不导出参数信息。
          (3)修改透视分析默认导出设置:使导出内容默认为清单表,数值导出类型默认为显示值。

关于过滤器的配置请见扩展插件开发基础(内含目录及配置文件介绍)中的插件生命文件extension.xm的说明。

1.3 效果展示:

2 简要分析

2.1 分析需求:

          根据需求描述,产品导出csv与该需求的相似度最高。可是csv要在excel中手动设置才能列宽自适应,也没有表头表尾。

   

2.2 产品源码相关了解:

          透视分析导出的servlet:/Insight/src/java/smartbi/insight/export/InsightExportServlet.java
          导出逻辑:一个完整的导出过程,会进入这个servlet两次,第一次写好文件放到session中,第二次从session中取文件,写到输出流中。

2.3 简要思路:

          1、第一次进入InsightExportServlet,我们先执行InsightExportServlet的导出CSV,然后获取执行导出后的CSV内容。
          2、将CSV内容转为excel,通过 poi可以使excel列宽自适应。
          3、将excel放到session中,继续执行第二次的InsightExportServlet。

3 实现思路

3.1 实现思路分析:

          1、根据以上分析,我们需要编写filter,执行了"导出CSV"后,截取CSV内容,并转为excel。
          2、可是执行"导出CSV"后,文件写在了response的输出流里了。我们是没办法直接通过response获取到输出流的(response输出流对象没有Buffer功能,且只能读取一次)。
          3、为了解决这个问题,我们可以新建response的包装器(继承HttpServletResponseWrapper类)。保存输出流的buffer,这样我们就可以读取了。即示例的CustomizedResponseWrapper.java、
          4、以上123步骤的分析,已经解决了本问题的实现难题了,剩下的就是一些细节的东西,如:excel单元格式设置,表头表尾设置,前端代码修改等等。

3.2 代码说明:

          1、response的包装器:/YdthLife/src/java/com/ydrs/filter/response/CustomizedResponseWrapper.java
          2、构造拦截器:/YdthLife/src/java/com/ydrs/filter/InsightExportFilter.java
                                   /YdthLife/src/web/META-INF/extension.xml
          4、前端展现:

增加"清单表"选项:/YdthLife/src/web/vision/template/freequery/query/ExportTxtDialog.template
/YdthLife/src/web/vision/js/smartbi/insight/Insight.js.patch
导出默认"显示值""清单表":/YdthLife/src/web/vision/js/freequery/query/ExportExcelDialog.js.patch

4 相关资源(EPPR-10596)

透视分析导出清单EXCEL.rar

  • 无标签