示例说明
在电子表格中,可以通过插入形状来绘制地图。并且地图可以根据数据来进行染色。如下所示:
设置方法
- 在电子表格设计器 Excel 中,创建一张电子表格报表。
- 其中第一个sheet为地图,每个地图形状的名称与数据中的地图名称一致。
- 第二个sheet为辅助数据、区间范围以及地图数据
- 在浏览器的资源定制节点下,选中电子表格,右键选择 编辑宏 进入报表宏界面。
- 在报表宏界面新建服务器端模块,在弹出的新建模块对话框中选择对象为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
备注:电子表格地图可以通过插入一张图片,然后通过插入-》形状中的“任意多边形”,描绘勾画各个区域的闭合形状,再拼凑实现。