JavaScript
var oActiveRangesInfo = {
"aFirstColumns":[2, 11, 3],
"aFirstRows":[11, 23, 29, 30, 13, 14, 26],
"aLastColumns":[2, 11, 3],
"aLastRows":[11, 23, 29, 30, 13, 14, 26],
"aRows": [
{"rowIndex": 11, "startCol": 2, "endCol": 6},
{"rowIndex": 12, "startCol": 2, "endCol": 6},
{"rowIndex": 13, "startCol": 2, "endCol": 6},
{"rowIndex": 13, "startCol": 11, "endCol": 12},
{"rowIndex": 14, "startCol": 11, "endCol": 12},
{"rowIndex": 15, "startCol": 11, "endCol": 12},
{"rowIndex": 16, "startCol": 11, "endCol": 12},
{"rowIndex": 23, "startCol": 2, "endCol": 5},
{"rowIndex": 23, "startCol": 11, "endCol": 11},
{"rowIndex": 24, "startCol": 2, "endCol": 5},
{"rowIndex": 24, "startCol": 11, "endCol": 11},
{"rowIndex": 26, "startCol": 3, "endCol": 7},
{"rowIndex": 29, "startCol": 11, "endCol": 11},
{"rowIndex": 30, "startCol": 2, "endCol": 2}
]
}
function cwsCreateEmptyArray(n, m) {
var emptyArray = new Array(n);
for (var i = 0; i < n; i++) {
emptyArray[i] = new Array(m);
}
return emptyArray;
}
var minRowIndex = Math.min.apply(null, oActiveRangesInfo.aFirstRows);
var minColIndex = Math.min.apply(null, oActiveRangesInfo.aFirstColumns);
var maxRowIndex = Math.max.apply(null, oActiveRangesInfo.aLastRows);
var maxColIndex = Math.max.apply(null, oActiveRangesInfo.aLastColumns);
var rowsMtrx = maxRowIndex - minRowIndex + 1;
var colsMtrx = maxColIndex - minColIndex + 1;
var aMtrx = cwsCreateEmptyArray(rowsMtrx, colsMtrx);
for (var i = 0; i < oActiveRangesInfo.aRows.length; i++) {
oActiveRangesInfo.aRows[i].offsetRow = oActiveRangesInfo.aRows[i].rowIndex - minRowIndex;
oActiveRangesInfo.aRows[i].offsetCol = oActiveRangesInfo.aRows[i].startCol - minColIndex;
}
var oActiveRangesInfo = {
"aRows": [
{"rowIndex":11,"startCol":2,"endCol":6,"offsetRow":0,"offsetCol":0},
{"rowIndex":12,"startCol":2,"endCol":6,"offsetRow":1,"offsetCol":0},
...