(本文档仅供参考,仅适用于本文档中的示例报表/场景,若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。)

问题描述:

如下一个电子表格模板,销售量在数据集中进行了排序,由于数据较多,当需要看到销售量最少的数据时,需要下拉到电子表格最后才能看到,有什么方案能够直接获取到电子表格的首行和末行数据呢?

解决方案:

可通过如下代码进行获取。注意:此获取的是当前页面的首行值和最末值,也就是说当报表为清单报表分页时,获取到的是当前页面的第一行和最后一行,而不是总体数据排序后的首行和末行。

服务端宏如下:

//ServerSide
//spreadsheetReport
//onBeforeOutput
function main(spreadsheetReport) {
      var sheet = spreadsheetReport.sheets[0];
      var posList = sheet.getExpandedPositions("C5"); //获取C5单元格字段扩展出来的所有数据
      spreadsheetReport.printExpandedPositions(); //打印展开后所有单元格
      var customProperties = spreadsheetReport.customProperties;
      for (var i = 0; i < posList.length; i++) { //将C5单元格字段扩展出来的所有数据添加到属性customProperties中
      var pos = posList[i];
      var value = sheet.getCellValue(pos);
      customProperties.put(pos + "", value);
}
      logger.info(customProperties); //扩展字段C5所有值

}

客户端宏如下:

//ClientSide

//spreadsheetReport

//spreadsheetReport

function main(spreadsheetReport, isAjaxRefreshCallback) {

      //获取C5单元格字段扩展出来的数据

      var Pos = spreadsheetReport.getExpandedPositions("C5");

      var customProperties = spreadsheetReport.elemSheetFrame.contentWindow.customProperties;

      //获取第一行数据的值,获取最后一行数据的值

      alert("销量最多:【"+customProperties[Pos[0]]+"】,销量最少:【"+customProperties[Pos[Pos.length-1]]+"】");

}