(本文档仅供参考,仅适用于本文档中的示例报表/场景,若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。)
问题描述:
如下一个电子表格模板,销售量在数据集中进行了排序,由于数据较多,当需要看到销售量最少的数据时,需要下拉到电子表格最后才能看到,有什么方案能够直接获取到电子表格的首行和末行数据呢?
解决方案:
可通过如下代码进行获取。注意:此获取的是当前页面的首行值和最末值,也就是说当报表为清单报表分页时,获取到的是当前页面的第一行和最后一行,而不是总体数据排序后的首行和末行。
服务端宏如下:
//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]]+"】");
}