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

示例说明     

在电子表格中,可以通过插入形状来绘制地图。并且地图可以根据数据来进行染色。如下所示:

 

设置方法

  1. 在电子表格设计器 Excel 中,创建一张电子表格报表。

  2. 其中第一个sheet为地图,每个地图形状的名称与数据中的地图名称一致。


  3. 第二个sheet为辅助数据、区间范围以及地图数据



  4. 在浏览器的资源定制节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面

  5. 在报表宏界面新建服务器端模块,在弹出的新建模块对话框中选择对象为spreadsheetReport;事件为onBeforeOutput;并把下面的服务器宏代码复制到代码区域,根据实际情况进行修改。

    服务器宏类型

    类型

    对象

    事件

    ServerSide

    spreadsheetReport

    onBeforeOutput

     

    服务器宏代码

     

    function main(spreadsheetReport) {
        spreadsheetReport.cacheable = false;
        var workbook = spreadsheetReport.workbook;
        //获取第二个sheet,得到数据列字段扩展的数据,从0开始计数
        var sheet_ex = spreadsheetReport.sheets[1];
        var PosList = sheet_ex.getExpandedPositions("A13");
        //获取数据列,也即是地区字段扩展数据最后一行的行数
        var PRow = parseInt(PosList[PosList.length - 1].row) + 1;
        //获取地图形状所在的sheet
        var sheet_shape = workbook.getWorksheets().get(0);
        //获取地图数据所在的sheet
        var sheet_data = workbook.getWorksheets().get(1);
        var cells = sheet_data.getCells();
        var shapes = sheet_shape.getShapes();
        var shapeMap = new Array();
        for (var i = 0; i < shapes.getCount(); i++) {
            var shape = shapes.get(i);
            shapeMap[shape.getName()] = shape;
            shape.getFill().setType(2);
        }
        //数据列在Excel中位于A13和B13单元格,因此从13开始进行判断
        for (var row = 13; row <= PRow; row++) {
            //获取地图对应的名称
            var code = cells.get("A" + row).getStringValue();
            if (code != '') {
                //获取地图对应的数据
                var value = cells.get("B" + row).getDoubleValue();
                //获取对应数据的颜色
                var color = getColor(cells, value);
                var shape = shapeMap[code];
                //为地图区域设置颜色
                if (shape != null) {
                    shape.getFill().getSolidFill().setColor(color);
                }
            }
        }
    }
    function getColor(cells, value) {
        //根据颜色序列和数据范围判断颜色
        for (var row = 7; row <= 9; row++) {
            var rowMin = cells.get("B" + row).getDoubleValue();
            var rowMax = cells.get("C" + row).getDoubleValue();
            if (value >= rowMin && value < rowMax) return cells.get("A" + row).getDisplayStyle().getForegroundColor();
        }
        return null;
    }

资源下载migrate.xml

 

 

备注:电子表格地图可以通过插入一张图片,然后通过插入-》形状中的“任意多边形”,描绘勾画各个区域的闭合形状,再拼凑实现。

  • 无标签