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

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

与当前比较 查看页面历史

版本 1 下一个 »

1 概述

背景:
在smartbi中,透视分析导出的EXCEL是单元格合并的。
需求:
(1)使透视分析导出excel增加类型:清单表。可以以清单列表的方式导出。如下图。
(2)使导出的excel列宽自适应。不导出参数信息。
(3)修改透视分析默认导出设置:使导出内容默认为清单表,数值导出类型默认为显示值。
----------

2 实现思路

分析需求:
根据需求描述,产品导出csv与该需求的相似度最高。可是csv要在excel中手动设置才能列宽自适应,也没有表头表尾。客户坚持需要定制。
产品相关了解:
透视分析导出servlet路径:/Insight/src/java/smartbi/insight/export/InsightExportServlet.java
导出逻辑:一个完整的导出过程,会进入这个servlet两次,第一次写好文件放到session中,第二次从session中取文件,写到输出流中。
简要思路:
1、第一次进入InsightExportServlet,我们先执行InsightExportServlet的导出CSV,然后获取执行导出后的CSV内容。
2、将文件流内容转为excel,通过 poi可以使excel列宽自适应。
3、将excel放到session中,继续执行第二次的InsightExportServlet。

3 详细步骤

实现思路分析:

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

代码说明:

  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

  1. 前端展现:

增加"清单表"选项:/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

  • 无标签