导出带有Qlik扩展名的整个Qlik报告

时间:2019-05-07 13:48:25

标签: javascript qlikview qliksense

im在Qlik扩展编辑器中开发Qlik扩展。我的目标是将当前报告导出为pdf和excel。 我试图选择html代码,对其进行格式设置并首先另存为pdf。这很好,因为我注意到仅显示的行是导出文件。似乎不可见的行已从html中删除。 有什么方法可以直接获取报告数据?我会自己建立表格。

1 个答案:

答案 0 :(得分:0)

您可以获取数据,解析该报表的超立方体,然后自己绘制。

这将涉及:        访问扩展中的超立方体。        获取超立方体的尺寸和度量。        循环遍历绘画功能上的数据绘画。

在初始JS中,您可以定义最初要获取多少超立方体:

        initialProperties: {
            qHyperCubeDef: {
                qDimensions: [],
                qMeasures: [],
                qInitialDataFetch: [{
                        qWidth: 24,
                        qHeight: 400
                    }]
            }
        },

然后在您的代码中,您可以解析超立方体并使用其内容绘制表(仅是概念证明),从而重载绘制函数:

 paint: function ($element, layout) {
            var lastrow = 0;
            var numDimensions = self.backendApi.getDimensionInfos().length;
            var numMeasures = self.backendApi.getMeasureInfos().length;         
            // This will be your table header
            for (var i = 0; i < self.backendApi.getDimensionInfos().length; i++) {
                html += self.backendApi.getDimensionInfos()[i].qFallbackTitle;
            }
            self.backendApi.getMeasureInfos().forEach(function (cell) {
                html += cell.qFallbackTitle';
            });
            // this will be your table rows
            this.backendApi.eachDataRow(function (rownum, row) {
                   lastrow = rownum;
                   for (var i = 0; i < row.length; i++) {
                        if (row[i].qIsOtherCell) {
                            row[i].qText = self.backendApi.getDimensionInfos()[i].othersLabel;
                        }
                        if( row[i].qText !== undefined ){
                            output_string = row[i].qText;
                        }
                        html += output_string ;
                    }
            }
            $element.html(html);
            // there may be more data after that initial fecth
           // request more data until hypercube data ends                      
            if (this.backendApi.getRowCount() > lastrow + 1) {
                var requestPage = [{
                        qTop: lastrow + 1,
                        qLeft: 0,
                        qWidth: 24,
                        qHeight: Math.min(500, this.backendApi.getRowCount() - lastrow)
                    }];
                self.backendApi.getData(requestPage).then(function () {
                    self.paint($element);
                });
            }
        }

实际上,重要的部分是,您可以通过加载用于构建该报告的超立方体来访问数据

调查一下,您会完成的。

希望这会有所帮助。