DocumentServer/OfficeWeb/sdk/Excel/model/Workbook.js
nikolay ivanov a8be6b9e72 init repo
2014-07-05 18:22:49 +00:00

8372 lines
317 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2014
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
var d1, d2, d3;
var g_nHSLMaxValue = 240;
var g_nVerticalTextAngle = 255;
var gc_dDefaultColWidthCharsAttribute;
var gc_dDefaultRowHeightAttribute;
var g_nNextWorksheetId = 1;
var g_sNewSheetNamePattern = "Sheet";
var g_nSheetNameMaxLength = 31;
var g_nAllColIndex = -1;
var History;
var aStandartNumFormats;
var aStandartNumFormatsId;
var start, end, cCharDelimiter = String.fromCharCode(5),
arrRecalc = {},
lc = 0;
var c_oRangeType = {
Range: 0,
Col: 1,
Row: 2,
All: 3
};
function getRangeType(oBBox) {
if (null == oBBox) {
oBBox = this.bbox;
}
if (oBBox.c1 == 0 && gc_nMaxCol0 == oBBox.c2 && oBBox.r1 == 0 && gc_nMaxRow0 == oBBox.r2) {
return c_oRangeType.All;
}
if (oBBox.c1 == 0 && gc_nMaxCol0 == oBBox.c2) {
return c_oRangeType.Row;
} else {
if (oBBox.r1 == 0 && gc_nMaxRow0 == oBBox.r2) {
return c_oRangeType.Col;
} else {
return c_oRangeType.Range;
}
}
}
function consolelog(text) {
if (window.g_debug_mode && console && console.log) {
console.log(text);
}
}
function DependencyGraph(wb) {
var nodes = {},
badRes = [],
result = [],
nodeslength = 0,
nodesfirst,
__nodes = {},
areaNodes = {},
thas = this;
this.wb = wb;
this.clear = function () {
nodes = {};
__nodes = {};
areaNodes = {};
badRes = [];
result = [];
nodeslength = 0;
nodesfirst = null;
};
this.nodeExist = function (node) {
return nodes[node.nodeId] !== undefined;
};
this.nodeExist2 = function (sheetId, cellId) {
var n = new Vertex(sheetId, cellId);
var exist = nodes[n.nodeId] !== undefined;
if (!exist) {
for (var id in areaNodes) {
if (areaNodes[id].containCell(n)) {
return true;
}
}
}
return exist;
};
this.addNode = function (sheetId, cellId) {
var node = new Vertex(sheetId, cellId, this.wb);
if (nodes[node.nodeId] === undefined) {
if (nodeslength == 0) {
nodesfirst = node.nodeId;
}
nodes[node.nodeId] = node;
nodeslength++;
if (node.isArea && !areaNodes[node.nodeId]) {
areaNodes[node.nodeId] = node;
}
}
};
this.addNode2 = function (node) {
if (nodes[node.nodeId] === undefined) {
if (nodeslength == 0) {
nodesfirst = node.nodeId;
}
nodes[node.nodeId] = node;
nodeslength++;
if (node.isArea && !areaNodes[node.nodeId]) {
areaNodes[node.nodeId] = node;
for (var id in nodes) {
if (!nodes[id].isArea) {
if (node.containCell(nodes[id])) {
node.addMasterEdge(nodes[id]);
nodes[id].addSlaveEdge(node);
}
}
}
return;
}
for (var id2 in areaNodes) {
if (areaNodes[id2].containCell(node) && id2 != node.nodeId) {
areaNodes[id2].addMasterEdge(node);
node.addSlaveEdge(areaNodes[id2]);
}
}
}
};
this.addEdge = function (sheetIdFrom, cellIdFrom, sheetIdTo, cellIdTo) {
var n1 = new Vertex(sheetIdFrom, cellIdFrom, this.wb),
n2 = new Vertex(sheetIdTo, cellIdTo, this.wb);
if (!this.nodeExist(n1)) {
this.addNode2(n1);
}
if (!this.nodeExist(n2)) {
this.addNode2(n2);
}
nodes[n1.nodeId].addMasterEdge(nodes[n2.nodeId]);
nodes[n2.nodeId].addSlaveEdge(nodes[n1.nodeId]);
};
this.addEdge2 = function (nodeFrom, nodeTo) {
if (!this.nodeExist(nodeFrom)) {
this.addNode2(nodeFrom);
}
if (!this.nodeExist(nodeTo)) {
this.addNode2(nodeTo);
}
nodes[nodeFrom.nodeId].addMasterEdge(nodes[nodeTo.nodeId]);
nodes[nodeTo.nodeId].addSlaveEdge(nodes[nodeFrom.nodeId]);
};
this.renameNode = function (sheetIdFrom, cellIdFrom, sheetIdTo, cellIdTo) {
if (sheetIdFrom == sheetIdTo && cellIdFrom == cellIdTo) {
return;
}
nodes[getVertexId(sheetIdTo, cellIdTo)] = nodes[getVertexId(sheetIdFrom, cellIdFrom)];
if (!nodes[getVertexId(sheetIdTo, cellIdTo)]) {
return;
}
nodes[getVertexId(sheetIdFrom, cellIdFrom)] = undefined;
delete nodes[getVertexId(sheetIdFrom, cellIdFrom)];
nodes[getVertexId(sheetIdTo, cellIdTo)].changeCellId(cellIdTo);
};
this.getNode = function (sheetId, cellId) {
var n = new Vertex(sheetId, cellId);
if (this.nodeExist(n)) {
return nodes[n.nodeId];
}
};
this.getNode2 = function (sheetId, cellId) {
var n = new Vertex(sheetId, cellId);
var exist = nodes[n.nodeId] !== undefined,
res = [];
if (exist) {
res.push(nodes[n.nodeId]);
} else {
for (var id in areaNodes) {
if (areaNodes[id].containCell(n)) {
res.push(areaNodes[id]);
}
}
}
return res.length > 0 ? res : null;
};
this.getNodeByNodeId = function (nodeId) {
if (nodes[nodeId]) {
return nodes[nodeId];
}
};
this.getNodeBySheetId = function (sheetId) {
var arr = [];
for (var id in nodes) {
if (nodes[id].sheetId == sheetId && nodes[id].getSlaveEdges()) {
arr.push(nodes[id]);
var n = nodes[id].getSlaveEdges();
for (var id2 in n) {
n[id2].weightNode++;
}
}
}
return arr;
};
this.deleteNode = function (n) {
if (this.nodeExist(n)) {
var _n = nodes[n.nodeId];
_n.deleteAllMasterEdges();
_n.deleteAllSlaveEdges();
if (areaNodes[_n.nodeId]) {
areaNodes[_n.nodeId] = null;
delete areaNodes[_n.nodeId];
}
nodes[_n.nodeId] = null;
delete nodes[_n.nodeId];
nodeslength--;
}
};
this.deleteMasterNodes = function (sheetId, cellId) {
var n = new Vertex(sheetId, cellId);
if (this.nodeExist(n)) {
var arr = nodes[n.nodeId].deleteAllMasterEdges();
for (var i = 0; i < arr.length; i++) {
if (nodes[arr[i]].refCount <= 0) {
nodes[arr[i]] = null;
delete nodes[arr[i]];
nodeslength--;
}
}
}
};
this.deleteSlaveNodes = function (sheetId, cellId) {
var n = new Vertex(sheetId, cellId);
if (this.nodeExist(n)) {
nodes[n.nodeId].deleteAllSlaveEdges();
}
};
this.getSlaveNodes = function (sheetId, cellId) {
var node = new Vertex(sheetId, cellId);
if (this.nodeExist(node)) {
return nodes[node.nodeId].getSlaveEdges();
} else {
var _t = {},
f = false;
for (var id in areaNodes) {
if (areaNodes[id].containCell(node)) {
_t[id] = areaNodes[id];
f = true;
}
}
if (f) {
return _t;
}
}
return null;
};
this.getMasterNodes = function (sheetId, cellId) {
var n = new Vertex(sheetId, cellId);
if (this.nodeExist(n)) {
return nodes[n.nodeId].getMasterEdges();
}
return null;
};
this.addN = function (sheetId, cellId) {
var n = new Vertex(sheetId, cellId, this.wb);
if (! (n.nodeId in __nodes)) {
__nodes[n.nodeId] = n;
}
};
this.t_sort_slave = function (sheetId, cellId) {
function getFirstNode(sheetId, cellId) {
var n = new Vertex(sheetId, cellId, thas.wb);
if (!nodes[n.nodeId]) {
var a = [];
for (var id in areaNodes) {
if (areaNodes[id].containCell(n)) {
a.push(areaNodes[id]);
}
}
if (a.length > 0) {
for (var i in a) {
n.addSlaveEdge(a[i]);
}
n.valid = false;
return n;
} else {
return undefined;
}
} else {
return nodes[n.nodeId];
}
}
function getNextNode(node) {
for (var id in node.slaveEdges) {
var n = nodes[id];
if (n !== undefined) {
if ((n.isBlack === undefined || !n.isBlack) && !n.isBad) {
return n;
}
} else {
delete node.slaveEdges[id];
}
}
return undefined;
}
var stack = [],
n = getFirstNode(sheetId, cellId),
__t = true,
next,
badResS = [],
resultS = [];
if (!n) {
return {
depF: resultS.reverse(),
badF: badResS
};
}
while (1) {
if (n.isGray && !n.isArea) {
for (var i = stack.length - 1; i >= 0; i--) {
var bad = stack.pop();
bad.isBad = true;
badResS.push(bad);
if (stack[i] == n) {
break;
}
}
if (stack.length < 1) {
for (var id in __nodes) {
if (nodes[id] !== undefined && ((nodes[id].isBlack === undefined || !nodes[id].isBlack) && !nodes[id].isBad)) {
n = nodes[id];
delete __nodes[id];
}
}
}
}
next = getNextNode(n);
if (next !== undefined) {
n.isGray = true;
stack.push(n);
n = next;
} else {
n.isBlack = true;
n.isGray = false;
resultS.push(n);
if (stack.length < 1) {
break;
}
n = stack.pop();
n.isGray = false;
}
}
for (var i = 0; i < resultS.length; i++) {
resultS[i].isBlack = false;
resultS[i].isBad = false;
resultS[i].isGray = false;
}
for (var i = 0; i < badResS.length; i++) {
badResS[i].isBlack = false;
badResS[i].isBad = false;
badResS[i].isGray = false;
}
return {
depF: resultS.reverse(),
badF: badResS
};
};
this.t_sort_master = function (sheetId, cellId) {
function getFirstNode(sheetId, cellId) {
var n = new Vertex(sheetId, cellId, thas.wb);
if (!nodes[n.nodeId]) {
var a = [];
for (var id in areaNodes) {
if (areaNodes[id].containCell(n)) {
a.push(areaNodes[id]);
}
}
if (a.length > 0) {
for (var i in a) {
n.addSlaveEdge(a[i]);
}
n.valid = false;
return n;
} else {
return undefined;
}
} else {
return nodes[n.nodeId];
}
}
function getNextNode(node) {
if (node) {
for (var id in node.masterEdges) {
var n = nodes[id];
if (n !== undefined) {
if ((n.isBlack === undefined || !n.isBlack) && !n.isBad) {
return n;
}
} else {
delete node.masterEdges[id];
}
}
}
return undefined;
}
var stack = [],
n = getFirstNode(sheetId, cellId),
__t = true,
next,
badResS = [],
resultS = [];
if (!n) {
return {
depF: resultS,
badF: badResS
};
}
while (1) {
if (n) {
if (n.isGray && !n.isArea) {
for (var i = stack.length - 1; i >= 0; i--) {
var bad = stack.pop();
bad.isBad = true;
badResS.push(bad);
}
}
}
if (n.valid && !n.isArea) {
for (var id in areaNodes) {
if (areaNodes[id].containCell(n)) {
areaNodes[id].addMasterEdge(n);
n.addSlaveEdge(areaNodes[id]);
}
}
n.valid = false;
}
next = getNextNode(n);
if (next !== undefined) {
n.isGray = true;
stack.push(n);
n = next;
} else {
n.isBlack = true;
n.isGray = false;
resultS.push(n);
if (stack.length < 1) {
break;
}
n = stack.pop();
n.isGray = false;
}
}
for (var i = 0; i < resultS.length; i++) {
resultS[i].isBlack = false;
resultS[i].isBad = false;
resultS[i].isGray = false;
}
for (var i = 0; i < badResS.length; i++) {
badResS[i].isBlack = false;
badResS[i].isBad = false;
badResS[i].isGray = false;
}
return {
depF: resultS,
badF: badResS
};
};
this.t_sort = function () {
for (var i in nodes) {
nodes[i].isBlack = false;
nodes[i].isBad = false;
nodes[i].isGray = false;
}
function getFirstNode() {
return nodes[nodesfirst];
}
function getNextNode(node) {
for (var id in node.masterEdges) {
var n = nodes[id];
if (n !== undefined) {
if ((n.isBlack === undefined || !n.isBlack) && !n.isBad) {
return n;
}
} else {
delete node.masterEdges[id];
}
}
return undefined;
}
var stack = [],
n = getFirstNode(),
__t = true,
next;
while (1) {
if (n.isGray) {
for (var i = stack.length - 1; i >= 0; i--) {
var bad = stack.pop();
bad.isBad = true;
badRes.push(bad);
if (stack[i] == n) {
break;
}
}
if (stack.length < 1) {
for (var id in __nodes) {
if (nodes[id] !== undefined && ((nodes[id].isBlack === undefined || !nodes[id].isBlack) && !nodes[id].isBad)) {
n = nodes[id];
delete __nodes[id];
}
}
}
}
next = getNextNode(n);
if (next !== undefined) {
n.isGray = true;
stack.push(n);
n = next;
} else {
n.isBlack = true;
n.isGray = false;
result.push(n);
if (stack.length < 1) {
n = undefined;
for (var id in __nodes) {
if (nodes[id] !== undefined && ((nodes[id].isBlack === undefined || !nodes[id].isBlack) && !nodes[id].isBad)) {
n = nodes[id];
delete __nodes[id];
break;
} else {
delete __nodes[id];
}
}
if (n) {
continue;
} else {
break;
}
}
n = stack.pop();
n.isGray = false;
}
}
return {
depF: result,
badF: badRes
};
};
this.returnNode = function () {
return nodes;
};
this.getNodesLength = function () {
return nodeslength;
};
this.getResult = function () {
return {
depF: result,
badF: badRes
};
};
this.checkOffset = function (BBox, offset, wsId, noDelete) {
var move = {},
stretch = {},
recalc = {};
for (var id in nodes) {
if (nodes[id].sheetId != wsId) {
continue;
}
var n = {
r1: nodes[id].firstCellAddress.getRow0(),
c1: nodes[id].firstCellAddress.getCol0(),
r2: nodes[id].lastCellAddress.getRow0(),
c2: nodes[id].lastCellAddress.getCol0()
};
if (nodes[id].isArea) {
var n1 = {
r1: n.r1 - n.r1,
c1: n.c1 - n.c1,
r2: n.r2 - n.r1,
c2: n.c2 - n.c1
};
n1.height = n1.r2 - n1.r1;
n1.width = n1.c2 - n1.c1;
var BBox1 = {
r1: BBox.r1 - n.r1,
c1: BBox.c1 - n.c1,
r2: BBox.r2 - n.r1,
c2: BBox.c2 - n.c1
};
n1.height = BBox1.r2 - BBox1.r1;
n1.width = BBox1.c2 - BBox1.c1;
if (BBox1.r1 > n1.r2 || BBox1.c1 > n1.c2 || (BBox.r2 < 0 && BBox1.c2 < 0)) {
continue;
} else {
if (offset.offsetRow == 0) {
if (offset.offsetCol == 0) {
continue;
} else {
if (BBox1.r2 < n1.r1) {
continue;
} else {
if (BBox1.r2 < n1.r2 || BBox1.r1 > n1.r1) {
recalc[id] = nodes[id];
} else {
if (offset.offsetCol > 0) {
if (BBox1.r1 <= n1.r1 && BBox1.r2 >= n1.r2) {
if (BBox1.c2 <= n1.c2 && BBox1.c1 <= n1.c1 || BBox1.c1 == n1.c1 && BBox1.c2 > n1.c2) {
move[id] = {
node: nodes[id],
offset: offset
};
} else {
if (BBox1.c1 > n1.c1 && BBox1.c1 <= n1.c2) {
stretch[id] = {
node: nodes[id],
offset: offset
};
}
}
}
} else {
if (BBox1.r1 <= n1.r1 && BBox1.r2 >= n1.r2) {
if (BBox1.c2 < n1.c1) {
move[id] = {
node: nodes[id],
offset: offset
};
} else {
if (BBox1.c2 >= n1.c1 && BBox1.c1 <= n1.c1) {
if (n1.r1 >= BBox1.r1 && n1.r2 <= BBox1.r2 && n1.c1 >= BBox1.c1 && n1.c2 <= BBox1.c2) {
move[id] = {
node: nodes[id],
offset: offset,
toDelete: !noDelete
};
recalc[id] = nodes[id];
} else {
move[id] = {
node: nodes[id],
offset: {
offsetCol: -Math.abs(n1.c1 - BBox1.c1),
offsetRow: offset.offsetRow
}
};
stretch[id] = {
node: nodes[id],
offset: {
offsetCol: -Math.abs(n1.c1 - BBox1.c2) - 1,
offsetRow: offset.offsetRow
}
};
recalc[id] = nodes[id];
}
} else {
if (BBox1.c1 > n1.c1 && BBox1.c1 <= n1.c2 || BBox1.c1 == n1.c1 && BBox1.c2 >= n1.c1) {
if (BBox1.c2 > n1.c2) {
stretch[id] = {
node: nodes[id],
offset: {
offsetCol: -Math.abs(n1.c2 - BBox1.c1) - 1,
offsetRow: offset.offsetRow
}
};
recalc[id] = nodes[id];
} else {
stretch[id] = {
node: nodes[id],
offset: offset
};
recalc[id] = nodes[id];
}
}
}
}
}
}
}
}
}
} else {
if (BBox1.c2 < n1.c1) {
continue;
} else {
if (BBox1.c2 < n1.c2 || BBox1.c1 > n1.c1) {
recalc[id] = nodes[id];
} else {
if (offset.offsetRow > 0) {
if (BBox1.c1 <= n1.c1 && BBox1.c2 >= n1.c2) {
if (BBox1.r2 <= n1.r2 && BBox1.r1 <= n1.r1 || BBox1.r1 == n1.r1 && BBox1.r2 > n1.r2) {
move[id] = {
node: nodes[id],
offset: offset
};
} else {
if (BBox1.r1 > n1.r1 && BBox1.r1 <= n1.r2) {
stretch[id] = {
node: nodes[id],
offset: offset
};
}
}
}
} else {
if (BBox1.c1 <= n1.c1 && BBox1.c2 >= n1.c2) {
if (BBox1.r2 < n1.r1) {
move[id] = {
node: nodes[id],
offset: offset
};
} else {
if (BBox1.r2 >= n1.r1 && BBox1.r1 <= n1.r1) {
if (n1.r1 >= BBox1.r1 && n1.r2 <= BBox1.r2 && n1.c1 >= BBox1.c1 && n1.c2 <= BBox1.c2) {
move[id] = {
node: nodes[id],
offset: offset,
toDelete: !noDelete
};
recalc[id] = nodes[id];
} else {
move[id] = {
node: nodes[id],
offset: {
offsetRow: -Math.abs(n1.r1 - BBox1.r1),
offsetCol: offset.offsetCol
}
};
stretch[id] = {
node: nodes[id],
offset: {
offsetRow: -Math.abs(n1.r1 - BBox1.r2) - 1,
offsetCol: offset.offsetCol
}
};
recalc[id] = nodes[id];
}
} else {
if (BBox1.r1 > n1.r1 && BBox1.r1 <= n1.r2 || BBox1.r1 == n1.r1 && BBox1.r2 >= n1.r1) {
if (BBox1.r2 > n1.r2) {
stretch[id] = {
node: nodes[id],
offset: {
offsetRow: -Math.abs(n1.r2 - BBox1.r1) - 1,
offsetCol: offset.offsetCol
}
};
recalc[id] = nodes[id];
} else {
stretch[id] = {
node: nodes[id],
offset: offset
};
recalc[id] = nodes[id];
}
}
}
}
}
}
}
}
}
}
} else {
if ((n.r1 >= BBox.r1 && n.r1 <= BBox.r2 && n.c1 >= BBox.c2 && offset.offsetCol != 0) || (n.c1 >= BBox.c1 && n.c1 <= BBox.c2 && n.r1 >= BBox.r2 && offset.offsetRow != 0) || (n.r1 >= BBox.r1 && n.r2 <= BBox.r2 && n.c1 >= BBox.c1 && n.c2 <= BBox.c2)) {
move[id] = {
node: nodes[id],
offset: offset,
toDelete: false
};
if (n.r1 >= BBox.r1 && n.r2 <= BBox.r2 && n.c1 >= BBox.c1 && n.c2 <= BBox.c2 && !noDelete && (offset.offsetCol < 0 || offset.offsetRow < 0)) {
move[id].toDelete = true;
recalc[id] = nodes[id];
}
}
}
}
return {
move: move,
stretch: stretch,
recalc: recalc
};
};
this.helper = function (BBox, wsId) {
var move = {},
recalc = {},
range = this.wb.getWorksheetById(wsId).getRange(new CellAddress(BBox.r1, BBox.c1, 0), new CellAddress(BBox.r2, BBox.c2, 0)),
n = new Vertex(range.getWorksheet().getId(), range.getName());
if (n.isArea) {
if (n.nodeId in nodes) {
move[n.nodeId] = nodes[n.nodeId];
} else {
for (var id2 in areaNodes) {
if (n.containCell(areaNodes[id2])) {
move[areaNodes[id2].nodeId] = nodes[areaNodes[id2].nodeId];
}
}
range = range.getCells();
for (var id in range) {
n = new Vertex(wsId, range[id].getName());
if (n.nodeId in nodes) {
move[n.nodeId] = nodes[n.nodeId];
}
for (var id2 in areaNodes) {
if (areaNodes[id2].containCell(n)) {
recalc[id2] = areaNodes[id2];
}
}
}
}
} else {
if (n.nodeId in nodes) {
move[n.nodeId] = nodes[n.nodeId];
}
for (var id in areaNodes) {
if (areaNodes[id].containCell(n)) {
recalc[id] = areaNodes[id];
}
}
}
return {
move: move,
recalc: recalc
};
};
this.drawDep = function (cellId, se) {
if (!cellId) {
return;
}
var _wsV = this.wb.oApi.wb.getWorksheet(),
_getCellMetrics = _wsV.cellCommentator.getCellMetrics,
_cc = _wsV.cellCommentator,
ctx = _wsV.overlayCtx,
_wsVM = _wsV.model,
nodeId = getVertexId(_wsVM.getId(), cellId),
node = this.getNode(_wsVM.getId(), cellId),
cell;
function gCM(_this, col, row) {
var metrics = {
top: 0,
left: 0,
width: 0,
height: 0,
result: false
};
var fvr = _this.getFirstVisibleRow();
var fvc = _this.getFirstVisibleCol();
var mergedRange = _wsVM.getMergedByCell(row, col);
if (mergedRange && (fvc < mergedRange.c2) && (fvr < mergedRange.r2)) {
var startCol = (mergedRange.c1 > fvc) ? mergedRange.c1 : fvc;
var startRow = (mergedRange.r1 > fvr) ? mergedRange.r1 : fvr;
metrics.top = _this.getCellTop(startRow, 0) - _this.getCellTop(fvr, 0) + _this.getCellTop(0, 0);
metrics.left = _this.getCellLeft(startCol, 0) - _this.getCellLeft(fvc, 0) + _this.getCellLeft(0, 0);
for (var i = startCol; i <= mergedRange.c2; i++) {
metrics.width += _this.getColumnWidth(i, 0);
}
for (var i = startRow; i <= mergedRange.r2; i++) {
metrics.height += _this.getRowHeight(i, 0);
}
metrics.result = true;
} else {
metrics.top = _this.getCellTop(row, 0) - _this.getCellTop(fvr, 0) + _this.getCellTop(0, 0);
metrics.left = _this.getCellLeft(col, 0) - _this.getCellLeft(fvc, 0) + _this.getCellLeft(0, 0);
metrics.width = _this.getColumnWidth(col, 0);
metrics.height = _this.getRowHeight(row, 0);
metrics.result = true;
}
return metrics;
}
if (!node) {
return;
}
cell = node.returnCell();
if (!cell) {
return;
}
var m = [cell.getCellAddress().getRow0(), cell.getCellAddress().getCol0()],
rc = [],
me = se ? node.getSlaveEdges() : node.getMasterEdges();
for (var id in me) {
if (me[id].sheetId != node.sheetId) {
return;
}
if (!me[id].isArea) {
var _t1 = gCM(_wsV, me[id].returnCell().getCellAddress().getCol0(), me[id].returnCell().getCellAddress().getRow0());
rc.push({
t: _t1.top,
l: _t1.left,
w: _t1.width,
h: _t1.height,
apt: _t1.top + _t1.height / 2,
apl: _t1.left + _t1.width / 4
});
} else {
var _t1 = gCM(_wsV, me[id].firstCellAddress.getCol0(), me[id].firstCellAddress.getRow0()),
_t2 = gCM(_wsV, me[id].lastCellAddress.getCol0(), me[id].lastCellAddress.getRow0());
rc.push({
t: _t1.top,
l: _t1.left,
w: _t2.left + _t2.width - _t1.left,
h: _t2.top + _t2.height - _t1.top,
apt: _t1.top + _t1.height / 2,
apl: _t1.left + _t1.width / 4
});
}
}
if (rc.length == 0) {
return;
}
function draw_arrow(context, fromx, fromy, tox, toy) {
var headlen = 9;
var dx = tox - fromx;
var dy = toy - fromy;
var angle = Math.atan2(dy, dx),
_a = Math.PI / 18;
context.save().setLineWidth(1).beginPath().moveTo(_cc.pxToPt(fromx), _cc.pxToPt(fromy)).lineTo(_cc.pxToPt(tox), _cc.pxToPt(toy));
context.moveTo(_cc.pxToPt(tox - headlen * Math.cos(angle - _a)), _cc.pxToPt(toy - headlen * Math.sin(angle - _a))).lineTo(_cc.pxToPt(tox), _cc.pxToPt(toy)).lineTo(_cc.pxToPt(tox - headlen * Math.cos(angle + _a)), _cc.pxToPt(toy - headlen * Math.sin(angle + _a))).lineTo(_cc.pxToPt(tox - headlen * Math.cos(angle - _a)), _cc.pxToPt(toy - headlen * Math.sin(angle - _a))).setStrokeStyle("#0000FF").setFillStyle("#0000FF").stroke().fill().closePath().restore();
}
function h(m, rc) {
var m = gCM(_wsV, m[1], m[0]);
var arrowPointTop = 10,
arrowPointLeft = 10;
for (var i = 0; i < rc.length; i++) {
var m2 = rc[i],
x1 = Math.floor(m2.apl),
y1 = Math.floor(m2.apt),
x2 = Math.floor(m.left + m.width / 4),
y2 = Math.floor(m.top + m.height / 2);
if (x1 < 0 && x2 < 0 || y1 < 0 && y2 < 0) {
continue;
}
if (m2.apl > 0 && m2.apt > 0) {
ctx.save().setLineWidth(1).setStrokeStyle("#0000FF").rect(_cc.pxToPt(m2.l), _cc.pxToPt(m2.t), _cc.pxToPt(m2.w - 1), _cc.pxToPt(m2.h - 1)).stroke().restore();
}
if (y1 < 0 && x1 != x2) {
x1 = x1 - Math.floor(Math.sqrt(((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)) * y1 * y1 / ((y2 - y1) * (y2 - y1))) / 2);
}
if (x1 < 0 && y1 != y2) {
y1 = y1 - Math.floor(Math.sqrt(((y1 - y2) * (y1 - y2) + (x1 - x2) * (x1 - x2)) * x1 * x1 / ((x2 - x1) * (x2 - x1))) / 2);
}
draw_arrow(ctx, x1 < 0 ? _wsV.getCellLeft(0, 0) : x1, y1 < 0 ? _wsV.getCellTop(0, 0) : y1, x2, y2);
if (m2.apl > 0 && m2.apt > 0) {
ctx.save().beginPath().arc(_cc.pxToPt(Math.floor(m2.apl)), _cc.pxToPt(Math.floor(m2.apt)), 3, 0, 2 * Math.PI, false, -0.5, -0.5).setFillStyle("#0000FF").fill().closePath().restore();
}
}
}
ctx.clear();
_wsV._drawSelection();
if (se) {
for (var i = 0; i < rc.length; i++) {
h(rc[i], [m]);
}
} else {
h(m, rc);
}
};
this.removeNodeBySheetId = function (sheetId) {
var arr = false;
this.wb.needRecalc = [];
this.wb.needRecalc.length = 0;
for (var id in nodes) {
if (nodes[id].sheetId == sheetId) {
var se = nodes[id].getSlaveEdges();
for (var id2 in se) {
if (se[id2].sheetId != sheetId) {
if (!arr) {
arr = true;
}
this.wb.needRecalc[id2] = [se[id2].sheetId, se[id2].cellId];
this.wb.needRecalc.length++;
}
}
nodes[id].deleteAllMasterEdges();
nodes[id].deleteAllSlaveEdges();
nodes[id] = null;
delete nodes[id];
nodeslength--;
}
}
return arr;
};
}
function Vertex(sheetId, cellId, wb) {
this.sheetId = sheetId;
this.cellId = cellId;
this.valid = true;
this.nodeId = sheetId + cCharDelimiter + cellId;
var nIndex = cellId.indexOf(":");
if (this.isArea = (nIndex > -1)) {
var sFirstCell = cellId.substring(0, nIndex);
var sLastCell = cellId.substring(nIndex + 1);
if (!sFirstCell.match(/[^a-z]/ig)) {
this.firstCellAddress = new CellAddress(sFirstCell + "1");
this.lastCellAddress = new CellAddress(sLastCell + gc_nMaxRow.toString());
} else {
if (!sFirstCell.match(/[^0-9]/ig)) {
this.firstCellAddress = new CellAddress("A" + sFirstCell);
this.lastCellAddress = new CellAddress(g_oCellAddressUtils.colnumToColstr(gc_nMaxCol) + sLastCell);
} else {
this.firstCellAddress = new CellAddress(sFirstCell);
this.lastCellAddress = new CellAddress(sLastCell);
}
}
this.containCell = function (node) {
if (this.sheetId != node.sheetId) {
return false;
}
if (node.firstCellAddress.row >= this.firstCellAddress.row && node.firstCellAddress.col >= this.firstCellAddress.col && node.lastCellAddress.row <= this.lastCellAddress.row && node.lastCellAddress.col <= this.lastCellAddress.col) {
return true;
}
return false;
};
} else {
this.firstCellAddress = this.lastCellAddress = new CellAddress(cellId);
}
if (wb && !this.isArea) {
this.wb = wb;
var c = new CellAddress(this.cellId);
this.cell = this.wb.getWorksheetById(this.sheetId)._getCellNoEmpty(c.getRow0(), c.getCol0());
}
this.isBlack = false;
this.isGray = false;
this.isBad = false;
this.masterEdges = null;
this.helpMasterEdges = {};
this.slaveEdges = null;
this.refCount = 0;
this.weightNode = 0;
}
Vertex.prototype = {
constructor: Vertex,
changeCellId: function (cellId) {
var lastId = this.nodeId;
this.cellId = cellId;
this.nodeId = this.sheetId + cCharDelimiter + cellId;
for (var id in this.masterEdges) {
if (lastId in this.masterEdges[id].slaveEdges) {
this.masterEdges[id].slaveEdges[this.nodeId] = this.masterEdges[id].slaveEdges[lastId];
this.masterEdges[id].slaveEdges[lastId] = null;
delete this.masterEdges[id].slaveEdges[lastId];
}
}
for (var id in this.slaveEdges) {
if (lastId in this.slaveEdges[id].masterEdges) {
this.slaveEdges[id].masterEdges[this.nodeId] = this.slaveEdges[id].masterEdges[lastId];
this.slaveEdges[id].masterEdges[lastId] = null;
delete this.slaveEdges[id].masterEdges[lastId];
}
}
},
addMasterEdge: function (node) {
if (!this.masterEdges) {
this.masterEdges = {};
}
this.masterEdges[node.nodeId] = node;
this.refCount++;
},
addHelpMasterEdge: function (node) {
this.helpMasterEdges[node.nodeId] = node;
},
addSlaveEdge: function (node) {
if (!this.slaveEdges) {
this.slaveEdges = {};
}
this.slaveEdges[node.nodeId] = node;
this.refCount++;
},
getMasterEdges: function () {
return this.masterEdges;
},
getHelpMasterEdges: function () {
return this.helpMasterEdges;
},
getSlaveEdges: function () {
return this.slaveEdges;
},
getSlaveEdges2: function () {
var ret = {},
count = 0;
for (var id in this.slaveEdges) {
ret[id] = this.slaveEdges[id];
count++;
}
if (count > 0) {
return ret;
} else {
return null;
}
},
deleteMasterEdge: function (node) {
this.masterEdges[node.nodeId] = null;
delete this.masterEdges[node.nodeId];
this.refCount--;
},
deleteHelpMasterEdge: function (node) {
delete this.helpMasterEdges[node.nodeId];
},
deleteSlaveEdge: function (node) {
this.slaveEdges[node.nodeId] = null;
delete this.slaveEdges[node.nodeId];
this.refCount--;
},
deleteAllMasterEdges: function () {
var ret = [];
for (var id in this.masterEdges) {
this.masterEdges[id].deleteSlaveEdge(this);
this.masterEdges[id] = null;
delete this.masterEdges[id];
this.refCount--;
ret.push(id);
}
this.masterEdges = null;
return ret;
},
deleteAllSlaveEdges: function () {
var ret = [];
for (var id in this.slaveEdges) {
this.slaveEdges[id].deleteMasterEdge(this);
this.slaveEdges[id] = null;
delete this.slaveEdges[id];
this.refCount--;
ret.push(id);
}
this.slaveEdges = null;
return ret;
},
returnCell: function () {
return this.cell;
}
};
function getVertexId(sheetId, cellId) {
return sheetId + cCharDelimiter + cellId;
}
function lockDraw(wb) {
lc++;
wb.isNeedCacheClean = false;
if (lc == 0) {
arrRecalc = {};
}
}
function unLockDraw(wb) {
lc > 0 ? lc--:true;
if (lc == 0) {
wb.isNeedCacheClean = true;
arrRecalc = {};
}
}
function buildRecalc(_wb, notrec) {
var ws;
if (lc > 1) {
return;
}
for (var id in arrRecalc) {
ws = _wb.getWorksheetById(id);
if (ws) {
ws._BuildDependencies(arrRecalc[id]);
}
}
if (!notrec) {
recalc(_wb);
}
}
function searchCleenCacheArea(o1, o2) {
var o3 = {};
for (var _item in o2) {
if (o1 && o1.hasOwnProperty(_item)) {
if (o1[_item].min.getRow() > o2[_item].min.getRow()) {
o1[_item].min = new CellAddress(o2[_item].min.getRow(), o1[_item].min.getCol());
}
if (o1[_item].min.getCol() > o2[_item].min.getCol()) {
o1[_item].min = new CellAddress(o1[_item].min.getRow(), o2[_item].min.getCol());
}
if (o1[_item].max.getRow() < o2[_item].max.getRow()) {
o1[_item].max = new CellAddress(o2[_item].max.getRow(), o1[_item].max.getCol());
}
if (o1[_item].max.getCol() < o2[_item].max.getCol()) {
o1[_item].max = new CellAddress(o1[_item].max.getRow(), o2[_item].max.getCol());
}
o3[_item] = o1[_item];
} else {
o3[_item] = o2[_item];
}
}
for (var _item in o1) {
if (o3 && o3.hasOwnProperty(_item)) {
if (o1[_item].min.getRow() > o3[_item].min.getRow()) {
o1[_item].min = new CellAddress(o3[_item].min.getRow(), o1[_item].min.getCol());
}
if (o1[_item].min.getCol() > o3[_item].min.getCol()) {
o1[_item].min = new CellAddress(o1[_item].min.getRow(), o3[_item].min.getCol());
}
if (o1[_item].max.getRow() < o3[_item].max.getRow()) {
o1[_item].max = new CellAddress(o3[_item].max.getRow(), o1[_item].max.getCol());
}
if (o1[_item].max.getCol() < o3[_item].max.getCol()) {
o1[_item].max = new CellAddress(o1[_item].max.getRow(), o3[_item].max.getCol());
}
o3[_item] = o1[_item];
} else {
o3[_item] = o1[_item];
}
}
return o3;
}
function helpRecalc(dep1, nR, calculatedCells, wb) {
var sr1, sr2;
for (var i = 0; i < dep1.badF.length; i++) {
for (var j = 0; j < dep1.depF.length; j++) {
if (dep1.badF[i] == dep1.depF[j]) {
dep1.depF.splice(j, 1);
}
}
}
for (var j = 0; j < dep1.depF.length; j++) {
if (dep1.depF[j].nodeId in nR) {
nR[dep1.depF[j].nodeId] = undefined;
delete nR[dep1.depF[j].nodeId];
nR.length--;
}
}
for (var j = 0; j < dep1.badF.length; j++) {
if (dep1.badF[j].nodeId in nR) {
nR[dep1.badF[j].nodeId] = undefined;
delete nR[dep1.badF[j].nodeId];
nR.length--;
}
}
sr1 = wb.recalcDependency(dep1.badF, true);
sr2 = wb.recalcDependency(dep1.depF, false);
return searchCleenCacheArea(sr1, sr2);
}
function sortDependency(ws, ar) {
var wb = ws.workbook,
dep, sr1, sr2, sr, calculatedCells = {};
ws._BuildDependencies(ar);
for (var id in ar) {
if (!wb.dependencyFormulas.nodeExist2(ws.Id, ar[id])) {
continue;
}
dep = wb.dependencyFormulas.t_sort_slave(ws.Id, ar[id]);
for (var i = 0; i < dep.badF.length; i++) {
for (var j = 0; j < dep.depF.length; j++) {
if (dep.badF[i] == dep.depF[j]) {
dep.depF.splice(j, 1);
}
}
}
sr1 = helpRecalc(dep, wb.needRecalc, calculatedCells, wb);
sr = searchCleenCacheArea(sr, sr1);
}
for (var _item in sr) {
wb.handlers.trigger("cleanCellCache", _item, new Asc.Range(0, sr[_item].min.getRow0(), wb.getWorksheetById(_item).getColsCount() - 1, sr[_item].max.getRow0()), c_oAscCanChangeColWidth.numbers);
}
}
function recalc(wb) {
var nR = wb.needRecalc,
thas = wb,
calculatedCells = new Object(),
nRLength = nR.length,
first = true,
startActionOn = false,
timerID,
timeStart,
timeEnd,
timeCount = 0,
timeoutID1,
timeoutID2,
sr = new Object();
function R() {
if (nR.length > 0) {
timeStart = (new Date()).getTime();
var dep1, f = false,
id;
for (var id1 in nR) {
if (id1 == "length") {
continue;
}
id = id1;
break;
}
if (id === undefined) {
nR.length = 0;
}
if (id in nR) {
var nRId0 = nR[id][0],
nRId1 = nR[id][1],
sr1,
sr2;
dep1 = thas.dependencyFormulas.t_sort_master(nRId0, nRId1);
sr1 = helpRecalc(dep1, nR, calculatedCells, thas);
dep1 = thas.dependencyFormulas.t_sort_slave(nRId0, nRId1);
sr2 = helpRecalc(dep1, nR, calculatedCells, thas);
sr = searchCleenCacheArea(sr, searchCleenCacheArea(sr1, sr2));
if (nR[id]) {
delete nR[id];
nR.length--;
}
id = undefined;
}
clearTimeout(timerID);
timeEnd = (new Date()).getTime();
timeCount += (timeEnd - timeStart);
if (first) {
timeoutID1 = setTimeout(function () {
var pr = Math.round((nRLength - nR.length) / nRLength * 10000) / 100;
if (pr == 0 || timeCount * 100 / pr > 2000) {
timeoutID2 = setTimeout(function () {
startActionOn = true;
thas.handlers.trigger("asc_onStartAction", c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Recalc);
},
0);
}
},
500);
first = false;
}
timerID = setTimeout(R, 0);
} else {
first = false;
thas.isNeedCacheClean = true;
for (var _item in sr) {
thas.handlers.trigger("cleanCellCache", _item, new Asc.Range(0, sr[_item].min.getRow0(), thas.getWorksheetById(_item).getColsCount() - 1, sr[_item].max.getRow0()), c_oAscCanChangeColWidth.numbers);
}
clearTimeout(timeoutID1);
clearTimeout(timeoutID2);
if (startActionOn) {
thas.handlers.trigger("asc_onEndAction", c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Recalc);
}
nR.length = 0;
}
}
if (nR.length > 0) {
R();
}
}
function angleFormatToInterface(val) {
var nRes = 0;
if (0 <= val && val <= 180) {
nRes = val <= 90 ? val : 90 - val;
}
return nRes;
}
function angleFormatToInterface2(val) {
if (g_nVerticalTextAngle == val) {
return val;
} else {
return angleFormatToInterface(val);
}
}
function angleInterfaceToFormat(val) {
var nRes = val;
if (-90 <= val && val <= 90) {
if (val < 0) {
nRes = 90 - val;
}
} else {
if (g_nVerticalTextAngle != val) {
nRes = 0;
}
}
return nRes;
}
$(function () {
aStandartNumFormats = new Array();
aStandartNumFormats[0] = "General";
aStandartNumFormats[1] = "0";
aStandartNumFormats[2] = "0.00";
aStandartNumFormats[3] = "#,##0";
aStandartNumFormats[4] = "#,##0.00";
aStandartNumFormats[9] = "0%";
aStandartNumFormats[10] = "0.00%";
aStandartNumFormats[11] = "0.00E+00";
aStandartNumFormats[12] = "# ?/?";
aStandartNumFormats[13] = "# ??/??";
aStandartNumFormats[14] = "m/d/yyyy";
aStandartNumFormats[15] = "d-mmm-yy";
aStandartNumFormats[16] = "d-mmm";
aStandartNumFormats[17] = "mmm-yy";
aStandartNumFormats[18] = "h:mm AM/PM";
aStandartNumFormats[19] = "h:mm:ss AM/PM";
aStandartNumFormats[20] = "h:mm";
aStandartNumFormats[21] = "h:mm:ss";
aStandartNumFormats[22] = "m/d/yyyy h:mm";
aStandartNumFormats[37] = "#,##0_);(#,##0)";
aStandartNumFormats[38] = "#,##0_);[Red](#,##0)";
aStandartNumFormats[39] = "#,##0.00_);(#,##0.00)";
aStandartNumFormats[40] = "#,##0.00_);[Red](#,##0.00)";
aStandartNumFormats[45] = "mm:ss";
aStandartNumFormats[46] = "[h]:mm:ss";
aStandartNumFormats[47] = "mm:ss.0";
aStandartNumFormats[48] = "##0.0E+0";
aStandartNumFormats[49] = "@";
aStandartNumFormatsId = new Object();
for (var i in aStandartNumFormats) {
aStandartNumFormatsId[aStandartNumFormats[i]] = i - 0;
}
});
function Workbook(sUrlPath, eventsHandlers, oApi) {
this.oApi = oApi;
this.sUrlPath = sUrlPath;
this.handlers = eventsHandlers;
this.needRecalc = {
length: 0
};
this.dependencyFormulas = new DependencyGraph(this);
this.nActive = 0;
History = new CHistory(this);
g_oIdCounter = new CIdCounter();
g_oTableId = new CTableId();
this.theme = null;
this.clrSchemeMap = null;
this.DefinedNames = new Object();
this.oRealDefinedNames = new Object();
this.oNameGenerator = new NameGenerator(this);
this.CellStyles = new CCellStyles();
this.TableStyles = new CTableStyles();
this.oStyleManager = new StyleManager(this);
this.calcChain = new Array();
this.aWorksheets = new Array();
this.aWorksheetsById = new Object();
this.cwf = {};
this.isNeedCacheClean = true;
this.startActionOn = false;
this.aCollaborativeActions = new Array();
this.bCollaborativeChanges = false;
this.bUndoChanges = false;
this.bRedoChanges = false;
this.aCollaborativeChangeElements = new Array();
}
Workbook.prototype.initGlobalObjects = function () {
g_oUndoRedoCell = new UndoRedoCell(this);
g_oUndoRedoWorksheet = new UndoRedoWoorksheet(this);
g_oUndoRedoWorkbook = new UndoRedoWorkbook(this);
g_oUndoRedoCol = new UndoRedoRowCol(this, false);
g_oUndoRedoRow = new UndoRedoRowCol(this, true);
g_oUndoRedoComment = new UndoRedoComment(this);
g_oUndoRedoAutoFilters = new UndoRedoAutoFilters(this);
g_oUndoRedoGraphicObjects = new UndoRedoGraphicObjects(this);
g_oIdCounter.Set_Load(false);
};
Workbook.prototype.init = function () {
if (this.nActive < 0) {
this.nActive = 0;
}
if (this.nActive >= this.aWorksheets.length) {
this.nActive = this.aWorksheets.length - 1;
}
this.buildDependency();
var nR = this.needRecalc,
thas = this,
calculatedCells = {},
nRLength = nR.length,
timeStart, timeEnd, timeCount = 0,
first = true,
sr;
if (nR.length > 0) {
for (var id in nR) {
var sr1, sr2;
timeStart = (new Date()).getTime();
var dep1, f = false;
if (id == "length") {
continue;
}
dep1 = thas.dependencyFormulas.t_sort_master(nR[id][0], nR[id][1]);
for (var i = 0; i < dep1.badF.length; i++) {
for (var j = 0; j < dep1.depF.length; j++) {
if (dep1.badF[i] == dep1.depF[j]) {
dep1.depF.splice(j, 1);
}
}
}
for (var j = 0; j < dep1.depF.length; j++) {
if (dep1.depF[j].nodeId in nR) {
nR[dep1.depF[j].nodeId] = undefined;
delete nR[dep1.depF[j].nodeId];
nR.length--;
}
}
for (var j = 0; j < dep1.badF.length; j++) {
if (dep1.badF[j].nodeId in nR) {
nR[dep1.badF[j].nodeId] = undefined;
delete nR[dep1.badF[j].nodeId];
nR.length--;
}
}
sr1 = thas.recalcDependency(dep1.badF, true, true);
for (var k = 0; k < dep1.depF.length; k++) {
if (dep1.depF[k].nodeId in calculatedCells) {
dep1.depF.splice(k, 1);
k--;
}
}
sr2 = thas.recalcDependency(dep1.depF, false);
for (var k = 0; k < dep1.depF.length; k++) {
calculatedCells[dep1.depF[k].nodeId] = dep1.depF[k].nodeId;
}
sr = searchCleenCacheArea(sr, searchCleenCacheArea(sr1, sr2));
timeEnd = (new Date()).getTime();
timeCount += (timeEnd - timeStart);
}
first = false;
thas.isNeedCacheClean = true;
var ws = thas.getWorksheet(thas.getActive());
thas.handlers.trigger("cleanCellCache", ws.getId(), new Asc.Range(0, 0, ws.getColsCount() - 1, ws.getRowsCount() - 1), c_oAscCanChangeColWidth.numbers);
thas.startActionOn = false;
thas.handlers.trigger("asc_onEndAction", c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Recalc);
}
for (var i = 0, length = this.aWorksheets.length; i < length; ++i) {
var ws = this.aWorksheets[i];
ws.initPostOpen();
}
};
Workbook.prototype.rebuildColors = function () {
g_oColorManager.rebuildColors();
for (var i = 0, length = this.aWorksheets.length; i < length; ++i) {
this.aWorksheets[i].rebuildColors();
}
};
Workbook.prototype.getDefaultFont = function () {
return g_oDefaultFont.fn;
};
Workbook.prototype.getDefaultSize = function () {
return g_oDefaultFont.fs;
};
Workbook.prototype.getActive = function () {
return this.nActive;
};
Workbook.prototype.setActive = function (index) {
if (index >= 0 && index < this.aWorksheets.length) {
this.nActive = index;
return true;
}
return false;
};
Workbook.prototype.getWorksheet = function (index) {
if (index >= 0 && index < this.aWorksheets.length) {
return this.aWorksheets[index];
}
return null;
};
Workbook.prototype.getWorksheetById = function (id) {
return this.aWorksheetsById[id];
};
Workbook.prototype.getWorksheetByName = function (name) {
for (var i = 0; i < this.aWorksheets.length; i++) {
if (this.aWorksheets[i].getName() == name) {
return this.aWorksheets[i];
}
}
return null;
};
Workbook.prototype.getWorksheetIndexByName = function (name) {
for (var i = 0; i < this.aWorksheets.length; i++) {
if (this.aWorksheets[i].getName() == name) {
return i;
}
}
return null;
};
Workbook.prototype.getWorksheetCount = function () {
return this.aWorksheets.length;
};
Workbook.prototype.createWorksheet = function (indexBefore, sName, sId) {
History.TurnOff();
var oNewWorksheet = new Woorksheet(this, this.aWorksheets.length, true, sId);
if (null != sName) {
if (true == this.checkValidSheetName(sName)) {
oNewWorksheet.sName = sName;
}
}
oNewWorksheet.init();
oNewWorksheet.initPostOpen();
if (indexBefore >= 0 && indexBefore < this.aWorksheets.length) {
this.aWorksheets.splice(indexBefore, 0, oNewWorksheet);
} else {
indexBefore = this.aWorksheets.length;
this.aWorksheets.push(oNewWorksheet);
}
this.aWorksheetsById[oNewWorksheet.getId()] = oNewWorksheet;
this._updateWorksheetIndexes();
this.setActive(oNewWorksheet.index);
if (indexBefore > 0 && indexBefore < this.aWorksheets.length - 1) {
var sheetStart = this.getWorksheet(indexBefore - 1).getId(),
sheetStop = this.getWorksheet(indexBefore + 1).getId(),
nodesSheetStart = this.dependencyFormulas.getNodeBySheetId(sheetStart),
nodesSheetStop = this.dependencyFormulas.getNodeBySheetId(sheetStop),
arr = {};
for (var i = 0; i < nodesSheetStart.length; i++) {
var n = nodesSheetStart[i].getSlaveEdges();
for (var id in n) {
if (n[id].weightNode == 2) {
arr[n[id].nodeId] = n[id];
}
n[id].weightNode = 0;
}
}
for (var i = 0; i < nodesSheetStop.length; i++) {
var n = nodesSheetStop[i].getSlaveEdges();
for (var id in n) {
if (n[id].weightNode == 2) {
arr[n[id].nodeId] = n[id];
}
n[id].weightNode = 0;
}
}
for (var id in arr) {
arr[id].cell.formulaParsed.buildDependencies();
}
}
History.TurnOn();
History.Create_NewPoint();
History.Add(g_oUndoRedoWorkbook, historyitem_Workbook_SheetAdd, null, null, new UndoRedoData_SheetAdd(indexBefore, oNewWorksheet.getName(), null, oNewWorksheet.getId()));
return oNewWorksheet.index;
};
Workbook.prototype.copyWorksheet = function (index, insertBefore, sName, sId, bFromRedo) {
if (index >= 0 && index < this.aWorksheets.length) {
History.TurnOff();
var wsFrom = this.aWorksheets[index];
var nameSheet = wsFrom.getName();
var newSheet = wsFrom.clone(sId, bFromRedo);
if (null != sName) {
if (true == this.checkValidSheetName(sName)) {
newSheet.sName = sName;
}
}
newSheet.init();
newSheet.initPostOpen();
if (null != insertBefore && insertBefore >= 0 && insertBefore < this.aWorksheets.length) {
this.aWorksheets.splice(insertBefore, 0, newSheet);
} else {
this.aWorksheets.push(newSheet);
}
this.aWorksheetsById[newSheet.getId()] = newSheet;
this._updateWorksheetIndexes();
if (this.cwf[wsFrom.getId()]) {
this.cwf[newSheet.getId()] = {
cells: {}
};
for (var id in this.cwf[wsFrom.getId()].cells) {
this.cwf[newSheet.getId()].cells[id] = this.cwf[wsFrom.getId()].cells[id];
}
this.buildDependency();
}
History.TurnOn();
History.Create_NewPoint();
History.Add(g_oUndoRedoWorkbook, historyitem_Workbook_SheetAdd, null, null, new UndoRedoData_SheetAdd(insertBefore, newSheet.getName(), wsFrom.getId(), newSheet.getId()));
if (! (bFromRedo === true)) {
wsFrom.copyDrawingObjects(newSheet);
}
}
};
Workbook.prototype.insertWorksheet = function (index, sheet, cwf) {
if (null != index && index >= 0 && index < this.aWorksheets.length) {
this.aWorksheets.splice(index, 0, sheet);
} else {
this.aWorksheets.push(sheet);
}
this.aWorksheetsById[sheet.getId()] = sheet;
this._updateWorksheetIndexes();
this.cwf[sheet.getId()] = cwf;
this.buildDependency();
};
Workbook.prototype.replaceWorksheet = function (indexFrom, indexTo) {
if (indexFrom >= 0 && indexFrom < this.aWorksheets.length && indexTo >= 0 && indexTo < this.aWorksheets.length) {
History.TurnOff();
var oWsTo = this.aWorksheets[indexTo];
var tempW = {
wFN: this.aWorksheets[indexFrom].getName(),
wFI: indexFrom,
wFId: this.aWorksheets[indexFrom].getId(),
wTN: oWsTo.getName(),
wTI: indexTo,
wTId: oWsTo.getId()
};
var movedSheet = this.aWorksheets.splice(indexFrom, 1);
this.aWorksheets.splice(indexTo, 0, movedSheet[0]);
this._updateWorksheetIndexes();
lockDraw(this);
var a = this.dependencyFormulas.getNodeBySheetId(movedSheet[0].getId());
for (var i = 0; i < a.length; i++) {
var se = a[i].getSlaveEdges();
if (se) {
for (var id in se) {
var cID = se[id].cellId,
_ws = this.getWorksheetById(se[id].sheetId),
f = _ws.getCell2(cID).getCells()[0].sFormula;
if (f == null || f == undefined) {
continue;
}
if (f.indexOf(tempW.wFN + ":") > 0 || f.indexOf(":" + tempW.wFN) > 0) {
var _c = _ws.getCell2(cID).getCells()[0];
_c.setFormula(_c.formulaParsed.moveSheet(tempW).assemble());
this.dependencyFormulas.deleteMasterNodes(_ws.Id, cID);
if (!arrRecalc[_ws.getId()]) {
arrRecalc[_ws.getId()] = {};
}
arrRecalc[_ws.getId()][cID] = cID;
this.needRecalc[getVertexId(_ws.getId(), cID)] = [_ws.getId(), cID];
if (this.needRecalc.length < 0) {
this.needRecalc.length = 0;
}
this.needRecalc.length++;
} else {
if (f.indexOf(_ws.getName()) < 0) {
this.dependencyFormulas.deleteMasterNodes(_ws.Id, cID);
_ws._BuildDependencies({
id: cID
});
if (!arrRecalc[_ws.getId()]) {
arrRecalc[_ws.getId()] = {};
}
arrRecalc[_ws.getId()][cID] = cID;
this.needRecalc[getVertexId(_ws.getId(), cID)] = [_ws.getId(), cID];
if (this.needRecalc.length < 0) {
this.needRecalc.length = 0;
}
this.needRecalc.length++;
}
}
}
}
}
History.TurnOn();
History.Create_NewPoint();
History.Add(g_oUndoRedoWorkbook, historyitem_Workbook_SheetMove, null, null, new UndoRedoData_FromTo(indexFrom, indexTo), true);
buildRecalc(this);
unLockDraw(this);
}
};
Workbook.prototype.removeWorksheet = function (nIndex, outputParams) {
var bEmpty = true;
for (var i = 0, length = this.aWorksheets.length; i < length; ++i) {
var worksheet = this.aWorksheets[i];
if (false == worksheet.getHidden() && i != nIndex) {
bEmpty = false;
break;
}
}
if (bEmpty) {
return -1;
}
var nNewActive = this.nActive;
var removedSheet = this.aWorksheets.splice(nIndex, 1);
if (removedSheet.length > 0) {
History.TurnOff();
var _cwf;
for (var i = 0; i < removedSheet.length; i++) {
var name = removedSheet[i];
_cwf = this.cwf[name.getId()];
this.cwf[name.getId()] = null;
delete this.cwf[name.getId()];
delete this.aWorksheetsById[name.getId()];
}
lockDraw(this);
var a = this.dependencyFormulas.getNodeBySheetId(removedSheet[0].getId());
for (var i = 0; i < a.length; i++) {
var se = a[i].getSlaveEdges();
if (se) {
for (var id in se) {
if (se[id].sheetId != removedSheet[0].getId()) {
var _ws = this.getWorksheetById(se[id].sheetId),
f = _ws.getCell2(se[id].cellId).getCells()[0].sFormula,
cID = se[id].cellId;
if (!arrRecalc[_ws.getId()]) {
arrRecalc[_ws.getId()] = {};
}
arrRecalc[_ws.getId()][cID] = cID;
this.needRecalc[getVertexId(_ws.getId(), cID)] = [_ws.getId(), cID];
if (this.needRecalc.length < 0) {
this.needRecalc.length = 0;
}
this.needRecalc.length++;
}
}
}
}
this.dependencyFormulas.removeNodeBySheetId(name.getId());
var bFind = false;
if (nNewActive < this.aWorksheets.length) {
for (var i = nNewActive; i < this.aWorksheets.length; ++i) {
if (false == this.aWorksheets[i].getHidden()) {
bFind = true;
nNewActive = i;
break;
}
}
}
if (false == bFind) {
for (var i = nNewActive - 1; i >= 0; --i) {
if (false == this.aWorksheets[i].getHidden()) {
nNewActive = i;
break;
}
}
}
History.TurnOn();
History.Create_NewPoint();
var oRemovedSheet = removedSheet[0];
History.Add(g_oUndoRedoWorkbook, historyitem_Workbook_SheetRemove, null, null, new UndoRedoData_SheetRemove(nIndex, oRemovedSheet.getId(), oRemovedSheet, _cwf));
if (null != outputParams) {
outputParams.sheet = oRemovedSheet;
outputParams.cwf = _cwf;
}
this._updateWorksheetIndexes();
this.nActive = nNewActive;
buildRecalc(this);
unLockDraw(this);
return nNewActive;
}
return -1;
};
Workbook.prototype._updateWorksheetIndexes = function () {
for (var i = 0, length = this.aWorksheets.length; i < length; ++i) {
this.aWorksheets[i]._setIndex(i);
}
};
Workbook.prototype.checkUniqueSheetName = function (name) {
var workbookSheetCount = this.getWorksheetCount();
for (var i = 0; i < workbookSheetCount; i++) {
if (this.getWorksheet(i).getName() == name) {
return i;
}
}
return -1;
};
Workbook.prototype.checkValidSheetName = function (name) {
return name.length < g_nSheetNameMaxLength;
};
Workbook.prototype.getUniqueSheetNameFrom = function (name, bCopy) {
var nIndex = 1;
var sNewName = "";
var fGetPostfix = null;
if (bCopy) {
var result = /^(.*)\((\d)\)$/.exec(name);
if (result) {
fGetPostfix = function (nIndex) {
return "(" + nIndex + ")";
};
name = result[1];
} else {
fGetPostfix = function (nIndex) {
return " (" + nIndex + ")";
};
name = name;
}
} else {
fGetPostfix = function (nIndex) {
return nIndex.toString();
};
}
var workbookSheetCount = this.getWorksheetCount();
while (nIndex < 10000) {
var sPosfix = fGetPostfix(nIndex);
sNewName = name + sPosfix;
if (sNewName.length > g_nSheetNameMaxLength) {
name = name.substring(0, g_nSheetNameMaxLength - sPosfix.length);
sNewName = name + sPosfix;
}
var bUniqueName = true;
for (var i = 0; i < workbookSheetCount; i++) {
if (this.getWorksheet(i).getName() == sNewName) {
bUniqueName = false;
break;
}
}
if (bUniqueName) {
break;
}
nIndex++;
}
return sNewName;
};
Workbook.prototype.generateFontMap = function () {
var oFontMap = new Object();
oFontMap["Calibri"] = 1;
oFontMap["Arial"] = 1;
if (null != g_oDefaultFont.fn) {
oFontMap[g_oDefaultFont.fn] = 1;
}
for (var i = 0, length = this.aWorksheets.length; i < length; ++i) {
this.aWorksheets[i].generateFontMap(oFontMap);
}
if (this.theme && this.theme.themeElements && this.theme.themeElements.fontScheme) {
var majorFont = this.theme.themeElements.fontScheme.majorFont;
if (oFontMap["+mj-lt"]) {
if (majorFont && typeof majorFont.latin === "string" && majorFont.latin.length > 0) {
oFontMap[majorFont.latin] = 1;
}
}
if (oFontMap["+mj-ea"]) {
if (majorFont && typeof majorFont.ea === "string" && majorFont.ea.length > 0) {
oFontMap[majorFont.ea] = 1;
}
}
if (oFontMap["+mj-cs"]) {
if (majorFont && typeof majorFont.cs === "string" && majorFont.cs.length > 0) {
oFontMap[majorFont.cs] = 1;
}
}
var minorFont = this.theme.themeElements.fontScheme.minorFont;
if (oFontMap["+mn-lt"]) {
if (minorFont && typeof minorFont.latin === "string" && minorFont.latin.length > 0) {
oFontMap[minorFont.latin] = 1;
}
}
if (oFontMap["+mn-ea"]) {
if (minorFont && typeof minorFont.ea === "string" && minorFont.ea.length > 0) {
oFontMap[minorFont.ea] = 1;
}
}
if (oFontMap["+mn-cs"]) {
if (minorFont && typeof minorFont.cs === "string" && minorFont.cs.length > 0) {
oFontMap[minorFont.cs] = 1;
}
}
}
delete oFontMap["+mj-lt"];
delete oFontMap["+mj-ea"];
delete oFontMap["+mj-cs"];
delete oFontMap["+mn-lt"];
delete oFontMap["+mn-ea"];
delete oFontMap["+mn-cs"];
this.CellStyles.generateFontMap(oFontMap);
var aRes = new Array();
for (var i in oFontMap) {
aRes.push(i);
}
return aRes;
};
Workbook.prototype.recalcWB = function (is3D) {
var dep1, thas = this,
sr, sr1, sr2;
if (this.dependencyFormulas.getNodesLength() > 0) {
if (is3D) {
for (var i = 0; i < this.getWorksheetCount(); i++) {
__ws = this.getWorksheet(i);
for (var id in this.cwf[__ws.Id].cells) {
var c = new CellAddress(id);
if (__ws._getCellNoEmpty(c.getRow0(), c.getCol0()).formulaParsed.is3D) {
dep1 = this.dependencyFormulas.t_sort_slave(__ws.Id, id);
sr1 = thas.recalcDependency(dep1.badF, true);
sr2 = thas.recalcDependency(dep1.depF, false);
sr = searchCleenCacheArea(sr, searchCleenCacheArea(sr1, sr2));
}
}
}
} else {
dep1 = this.dependencyFormulas.t_sort();
sr1 = thas.recalcDependency(dep1.badF, true);
sr2 = thas.recalcDependency(dep1.depF, false);
sr = searchCleenCacheArea(sr, searchCleenCacheArea(sr1, sr2));
}
for (var _item in sr) {
this.handlers.trigger("cleanCellCache", _item, new Asc.Range(0, sr[_item].min.getRow0(), this.getWorksheetById(_item).getColsCount() - 1, sr[_item].max.getRow0()), c_oAscCanChangeColWidth.numbers);
}
}
};
Workbook.prototype.isDefinedNamesExists = function (name, sheetId) {
if (null != sheetId) {
var ws = this.getWorksheetById(sheetId);
if (null != ws) {
var bExist = false;
if (ws.DefinedNames) {
bExist = !!ws.DefinedNames[name];
}
if (bExist) {
return bExist;
}
}
}
if (this.DefinedNames) {
return !! this.DefinedNames[name];
}
return false;
};
Workbook.prototype.getDefinesNames = function (name, sheetId) {
if (null != sheetId) {
var ws = this.getWorksheetById(sheetId);
if (null != ws) {
if (ws.DefinedNames) {
var oDefName = ws.DefinedNames[name];
if (null != oDefName) {
return oDefName;
}
}
}
}
if (this.DefinedNames) {
var oDefName = this.DefinedNames[name];
if (null != oDefName) {
return oDefName;
}
}
return false;
};
Workbook.prototype.buildDependency = function () {
dep = null;
this.dependencyFormulas.clear();
this.dependencyFormulas = null;
this.dependencyFormulas = new DependencyGraph(this);
for (var i in this.cwf) {
this.getWorksheetById(i)._BuildDependencies(this.cwf[i].cells);
}
};
Workbook.prototype.recalcDependency = function (f, bad, notRecalc) {
if (f.length > 0) {
var sr = {};
for (var i = 0; i < f.length; i++) {
if (f[i].cellId.indexOf(":") > -1) {
continue;
}
var l = new CellAddress(f[i].cellId);
if (! (f[i].sheetId in sr)) {
sr[f[i].sheetId] = {
max: new CellAddress(f[i].cellId),
min: new CellAddress(f[i].cellId)
};
}
if (sr[f[i].sheetId].min.getRow() > l.getRow()) {
sr[f[i].sheetId].min = new CellAddress(l.getRow(), sr[f[i].sheetId].min.getCol());
}
if (sr[f[i].sheetId].min.getCol() > l.getCol()) {
sr[f[i].sheetId].min = new CellAddress(sr[f[i].sheetId].min.getRow(), l.getCol());
}
if (sr[f[i].sheetId].max.getRow() < l.getRow()) {
sr[f[i].sheetId].max = new CellAddress(l.getRow(), sr[f[i].sheetId].max.getCol());
}
if (sr[f[i].sheetId].max.getCol() < l.getCol()) {
sr[f[i].sheetId].max = new CellAddress(sr[f[i].sheetId].max.getRow(), l.getCol());
}
if (!notRecalc) {
this.getWorksheetById(f[i].sheetId)._RecalculatedFunctions(f[i].cellId, bad);
}
}
return sr;
}
};
Workbook.prototype.SerializeHistory = function () {
var aRes = new Array();
var wsViews = this.oApi.wb.wsViews;
for (var i in wsViews) {
if (isRealObject(wsViews[i]) && isRealObject(wsViews[i].objectRender) && isRealObject(wsViews[i].objectRender.controller)) {
wsViews[i].objectRender.controller.refreshContentChanges();
}
}
var aActions = this.aCollaborativeActions.concat(History.GetSerializeArray());
if (aActions.length > 0) {
var oMemory = new CMemory();
var oThis = this;
var oSheetPlaceData = new Array();
for (var i = 0, length = this.aWorksheets.length; i < length; ++i) {
oSheetPlaceData.push(this.aWorksheets[i].getId());
}
aActions.push(new UndoRedoItemSerializable(g_oUndoRedoWorkbook, historyitem_Workbook_SheetPositions, null, null, new UndoRedoData_SheetPositions(oSheetPlaceData)));
for (var i = 0, length = aActions.length; i < length; ++i) {
var nPosStart = oMemory.GetCurPosition();
var item = aActions[i];
item.Serialize(oMemory, this.oApi.collaborativeEditing);
var nPosEnd = oMemory.GetCurPosition();
var nLen = nPosEnd - nPosStart;
if (nLen > 0) {
aRes.push(nLen + ";" + oMemory.GetBase64Memory2(nPosStart, nLen));
}
}
aRes.push("0;fontmap" + this.generateFontMap().join(","));
this.aCollaborativeActions = new Array();
}
return aRes;
};
Workbook.prototype.DeserializeHistory = function (aChanges, fCallback) {
var bRes = false;
var oThis = this;
this.aCollaborativeActions = this.aCollaborativeActions.concat(History.GetSerializeArray());
if (aChanges.length > 0) {
this.bCollaborativeChanges = true;
var dstLen = 0;
var aIndexes = new Array();
for (var i = 0, length = aChanges.length; i < length; ++i) {
var sChange = aChanges[i];
var nIndex = sChange.indexOf(";");
if (-1 != nIndex) {
dstLen += parseInt(sChange.substring(0, nIndex));
nIndex++;
}
aIndexes.push(nIndex);
}
var pointer = g_memory.Alloc(dstLen);
var stream = new FT_Stream2(pointer.data, dstLen);
stream.obj = pointer.obj;
var nCurOffset = 0;
var oFontMap = new Object();
var sFontMapString = "0;fontmap";
for (var i = 0, length = aChanges.length; i < length; ++i) {
var sChange = aChanges[i];
if (sFontMapString == sChange.substring(0, sFontMapString.length)) {
var sFonts = sChange.substring(sFontMapString.length);
var aFonts = sFonts.split(",");
for (var j = 0, length2 = aFonts.length; j < length2; ++j) {
oFontMap[aFonts[j]] = 1;
}
}
}
var aFontMap = new Array();
for (var i in oFontMap) {
aFontMap.push(i);
}
window["Asc"]["editor"]._loadFonts(aFontMap, function () {
History.Clear();
History.Create_NewPoint();
History.SetSelection(null, true);
var oHistoryPositions = null;
var oRedoObjectParam = new Asc.RedoObjectParam();
History.RedoPrepare(oRedoObjectParam);
for (var i = 0, length = aChanges.length; i < length; ++i) {
var sChange = aChanges[i];
if (sFontMapString != sChange.substring(0, sFontMapString.length)) {
var oBinaryFileReader = new BinaryFileReader();
nCurOffset = oBinaryFileReader.getbase64DecodedData2(sChange, aIndexes[i], stream, nCurOffset);
var item = new UndoRedoItemSerializable();
item.Deserialize(stream);
if (null != item.oClass && null != item.nActionType) {
if (g_oUndoRedoWorkbook == item.oClass && historyitem_Workbook_SheetPositions == item.nActionType) {
oHistoryPositions = item;
} else {
if (g_oUndoRedoGraphicObjects == item.oClass && item.oData.drawingData) {
item.oData.drawingData.bCollaborativeChanges = true;
}
History.RedoAdd(oRedoObjectParam, item.oClass, item.nActionType, item.nSheetId, item.oRange, item.oData);
}
}
}
}
if (null != oHistoryPositions) {
History.RedoAdd(oRedoObjectParam, oHistoryPositions.oClass, oHistoryPositions.nActionType, oHistoryPositions.nSheetId, oHistoryPositions.oRange, oHistoryPositions.oData);
}
History.RedoEnd(null, oRedoObjectParam);
oThis.bCollaborativeChanges = false;
History.Clear();
if (null != fCallback) {
fCallback();
}
});
}
};
function Woorksheet(wb, _index, bAddUserId, sId) {
this.workbook = wb;
this.DefinedNames = new Object();
this.sName = this.workbook.getUniqueSheetNameFrom(g_sNewSheetNamePattern, false);
this.bHidden = false;
this.dDefaultColWidth = null;
this.dDefaultheight = null;
this.nBaseColWidth = null;
this.index = _index;
this.Id = null;
if (null != sId) {
this.Id = sId;
} else {
if (bAddUserId) {
this.Id = this.workbook.oApi.User.asc_getId() + "_" + g_nNextWorksheetId++;
} else {
this.Id = g_nNextWorksheetId++;
}
}
this.nRowsCount = 0;
this.nColsCount = 0;
this.aGCells = new Object();
this.aCols = new Array();
this.Drawings = new Array();
this.TableParts = new Array();
this.AutoFilter = null;
this.oAllCol = null;
this.objForRebuldFormula = {};
this.aComments = new Array();
this.aCommentsCoords = new Array();
var oThis = this;
this.mergeManager = new RangeDataManager(false, function (data, from, to) {
if (History.Is_On() && (null != from || null != to)) {
if (null != from) {
from = from.clone();
}
if (null != to) {
to = to.clone();
}
var oHistoryRange = from;
if (null == oHistoryRange) {
oHistoryRange = to;
}
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_ChangeMerge, oThis.getId(), oHistoryRange, new UndoRedoData_FromTo(new UndoRedoData_BBox(from), new UndoRedoData_BBox(to)));
}
});
this.hyperlinkManager = new RangeDataManager(true, function (data, from, to) {
if (History.Is_On() && (null != from || null != to)) {
if (null != from) {
from = from.clone();
}
if (null != to) {
to = to.clone();
}
var oHistoryRange = from;
if (null == oHistoryRange) {
oHistoryRange = to;
}
var oHistoryData = null;
if (null == from || null == to) {
oHistoryData = data.clone();
}
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_ChangeHyperlink, oThis.getId(), oHistoryRange, new UndoRedoData_FromToHyperlink(from, to, oHistoryData));
}
if (null != to) {
data.Ref = oThis.getRange3(to.r1, to.c1, to.r2, to.c2);
}
});
this.hyperlinkManager.setDependenceManager(this.mergeManager);
this.sheetViews = [];
this.aConditionalFormatting = [];
this.sheetPr = null;
this.nMaxRowId = 1;
this.nMaxColId = 1;
}
Woorksheet.prototype.rebuildColors = function () {
this._forEachCell(function (cell) {
cell.cleanCache();
});
};
Woorksheet.prototype.generateFontMap = function (oFontMap) {
for (var i = 0, length = this.Drawings.length; i < length; ++i) {
var drawing = this.Drawings[i];
if (drawing) {
drawing.getAllFonts(oFontMap);
}
}
for (var i in this.aCols) {
var col = this.aCols[i];
if (null != col && null != col.xfs && null != col.xfs.font && null != col.xfs.font.fn) {
oFontMap[col.xfs.font.fn] = 1;
}
}
if (null != this.oAllCol && null != this.oAllCol.xfs && null != this.oAllCol.xfs.font && null != this.oAllCol.xfs.font.fn) {
oFontMap[this.oAllCol.xfs.font.fn] = 1;
}
for (var i in this.aGCells) {
var row = this.aGCells[i];
if (null != row && null != row.xfs && null != row.xfs.font && null != row.xfs.font.fn) {
oFontMap[row.xfs.font.fn] = 1;
}
for (var j in row.c) {
var cell = row.c[j];
if (null != cell) {
if (null != cell.xfs && null != cell.xfs.font && null != cell.xfs.font.fn) {
oFontMap[cell.xfs.font.fn] = 1;
}
if (null != cell.oValue && null != cell.oValue.multiText) {
for (var k = 0, length3 = cell.oValue.multiText.length; k < length3; ++k) {
var part = cell.oValue.multiText[k];
if (null != part.format && null != part.format.fn) {
oFontMap[part.format.fn] = 1;
}
}
}
}
}
}
};
Woorksheet.prototype.clone = function (sNewId, bFromRedo) {
var oNewWs;
if (null != sNewId) {
oNewWs = new Woorksheet(this.workbook, this.workbook.aWorksheets.length, true, sNewId);
} else {
oNewWs = new Woorksheet(this.workbook, this.workbook.aWorksheets.length, true);
}
oNewWs.sName = this.workbook.getUniqueSheetNameFrom(this.sName, true);
oNewWs.bHidden = this.bHidden;
oNewWs.nBaseColWidth = this.nBaseColWidth;
oNewWs.dDefaultColWidth = this.dDefaultColWidth;
oNewWs.dDefaultheight = this.dDefaultheight;
oNewWs.index = this.index;
oNewWs.nRowsCount = this.nRowsCount;
oNewWs.nColsCount = this.nColsCount;
if (this.TableParts) {
oNewWs.TableParts = Asc.clone(this.TableParts);
}
if (this.AutoFilter) {
oNewWs.AutoFilter = Asc.clone(this.AutoFilter);
}
for (var i in this.aCols) {
oNewWs.aCols[i] = this.aCols[i].clone();
}
if (null != this.oAllCol) {
oNewWs.oAllCol = this.oAllCol.clone();
}
for (var i in this.aGCells) {
oNewWs.aGCells[i] = this.aGCells[i].clone();
}
var aMerged = this.mergeManager.getAll();
oNewWs.mergeManager.stopRecalculate();
for (var i in aMerged) {
var elem = aMerged[i];
var range = oNewWs.getRange3(elem.bbox.r1, elem.bbox.c1, elem.bbox.r2, elem.bbox.c2);
range.mergeOpen();
}
oNewWs.mergeManager.startRecalculate();
var aHyperlinks = this.hyperlinkManager.getAll();
oNewWs.hyperlinkManager.stopRecalculate();
for (var i in aHyperlinks) {
var elem = aHyperlinks[i];
var range = oNewWs.getRange3(elem.bbox.r1, elem.bbox.c1, elem.bbox.r2, elem.bbox.c2);
range.setHyperlinkOpen(elem.data);
}
oNewWs.hyperlinkManager.startRecalculate();
if (null != this.aComments) {
for (var i = 0; i < this.aComments.length; i++) {
var comment = new asc_CCommentData(this.aComments[i]);
comment.wsId = oNewWs.getId();
comment.setId();
oNewWs.aComments.push(comment);
}
}
return oNewWs;
};
Woorksheet.prototype.copyDrawingObjects = function (oNewWs) {
if (null != this.Drawings && this.Drawings.length > 0) {
oNewWs.Drawings = [];
var w = new CMemory();
for (var i = 0; i < this.Drawings.length; ++i) {
this.Drawings[i].graphicObject.writeToBinaryForCopyPaste(w);
}
var binary = w.pos + ";" + w.GetBase64Memory();
var stream = CreateBinaryReader(binary, 0, binary.length);
var drawingObjects;
if (this.Drawings[0] && this.Drawings[0].graphicObject && this.Drawings[0].graphicObject.drawingObjects) {
drawingObjects = this.Drawings[0].graphicObject.drawingObjects;
} else {
drawingObjects = new DrawingObjects();
drawingObjects.drawingDocument = new CDrawingDocument(drawingObjects);
}
for (var i = 0; i < this.Drawings.length; ++i) {
var obj = null;
var objectType = stream.GetLong();
switch (objectType) {
case CLASS_TYPE_SHAPE:
obj = new CShape(null, null, null);
break;
case CLASS_TYPE_IMAGE:
obj = new CImageShape(null, null);
break;
case CLASS_TYPE_GROUP:
obj = new CGroupShape(null, null);
break;
case CLASS_TYPE_CHART_AS_GROUP:
obj = new CChartAsGroup(null, null);
break;
}
if (isRealObject(obj)) {
var drawingObject = drawingObjects.cloneDrawingObject(this.Drawings[i]);
obj.readFromBinaryForCopyPaste2(stream, null, drawingObjects, null, null);
drawingObject.graphicObject = obj;
oNewWs.Drawings.push(drawingObject);
}
}
}
};
Woorksheet.prototype.init = function () {
this.workbook.cwf[this.Id] = {
cells: {}
};
var formulaShared = {};
for (var rowid in this.aGCells) {
var row = this.aGCells[rowid];
for (var cellid in row.c) {
var oCell = row.c[cellid];
var sCellId = oCell.oId.getID();
if (null != oCell.oFormulaExt) {
if (oCell.oFormulaExt.t == ECellFormulaType.cellformulatypeShared) {
if (null != oCell.oFormulaExt.si) {
if (null != oCell.oFormulaExt.ref) {
formulaShared[oCell.oFormulaExt.si] = {
fVal: new parserFormula(oCell.oFormulaExt.v, "", this),
fRef: function (t) {
var r = t.getRange2(oCell.oFormulaExt.ref);
return {
c: r,
first: r.first
};
} (this)
};
formulaShared[oCell.oFormulaExt.si].fVal.parse();
} else {
if (formulaShared[oCell.oFormulaExt.si]) {
var fr = formulaShared[oCell.oFormulaExt.si].fRef;
if (fr.c.containCell(oCell.oId)) {
if (formulaShared[oCell.oFormulaExt.si].fVal.isParsed) {
var off = oCell.getOffset3(fr.first);
formulaShared[oCell.oFormulaExt.si].fVal.changeOffset(off);
oCell.oFormulaExt.v = formulaShared[oCell.oFormulaExt.si].fVal.assemble();
off.offsetCol *= -1;
off.offsetRow *= -1;
formulaShared[oCell.oFormulaExt.si].fVal.changeOffset(off);
}
this.workbook.cwf[this.Id].cells[sCellId] = sCellId;
}
}
}
}
}
if (oCell.oFormulaExt.v) {
oCell.setFormula(oCell.oFormulaExt.v);
}
if (oCell.oFormulaExt.ca) {
oCell.sFormulaCA = true;
}
if (oCell.sFormula) {
this.workbook.cwf[this.Id].cells[sCellId] = sCellId;
}
if (oCell.sFormula && (oCell.oFormulaExt.ca || !oCell.oValue.getValueWithoutFormat())) {
this.workbook.needRecalc[getVertexId(this.Id, sCellId)] = [this.Id, sCellId];
this.workbook.needRecalc.length++;
}
delete oCell.oFormulaExt;
}
}
}
};
Woorksheet.prototype.initPostOpen = function () {
this.mergeManager.startRecalculate();
this.hyperlinkManager.startRecalculate();
if (null != this.Drawings) {
var oThis = this;
for (var i = this.Drawings.length - 1; i >= 0; --i) {
var obj = this.Drawings[i];
if (obj.graphicObject && obj.graphicObject.chart) {
var chart = obj.graphicObject.chart;
if (chart.range.interval) {
var oRefParsed = parserHelp.parse3DRef(chart.range.interval);
if (null !== oRefParsed) {
var ws = oThis.workbook.getWorksheetByName(oRefParsed.sheet);
if (ws) {
chart.range.intervalObject = ws.getRange2(oRefParsed.range);
}
}
}
if (null == chart.range.intervalObject) {
this.Drawings.splice(i, 1);
}
}
}
}
if (!this.PagePrintOptions) {
this.PagePrintOptions = new Asc.asc_CPageOptions();
}
if (null != this.PagePrintOptions) {
var oPageMargins = this.PagePrintOptions.asc_getPageMargins();
if (null == oPageMargins) {
oPageMargins = new Asc.asc_CPageMargins();
this.PagePrintOptions.asc_setPageMargins(oPageMargins);
}
if (null == oPageMargins.asc_getLeft()) {
oPageMargins.asc_setLeft(c_oAscPrintDefaultSettings.PageLeftField);
}
if (null == oPageMargins.asc_getTop()) {
oPageMargins.asc_setTop(c_oAscPrintDefaultSettings.PageTopField);
}
if (null == oPageMargins.asc_getRight()) {
oPageMargins.asc_setRight(c_oAscPrintDefaultSettings.PageRightField);
}
if (null == oPageMargins.asc_getBottom()) {
oPageMargins.asc_setBottom(c_oAscPrintDefaultSettings.PageBottomField);
}
var oPageSetup = this.PagePrintOptions.asc_getPageSetup();
if (null == oPageSetup) {
oPageSetup = new Asc.asc_CPageSetup();
this.PagePrintOptions.asc_setPageSetup(oPageSetup);
}
if (null == oPageSetup.asc_getOrientation()) {
oPageSetup.asc_setOrientation(c_oAscPrintDefaultSettings.PageOrientation);
}
if (null == oPageSetup.asc_getWidth()) {
oPageSetup.asc_setWidth(c_oAscPrintDefaultSettings.PageWidth);
}
if (null == oPageSetup.asc_getHeight()) {
oPageSetup.asc_setHeight(c_oAscPrintDefaultSettings.PageHeight);
}
if (null == this.PagePrintOptions.asc_getGridLines()) {
this.PagePrintOptions.asc_setGridLines(c_oAscPrintDefaultSettings.PageGridLines);
}
if (null == this.PagePrintOptions.asc_getHeadings()) {
this.PagePrintOptions.asc_setHeadings(c_oAscPrintDefaultSettings.PageHeadings);
}
}
if (0 === this.sheetViews.length) {
this.sheetViews[0] = new asc.asc_CSheetViewSettings();
}
};
Woorksheet.prototype._forEachCell = function (fAction) {
for (var rowInd in this.aGCells) {
var row = this.aGCells[rowInd];
if (row) {
for (var cellInd in row.c) {
var cell = row.c[cellInd];
if (cell) {
fAction(cell);
}
}
}
}
};
Woorksheet.prototype.getNextRowId = function () {
return this.nMaxRowId++;
};
Woorksheet.prototype.getNextColId = function () {
return this.nMaxColId++;
};
Woorksheet.prototype.getId = function () {
return this.Id;
};
Woorksheet.prototype.getIndex = function () {
return this.index;
};
Woorksheet.prototype.getName = function () {
return this.sName !== undefined && this.sName.length > 0 ? this.sName : "";
};
Woorksheet.prototype.setName = function (name) {
if (name.length <= g_nSheetNameMaxLength) {
var lastName = this.sName;
this.sName = name;
History.Create_NewPoint();
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_Rename, this.getId(), null, new UndoRedoData_FromTo(lastName, name));
for (var id in this.workbook.cwf) {
this.workbook.getWorksheetById(id)._ReBuildFormulas(this.workbook.cwf[id].cells, lastName, this.sName);
}
if (this.Drawings) {
for (var i = 0; i < this.Drawings.length; i++) {
var drawingObject = this.Drawings[i];
if (drawingObject.graphicObject && drawingObject.isChart()) {
var _lastName = !rx_test_ws_name.test(lastName) ? "'" + lastName + "'" : lastName;
if (drawingObject.graphicObject.chart.range.interval.indexOf(_lastName + "!") >= 0) {
drawingObject.graphicObject.chart.range.interval = drawingObject.graphicObject.chart.range.interval.replace(_lastName, !rx_test_ws_name.test(this.sName) ? "'" + this.sName + "'" : this.sName);
drawingObject.graphicObject.chart.rebuildSeries();
}
}
}
}
}
};
Woorksheet.prototype.renameWsToCollaborate = function (name) {
var lastname = this.getName();
var aFormulas = new Array();
for (var i = 0, length = this.workbook.aCollaborativeActions.length; i < length; ++i) {
var action = this.workbook.aCollaborativeActions[i];
if (g_oUndoRedoWorkbook == action.oClass) {
if (historyitem_Workbook_SheetAdd == action.nActionType) {
if (lastname == action.oData.name) {
action.oData.name = name;
}
}
} else {
if (g_oUndoRedoWorksheet == action.oClass) {
if (historyitem_Worksheet_Rename == action.nActionType) {
if (lastname == action.oData.to) {
action.oData.to = name;
}
}
} else {
if (g_oUndoRedoCell == action.oClass) {
if (action.oData instanceof UndoRedoData_CellSimpleData) {
if (action.oData.oNewVal instanceof UndoRedoData_CellValueData) {
var oNewVal = action.oData.oNewVal;
if (null != oNewVal.formula && -1 != oNewVal.formula.indexOf(lastname)) {
var oParser = new parserFormula(oNewVal.formula, "A1", this);
oParser.parse();
aFormulas.push({
formula: oParser,
value: oNewVal
});
}
}
}
}
}
}
}
this.setName(name);
for (var i = 0, length = aFormulas.length; i < length; ++i) {
var item = aFormulas[i];
item.value.formula = item.formula.assemble();
}
};
Woorksheet.prototype.getHidden = function () {
if (null != this.bHidden) {
return false != this.bHidden;
}
return false;
};
Woorksheet.prototype.setHidden = function (hidden) {
if (this.bHidden != hidden) {
History.Create_NewPoint();
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_Hide, this.getId(), null, new UndoRedoData_FromTo(this.bHidden, hidden));
}
this.bHidden = hidden;
if (true == this.bHidden && this.getIndex() == this.workbook.getActive()) {
var activeWorksheet = this.getIndex();
var countWorksheets = this.workbook.getWorksheetCount();
var i, ws;
for (i = activeWorksheet + 1; i < countWorksheets; ++i) {
ws = this.workbook.getWorksheet(i);
if (false === ws.getHidden()) {
this.workbook.handlers.trigger("undoRedoHideSheet", i);
return;
}
}
for (i = activeWorksheet - 1; i >= 0; --i) {
ws = this.workbook.getWorksheet(i);
if (false === ws.getHidden()) {
this.workbook.handlers.trigger("undoRedoHideSheet", i);
return;
}
}
}
};
Woorksheet.prototype.getSheetViewSettings = function () {
return this.sheetViews[0].clone();
};
Woorksheet.prototype.setSheetViewSettings = function (options) {
var current = this.getSheetViewSettings();
if (current.isEqual(options)) {
return;
}
History.Create_NewPoint();
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_SetViewSettings, this.getId(), null, new UndoRedoData_FromTo(current, options.clone()));
this.sheetViews[0].setSettings(options);
};
Woorksheet.prototype.getRowsCount = function () {
return this.nRowsCount;
};
Woorksheet.prototype.removeRows = function (start, stop) {
var oRange = this.getRange(new CellAddress(start, 0, 0), new CellAddress(stop, gc_nMaxCol0, 0));
oRange.deleteCellsShiftUp();
};
Woorksheet.prototype._removeRows = function (start, stop) {
lockDraw(this.workbook);
History.Create_NewPoint();
History.SetSelection(null, true);
var nDif = -(stop - start + 1);
var aIndexes = new Array();
for (var i in this.aGCells) {
var nIndex = i - 0;
if (nIndex >= start) {
aIndexes.push(nIndex);
}
}
aIndexes.sort(fSortAscending);
var oDefRowPr = new UndoRedoData_RowProp();
for (var i = 0, length = aIndexes.length; i < length; ++i) {
var nIndex = aIndexes[i];
var row = this.aGCells[nIndex];
if (nIndex > stop) {
if (false == row.isEmpty()) {
var oTargetRow = this._getRow(nIndex + nDif);
oTargetRow.copyProperty(row);
}
for (var j in row.c) {
this._moveCellVer(nIndex, j - 0, nDif);
}
} else {
var oOldProps = row.getHeightProp();
if (false == Asc.isEqual(oOldProps, oDefRowPr)) {
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_RowProp, this.getId(), new Asc.Range(0, nIndex, gc_nMaxCol0, nIndex), new UndoRedoData_IndexSimpleProp(nIndex, true, oOldProps, oDefRowPr));
}
row.setStyle(null);
for (var j in row.c) {
var nColIndex = j - 0;
this._removeCell(nIndex, nColIndex);
}
delete this.aGCells[nIndex];
}
}
var oActualRange = {
r1: start,
c1: 0,
r2: stop,
c2: gc_nMaxCol0
};
var res = this.renameDependencyNodes({
offsetRow: nDif,
offsetCol: 0
},
oActualRange);
buildRecalc(this.workbook);
unLockDraw(this.workbook);
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_RemoveRows, this.getId(), new Asc.Range(0, start, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_FromToRowCol(true, start, stop));
return true;
};
Woorksheet.prototype.insertRowsBefore = function (index, count) {
var oRange = this.getRange(new CellAddress(index, 0, 0), new CellAddress(index + count - 1, gc_nMaxCol0, 0));
oRange.addCellsShiftBottom();
};
Woorksheet.prototype._insertRowsBefore = function (index, count) {
lockDraw(this.workbook);
var oActualRange = {
r1: index,
c1: 0,
r2: index + count - 1,
c2: gc_nMaxCol0
};
History.Create_NewPoint();
History.SetSelection(null, true);
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_AddRows, this.getId(), new Asc.Range(0, index, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_FromToRowCol(true, index, index + count - 1));
History.TurnOff();
var aIndexes = new Array();
for (var i in this.aGCells) {
var nIndex = i - 0;
if (nIndex >= index) {
aIndexes.push(nIndex);
}
}
var oPrevRow = null;
if (index > 0) {
oPrevRow = this.aGCells[index - 1];
}
aIndexes.sort(fSortDescending);
for (var i = 0, length = aIndexes.length; i < length; ++i) {
var nIndex = aIndexes[i];
var row = this.aGCells[nIndex];
if (false == row.isEmpty()) {
var oTargetRow = this._getRow(nIndex + count);
oTargetRow.copyProperty(row);
}
for (var j in row.c) {
this._moveCellVer(nIndex, j - 0, count);
}
delete this.aGCells[nIndex];
}
if (null != oPrevRow && false == this.workbook.bUndoChanges && false == this.workbook.bRedoChanges) {
for (var i = 0; i < count; ++i) {
var row = this._getRow(index + i);
row.copyProperty(oPrevRow);
row.hd = null;
}
}
var res = this.renameDependencyNodes({
offsetRow: count,
offsetCol: 0
},
oActualRange);
buildRecalc(this.workbook);
unLockDraw(this.workbook);
this.nRowsCount += count;
History.TurnOn();
return true;
};
Woorksheet.prototype.insertRowsAfter = function (index, count) {
return this.insertRowsBefore(index + 1, count);
};
Woorksheet.prototype.getColsCount = function () {
return this.nColsCount;
};
Woorksheet.prototype.removeCols = function (start, stop) {
var oRange = this.getRange(new CellAddress(0, start, 0), new CellAddress(gc_nMaxRow0, stop, 0));
oRange.deleteCellsShiftLeft();
};
Woorksheet.prototype._removeCols = function (start, stop) {
lockDraw(this.workbook);
History.Create_NewPoint();
History.SetSelection(null, true);
var nDif = -(stop - start + 1);
for (var i in this.aGCells) {
var nRowIndex = i - 0;
var row = this.aGCells[i];
var aIndexes = new Array();
for (var j in row.c) {
var nIndex = j - 0;
if (nIndex >= start) {
aIndexes.push(nIndex);
}
}
aIndexes.sort(fSortAscending);
for (var j = 0, length = aIndexes.length; j < length; ++j) {
var nIndex = aIndexes[j];
if (nIndex > stop) {
this._moveCellHor(nRowIndex, nIndex, nDif, {
r1: 0,
c1: start,
r2: gc_nMaxRow0,
c2: stop
});
} else {
this._removeCell(nRowIndex, nIndex);
}
}
}
var oActualRange = {
r1: 0,
c1: start,
r2: gc_nMaxRow0,
c2: stop
};
var res = this.renameDependencyNodes({
offsetRow: 0,
offsetCol: nDif
},
oActualRange);
buildRecalc(this.workbook);
unLockDraw(this.workbook);
var oDefColPr = new UndoRedoData_ColProp();
for (var i = start; i <= stop; ++i) {
var col = this.aCols[i];
if (null != col) {
var oOldProps = col.getWidthProp();
if (false == Asc.isEqual(oOldProps, oDefColPr)) {
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_ColProp, this.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(i, false, oOldProps, oDefColPr));
}
col.setStyle(null);
}
}
this.aCols.splice(start, stop - start + 1);
for (var i = start, length = this.aCols.length; i < length; ++i) {
var elem = this.aCols[i];
if (null != elem) {
elem.moveHor(nDif);
}
}
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_RemoveCols, this.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_FromToRowCol(false, start, stop));
return true;
};
Woorksheet.prototype.insertColsBefore = function (index, count) {
var oRange = this.getRange(new CellAddress(0, index, 0), new CellAddress(gc_nMaxRow0, index + count - 1, 0));
oRange.addCellsShiftRight();
};
Woorksheet.prototype._insertColsBefore = function (index, count) {
lockDraw(this.workbook);
var oActualRange = {
r1: 0,
c1: index,
r2: gc_nMaxRow0,
c2: index + count - 1
};
History.Create_NewPoint();
History.SetSelection(null, true);
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_AddCols, this.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_FromToRowCol(false, index, index + count - 1));
History.TurnOff();
for (var i in this.aGCells) {
var nRowIndex = i - 0;
var row = this.aGCells[i];
var aIndexes = new Array();
for (var j in row.c) {
var nIndex = j - 0;
if (nIndex >= index) {
aIndexes.push(nIndex);
}
}
aIndexes.sort(fSortDescending);
for (var j = 0, length2 = aIndexes.length; j < length2; ++j) {
var nIndex = aIndexes[j];
this._moveCellHor(nRowIndex, nIndex, count, oActualRange);
}
}
var res = this.renameDependencyNodes({
offsetRow: 0,
offsetCol: count
},
oActualRange);
buildRecalc(this.workbook);
unLockDraw(this.workbook);
var oPrevCol = null;
if (index > 0) {
oPrevCol = this.aCols[index - 1];
}
if (null != this.oAllCol) {
oPrevCol = this.oAllCol;
}
for (var i = 0; i < count; ++i) {
var oNewCol = null;
if (null != oPrevCol && false == this.workbook.bUndoChanges && false == this.workbook.bRedoChanges) {
oNewCol = oPrevCol.clone();
oNewCol.hd = null;
oNewCol.BestFit = null;
oNewCol.index = index + i;
}
this.aCols.splice(index, 0, oNewCol);
}
for (var i = index + count, length = this.aCols.length; i < length; ++i) {
var elem = this.aCols[i];
if (null != elem) {
elem.moveHor(count);
}
}
this.nColsCount += count;
History.TurnOn();
return true;
};
Woorksheet.prototype.insertColsAfter = function (index, count) {
return this.insertColsBefore(index + 1, count);
};
Woorksheet.prototype.getDefaultWidth = function () {
return this.dDefaultColWidth;
};
Woorksheet.prototype.getColWidth = function (index) {
var col = this._getColNoEmptyWithAll(index);
if (null != col && null != col.width) {
return col.width;
}
var dResult = this.dDefaultColWidth;
if (dResult === undefined || dResult === null || dResult == 0) {
dResult = -1;
}
return dResult;
};
Woorksheet.prototype.setColWidth = function (width, start, stop) {
if (0 == width) {
return this.setColHidden(true, start, stop);
}
if (null == start) {
return;
}
if (null == stop) {
stop = start;
}
History.Create_NewPoint();
History.SetSelection(null, true);
var oThis = this;
var fProcessCol = function (col) {
if (col.width != width) {
var oOldProps = col.getWidthProp();
col.width = width;
col.CustomWidth = true;
col.BestFit = null;
col.hd = null;
var oNewProps = col.getWidthProp();
if (false == oOldProps.isEqual(oNewProps)) {
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_ColProp, oThis.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(col.index, false, oOldProps, oNewProps));
}
}
};
if (0 == start && gc_nMaxCol0 == stop) {
var col = this.getAllCol();
fProcessCol(col);
} else {
for (var i = start; i <= stop; i++) {
var col = this._getCol(i);
fProcessCol(col);
}
}
};
Woorksheet.prototype.setColHidden = function (bHidden, start, stop) {
if (null == start) {
return;
}
if (null == stop) {
stop = start;
}
History.Create_NewPoint();
History.SetSelection(null, true);
var oThis = this;
var fProcessCol = function (col) {
if (col.hd != bHidden) {
var oOldProps = col.getWidthProp();
if (bHidden) {
col.hd = bHidden;
if (null == col.width || true != col.CustomWidth) {
col.width = 0;
}
col.CustomWidth = true;
col.BestFit = null;
} else {
col.hd = null;
if (0 == col.width) {
col.width = null;
}
}
var oNewProps = col.getWidthProp();
if (false == oOldProps.isEqual(oNewProps)) {
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_ColProp, oThis.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(col.index, false, oOldProps, oNewProps));
}
}
};
if (0 != start && gc_nMaxCol0 == stop) {
var col = null;
if (false == bHidden) {
col = this.oAllCol;
} else {
col = this.getAllCol();
}
if (null != col) {
fProcessCol(col);
}
} else {
for (var i = start; i <= stop; i++) {
var col = null;
if (false == bHidden) {
col = this._getColNoEmpty(i);
} else {
col = this._getCol(i);
}
if (null != col) {
fProcessCol(col);
}
}
}
};
Woorksheet.prototype.setColBestFit = function (bBestFit, width, start, stop) {
if (null == start) {
return;
}
if (null == stop) {
stop = start;
}
History.Create_NewPoint();
History.SetSelection(null, true);
var oThis = this;
var fProcessCol = function (col) {
var oOldProps = col.getWidthProp();
if (bBestFit) {
col.BestFit = bBestFit;
col.hd = null;
} else {
col.BestFit = null;
}
col.width = width;
var oNewProps = col.getWidthProp();
if (false == oOldProps.isEqual(oNewProps)) {
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_ColProp, oThis.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_IndexSimpleProp(col.index, false, oOldProps, oNewProps));
}
};
if (0 != start && gc_nMaxCol0 == stop) {
var col = null;
if (bBestFit && gc_dDefaultColWidthCharsAttribute == width) {
col = this.oAllCol;
} else {
col = this.getAllCol();
}
if (null != col) {
fProcessCol(col);
}
} else {
for (var i = start; i <= stop; i++) {
var col = null;
if (bBestFit && gc_dDefaultColWidthCharsAttribute == width) {
col = this._getColNoEmpty(i);
} else {
col = this._getCol(i);
}
if (null != col) {
fProcessCol(col);
}
}
}
};
Woorksheet.prototype.getDefaultHeight = function () {
return this.dDefaultheight;
};
Woorksheet.prototype.getRowHeight = function (index) {
var row = this.aGCells[index];
if (null != row && null != row.h) {
return row.h;
} else {
return -1;
}
};
Woorksheet.prototype.setRowHeight = function (height, start, stop) {
if (0 == height) {
return this.setRowHidden(true, start, stop);
}
if (null == start) {
return;
}
if (null == stop) {
stop = start;
}
History.Create_NewPoint();
History.SetSelection(null, true);
for (var i = start; i <= stop; i++) {
var oCurRow = this._getRow(i);
if (oCurRow.h != height) {
var oOldProps = oCurRow.getHeightProp();
oCurRow.h = height;
oCurRow.CustomHeight = true;
oCurRow.hd = null;
var oNewProps = oCurRow.getHeightProp();
if (false == Asc.isEqual(oOldProps, oNewProps)) {
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_RowProp, this.getId(), new Asc.Range(0, i, gc_nMaxCol0, i), new UndoRedoData_IndexSimpleProp(i, true, oOldProps, oNewProps));
}
}
}
};
Woorksheet.prototype.setRowHidden = function (bHidden, start, stop) {
if (null == start) {
return;
}
if (null == stop) {
stop = start;
}
History.Create_NewPoint();
History.SetSelection(null, true);
for (var i = start; i <= stop; i++) {
var oCurRow = null;
if (false == bHidden) {
oCurRow = this._getRowNoEmpty(i);
} else {
oCurRow = this._getRow(i);
}
if (null != oCurRow && oCurRow.hd != bHidden) {
var oOldProps = oCurRow.getHeightProp();
if (bHidden) {
oCurRow.hd = bHidden;
} else {
oCurRow.hd = null;
}
var oNewProps = oCurRow.getHeightProp();
if (false == Asc.isEqual(oOldProps, oNewProps)) {
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_RowProp, this.getId(), new Asc.Range(0, i, gc_nMaxCol0, i), new UndoRedoData_IndexSimpleProp(i, true, oOldProps, oNewProps));
}
}
}
};
Woorksheet.prototype.setRowBestFit = function (bBestFit, height, start, stop) {
if (null == start) {
return;
}
if (null == stop) {
stop = start;
}
History.Create_NewPoint();
History.SetSelection(null, true);
for (var i = start; i <= stop; i++) {
var oCurRow = null;
if (true == bBestFit && gc_dDefaultRowHeightAttribute == height) {
oCurRow = this._getRowNoEmpty(i);
} else {
oCurRow = this._getRow(i);
}
if (null != oCurRow) {
var oOldProps = oCurRow.getHeightProp();
if (true == bBestFit) {
oCurRow.CustomHeight = null;
} else {
oCurRow.CustomHeight = true;
}
oCurRow.height = height;
var oNewProps = oCurRow.getHeightProp();
if (false == oOldProps.isEqual(oNewProps)) {
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_RowProp, this.getId(), new Asc.Range(0, i, gc_nMaxCol0, i), new UndoRedoData_IndexSimpleProp(i, true, oOldProps, oNewProps));
}
}
}
};
Woorksheet.prototype.getCell = function (oCellAdd) {
return this.getRange(oCellAdd, oCellAdd);
};
Woorksheet.prototype.getCell2 = function (sCellAdd) {
if (sCellAdd.indexOf("$") > -1) {
sCellAdd = sCellAdd.replace(/\$/g, "");
}
return this.getRange2(sCellAdd);
};
Woorksheet.prototype.getCell3 = function (r1, c1) {
return this.getRange3(r1, c1, r1, c1);
};
Woorksheet.prototype.getRange = function (cellAdd1, cellAdd2) {
var nRow1 = cellAdd1.getRow0();
var nCol1 = cellAdd1.getCol0();
var nRow2 = cellAdd2.getRow0();
var nCol2 = cellAdd2.getCol0();
return this.getRange3(nRow1, nCol1, nRow2, nCol2);
};
Woorksheet.prototype.getRange2 = function (sRange) {
if (sRange.indexOf("$") > -1) {
sRange = sRange.replace(/\$/g, "");
}
var nIndex = sRange.indexOf(":");
if (-1 != nIndex) {
var sFirstCell = sRange.substring(0, nIndex);
var sLastCell = sRange.substring(nIndex + 1);
var oFirstAddr, oLastAddr;
if (sFirstCell == sLastCell) {
if (!sFirstCell.match(/[^a-z]/ig)) {
oFirstAddr = new CellAddress(sFirstCell + "1");
oLastAddr = new CellAddress(sLastCell + (gc_nMaxRow + ""));
} else {
if (!sFirstCell.match(/[^0-9]/)) {
oFirstAddr = new CellAddress("A" + sFirstCell);
oLastAddr = new CellAddress(g_oCellAddressUtils.colnumToColstr(gc_nMaxCol) + sLastCell);
} else {
oFirstAddr = new CellAddress(sFirstCell);
oLastAddr = new CellAddress(sLastCell);
}
}
} else {
oFirstAddr = new CellAddress(sFirstCell);
oLastAddr = new CellAddress(sLastCell);
}
if (oFirstAddr.isValid() && oLastAddr.isValid()) {
if ((gc_nMaxCol == oFirstAddr.getCol() || gc_nMaxRow == oFirstAddr.getRow()) && oFirstAddr.id != sRange.toUpperCase()) {
if (gc_nMaxRow == oFirstAddr.getRow()) {
return this.getRange(new CellAddress(1, oFirstAddr.getCol()), new CellAddress(gc_nMaxRow, oLastAddr.getCol()));
} else {
return this.getRange(new CellAddress(oFirstAddr.getRow(), 1), new CellAddress(oLastAddr.getRow(), gc_nMaxCol));
}
} else {
return this.getRange(oFirstAddr, oLastAddr);
}
}
return null;
} else {
var oCellAddr = new CellAddress(sRange);
if (oCellAddr.isValid()) {
if ((gc_nMaxCol == oCellAddr.getCol() || gc_nMaxRow == oCellAddr.getRow()) && oCellAddr.id != sRange.toUpperCase()) {
if (gc_nMaxRow == oCellAddr.getRow()) {
return this.getRange(new CellAddress(1, oCellAddr.getCol()), new CellAddress(gc_nMaxRow, oCellAddr.getCol()));
} else {
return this.getRange(new CellAddress(oCellAddr.getRow(), 1), new CellAddress(oCellAddr.getRow(), gc_nMaxCol));
}
} else {
return this.getRange(oCellAddr, oCellAddr);
}
}
}
return null;
};
Woorksheet.prototype.getRange3 = function (r1, c1, r2, c2) {
var nRowMin = r1;
var nRowMax = r2;
var nColMin = c1;
var nColMax = c2;
if (r1 > r2) {
nRowMax = r1;
nRowMin = r2;
}
if (c1 > c2) {
nColMax = c1;
nColMin = c2;
}
return new Range(this, nRowMin, nColMin, nRowMax, nColMax);
};
Woorksheet.prototype._getRows = function () {
return this.aGCells;
};
Woorksheet.prototype._getCols = function () {
return this.aCols;
};
Woorksheet.prototype._removeCell = function (nRow, nCol, cell) {
if (null != cell) {
nRow = cell.oId.getRow0();
nCol = cell.oId.getCol0();
}
var row = this.aGCells[nRow];
if (null != row) {
var cell = row.c[nCol];
if (null != cell) {
if (false == cell.isEmpty()) {
var oUndoRedoData_CellData = new UndoRedoData_CellData(cell.getValueData(), null);
if (null != cell.xfs) {
oUndoRedoData_CellData.style = cell.xfs.clone();
}
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_RemoveCell, this.getId(), new Asc.Range(0, nRow, gc_nMaxCol0, nRow), new UndoRedoData_CellSimpleData(nRow, nCol, oUndoRedoData_CellData, null));
}
this.helperRebuildFormulas(cell, cell.getName(), cell.getName());
var node = this.workbook.dependencyFormulas.getNode2(this.Id, cell.getName());
if (node) {
for (var i = 0; i < node.length; i++) {
var n = node[i].getSlaveEdges();
if (n) {
for (var id in n) {
if (n[id].cell && n[id].cell.sFormula) {
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_RemoveCellFormula, n[id].sheetId, new Asc.Range(n[id].cell.oId.getCol0(), n[id].cell.oId.getRow0(), n[id].cell.oId.getCol0(), n[id].cell.oId.getRow0()), new UndoRedoData_CellSimpleData(n[id].cell.oId.getRow0(), n[id].cell.oId.getCol0(), null, null, n[id].cell.sFormula));
}
}
}
}
}
if (!arrRecalc[this.getId()]) {
arrRecalc[this.getId()] = {};
}
arrRecalc[this.getId()][cell.getName()] = cell.getName();
if (this.workbook.dependencyFormulas.getNode(this.getId(), this.getName()) && !this.workbook.needRecalc[getVertexId(this.getId(), cell.getName())]) {
this.workbook.needRecalc[getVertexId(this.getId(), cell.getName())] = [this.getId(), cell.getName()];
if (this.workbook.needRecalc.length < 0) {
this.workbook.needRecalc.length = 0;
}
this.workbook.needRecalc.length++;
}
delete row.c[nCol];
if (row.isEmpty()) {
delete this.aGCells[nRow];
}
}
}
};
Woorksheet.prototype._getCell = function (row, col) {
var oCurRow = this._getRow(row);
var oCurCell = oCurRow.c[col];
if (null == oCurCell) {
oCurCell = new Cell(this);
var oRow = this._getRowNoEmpty(row);
var oCol = this._getColNoEmptyWithAll(col);
var xfs = null;
if (null != oRow && null != oRow.xfs) {
xfs = oRow.xfs.clone();
} else {
if (null != oCol && null != oCol.xfs) {
xfs = oCol.xfs.clone();
}
}
oCurCell.create(xfs, new CellAddress(row, col, 0));
oCurRow.c[col] = oCurCell;
if (row + 1 > this.nRowsCount) {
this.nRowsCount = row + 1;
}
if (col + 1 > this.nColsCount) {
this.nColsCount = col + 1;
}
}
return oCurCell;
};
Woorksheet.prototype._getCell2 = function (cellId) {
var oCellAddress = new CellAddress(cellId);
return this._getCell(oCellAddress.getRow0(), oCellAddress.getCow0());
};
Woorksheet.prototype._getCellNoEmpty = function (row, col) {
var oCurCell;
var oCurRow = this.aGCells[row];
if (oCurRow) {
var cell = oCurRow.c[col];
return cell ? cell : null;
}
return null;
};
Woorksheet.prototype._getRowNoEmpty = function (row) {
var oCurRow = this.aGCells[row];
if (oCurRow) {
return oCurRow;
}
return null;
};
Woorksheet.prototype._getColNoEmpty = function (col) {
var oCurCol = this.aCols[col];
if (oCurCol) {
return oCurCol;
}
return null;
};
Woorksheet.prototype._getColNoEmptyWithAll = function (col) {
var oRes = this._getColNoEmpty(col);
if (null == oRes) {
oRes = this.oAllCol;
}
return oRes;
};
Woorksheet.prototype._getRow = function (row) {
var oCurRow = this.aGCells[row];
if (!oCurRow) {
oCurRow = new Row(this);
oCurRow.create(row + 1);
if (null != this.oAllCol && null != this.oAllCol.xfs) {
oCurRow.xfs = this.oAllCol.xfs.clone();
}
this.aGCells[row] = oCurRow;
this.nRowsCount = row > this.nRowsCount ? row : this.nRowsCount;
}
return oCurRow;
};
Woorksheet.prototype._removeRow = function (index) {
delete this.aGCells[index];
};
Woorksheet.prototype._getCol = function (index) {
var oCurCol;
if (-1 == index) {
oCurCol = this.getAllCol();
} else {
oCurCol = this.aCols[index];
if (null == oCurCol) {
if (null != this.oAllCol) {
oCurCol = this.oAllCol.clone();
oCurCol.index = index;
} else {
oCurCol = new Col(this, index);
}
this.aCols[index] = oCurCol;
this.nColsCount = index > this.nColsCount ? index : this.nColsCount;
}
}
return oCurCol;
};
Woorksheet.prototype._removeCol = function (index) {
delete this.aCols[index];
};
Woorksheet.prototype._moveCellHor = function (nRow, nCol, dif) {
var cell = this._getCellNoEmpty(nRow, nCol);
if (cell) {
var lastName = cell.getName();
cell.moveHor(dif);
var newName = cell.getName();
var row = this._getRow(nRow);
row.c[nCol + dif] = cell;
delete row.c[nCol];
if (arrRecalc[this.Id] && arrRecalc[this.Id][lastName]) {
arrRecalc[this.Id][lastName] = null;
delete arrRecalc[this.Id][lastName];
arrRecalc[this.Id][cell.getName()] = cell.getName();
this.workbook.needRecalc[getVertexId(this.Id, lastName)] = null;
delete this.workbook.needRecalc[getVertexId(this.Id, lastName)];
this.workbook.needRecalc[getVertexId(this.Id, cell.getName())] = [this.Id, cell.getName()];
}
this.helperRebuildFormulas(cell, lastName, cell.getName());
}
};
Woorksheet.prototype._moveCellVer = function (nRow, nCol, dif) {
var cell = this._getCellNoEmpty(nRow, nCol);
if (cell) {
var lastName = cell.getName();
cell.moveVer(dif);
var oCurRow = this._getRow(nRow);
var oTargetRow = this._getRow(nRow + dif);
delete oCurRow.c[nCol];
oTargetRow.c[nCol] = cell;
if (oCurRow.isEmpty()) {
delete this.aGCells[nRow];
}
if (arrRecalc[this.Id] && arrRecalc[this.Id][lastName]) {
arrRecalc[this.Id][lastName] = null;
delete arrRecalc[this.Id][lastName];
arrRecalc[this.Id][cell.getName()] = cell.getName();
this.workbook.needRecalc[getVertexId(this.Id, lastName)] = null;
delete this.workbook.needRecalc[getVertexId(this.Id, lastName)];
this.workbook.needRecalc[getVertexId(this.Id, cell.getName())] = [this.Id, cell.getName()];
}
this.helperRebuildFormulas(cell, lastName, cell.getName());
}
};
Woorksheet.prototype._prepareMoveRangeGetCleanRanges = function (oBBoxFrom, oBBoxTo) {
var intersection = oBBoxFrom.intersectionSimple(oBBoxTo);
var aRangesToCheck = [];
if (null != intersection) {
var oThis = this;
var fAddToRangesToCheck = function (aRangesToCheck, r1, c1, r2, c2) {
if (r1 <= r2 && c1 <= c2) {
aRangesToCheck.push(oThis.getRange3(r1, c1, r2, c2));
}
};
if (intersection.r1 == oBBoxTo.r1 && intersection.c1 == oBBoxTo.c1) {
fAddToRangesToCheck(aRangesToCheck, oBBoxTo.r1, intersection.c2 + 1, intersection.r2, oBBoxTo.c2);
fAddToRangesToCheck(aRangesToCheck, intersection.r2 + 1, oBBoxTo.c1, oBBoxTo.r2, oBBoxTo.c2);
} else {
if (intersection.r2 == oBBoxTo.r2 && intersection.c1 == oBBoxTo.c1) {
fAddToRangesToCheck(aRangesToCheck, oBBoxTo.r1, oBBoxTo.c1, intersection.r1 - 1, oBBoxTo.c2);
fAddToRangesToCheck(aRangesToCheck, intersection.r1, intersection.c2 + 1, oBBoxTo.r2, oBBoxTo.c2);
} else {
if (intersection.r1 == oBBoxTo.r1 && intersection.c2 == oBBoxTo.c2) {
fAddToRangesToCheck(aRangesToCheck, oBBoxTo.r1, oBBoxTo.c1, intersection.r2, intersection.c1 - 1);
fAddToRangesToCheck(aRangesToCheck, intersection.r2 + 1, oBBoxTo.c1, oBBoxTo.r2, oBBoxTo.c2);
} else {
if (intersection.r2 == oBBoxTo.r2 && intersection.c2 == oBBoxTo.c2) {
fAddToRangesToCheck(aRangesToCheck, oBBoxTo.r1, oBBoxTo.c1, intersection.r1 - 1, oBBoxTo.c2);
fAddToRangesToCheck(aRangesToCheck, intersection.r1, oBBoxTo.c1, oBBoxTo.r2, intersection.c1 - 1);
}
}
}
}
} else {
aRangesToCheck.push(this.getRange3(oBBoxTo.r1, oBBoxTo.c1, oBBoxTo.r2, oBBoxTo.c2));
}
return aRangesToCheck;
};
Woorksheet.prototype._prepareMoveRange = function (oBBoxFrom, oBBoxTo) {
var res = 0;
if (oBBoxFrom.isEqual(oBBoxTo)) {
return res;
}
var aRangesToCheck = this._prepareMoveRangeGetCleanRanges(oBBoxFrom, oBBoxTo);
for (var i = 0, length = aRangesToCheck.length; i < length; i++) {
var range = aRangesToCheck[i];
var aMerged = this.mergeManager.get(range.getBBox0());
if (aMerged.outer.length > 0) {
return -2;
}
range._foreachNoEmpty(function (cell) {
if (!cell.isEmptyTextString()) {
res = -1;
return res;
}
});
if (0 != res) {
return res;
}
}
return res;
};
Woorksheet.prototype._moveRecalcGraph = function (oBBoxFrom, offset) {
var move = this.workbook.dependencyFormulas.helper(oBBoxFrom, this.Id),
rec = {
length: 0
};
for (var id in move.recalc) {
var n = move.recalc[id];
var _sn = n.getSlaveEdges2();
for (var _id in _sn) {
rec[_sn[_id].nodeId] = [_sn[_id].sheetId, _sn[_id].cellId];
rec.length++;
}
}
for (var id in move.move) {
var n = move.move[id];
var _sn = n.getSlaveEdges2();
for (var _id in _sn) {
var cell = _sn[_id].returnCell();
if (undefined == cell || null == cell) {
continue;
}
if (cell.formulaParsed) {
cell.formulaParsed.shiftCells(offset, oBBoxFrom, n, this.Id, false);
cell.setFormula(cell.formulaParsed.assemble());
rec[cell.getName()] = [cell.ws.getId(), cell.getName()];
rec.length++;
}
}
}
return rec;
};
Woorksheet.prototype._moveRange = function (oBBoxFrom, oBBoxTo) {
if (oBBoxFrom.isEqual(oBBoxTo)) {
return;
}
var oThis = this;
History.Create_NewPoint();
History.SetSelection(new Asc.Range(oBBoxFrom.c1, oBBoxFrom.r1, oBBoxFrom.c2, oBBoxFrom.r2));
History.SetSelectionRedo(new Asc.Range(oBBoxTo.c1, oBBoxTo.r1, oBBoxTo.c2, oBBoxTo.r2));
History.StartTransaction();
var offset = {
offsetRow: oBBoxTo.r1 - oBBoxFrom.r1,
offsetCol: oBBoxTo.c1 - oBBoxFrom.c1
};
var aTempObj = {
cells: {},
merged: null,
hyperlinks: null
};
for (var i = oBBoxFrom.r1; i <= oBBoxFrom.r2; i++) {
var row = this._getRowNoEmpty(i);
if (null != row) {
var oTempRow = {};
aTempObj.cells[i + offset.offsetRow] = oTempRow;
for (var j = oBBoxFrom.c1; j <= oBBoxFrom.c2; j++) {
var cell = row.c[j];
if (null != cell) {
oTempRow[j + offset.offsetCol] = cell;
}
}
}
}
if (false == this.workbook.bUndoChanges && false == this.workbook.bRedoChanges) {
var aMerged = this.mergeManager.get(oBBoxFrom);
if (aMerged.inner.length > 0) {
aTempObj.merged = aMerged.inner;
for (var i = 0, length = aTempObj.merged.length; i < length; i++) {
var elem = aTempObj.merged[i];
this.mergeManager.remove(elem.bbox, elem);
}
}
var aHyperlinks = this.hyperlinkManager.get(oBBoxFrom);
if (aHyperlinks.inner.length > 0) {
aTempObj.hyperlinks = aHyperlinks.inner;
for (var i = 0, length = aTempObj.hyperlinks.length; i < length; i++) {
var elem = aTempObj.hyperlinks[i];
this.hyperlinkManager.remove(elem.bbox, elem);
}
}
}
var aRangesToCheck = this._prepareMoveRangeGetCleanRanges(oBBoxFrom, oBBoxTo);
for (var i = 0, length = aRangesToCheck.length; i < length; i++) {
aRangesToCheck[i].cleanAll();
}
History.TurnOff();
var oRangeFrom = this.getRange3(oBBoxFrom.r1, oBBoxFrom.c1, oBBoxFrom.r2, oBBoxFrom.c2);
oRangeFrom._setPropertyNoEmpty(null, null, function (cell, nRow0, nCol0, nRowStart, nColStart) {
var row = oThis._getRowNoEmpty(nRow0);
if (null != row) {
delete row.c[nCol0];
}
});
var rec = this._moveRecalcGraph(oBBoxFrom, offset);
for (var i in aTempObj.cells) {
var oTempRow = aTempObj.cells[i];
var row = this._getRow(i - 0);
for (var j in oTempRow) {
var oTempCell = oTempRow[j];
if (null != oTempCell) {
oTempCell.moveHor(offset.offsetCol);
oTempCell.moveVer(offset.offsetRow);
row.c[j] = oTempCell;
if (oTempCell.sFormula) {
this.workbook.cwf[this.Id].cells[oTempCell.getName()] = oTempCell.getName();
rec[oTempCell.getName()] = [this.Id, oTempCell.getName()];
rec.length++;
}
}
}
}
var move = this.workbook.dependencyFormulas.helper(oBBoxTo, this.Id);
for (var id in move.recalc) {
var n = move.recalc[id];
var _sn = n.getSlaveEdges2();
for (var _id in _sn) {
rec[_sn[_id].nodeId] = [_sn[_id].sheetId, _sn[_id].cellId];
rec.length++;
}
}
this.workbook.buildDependency();
this.workbook.needRecalc = rec;
recalc(this.workbook);
History.TurnOn();
if (false == this.workbook.bUndoChanges && false == this.workbook.bRedoChanges) {
if (null != aTempObj.merged) {
for (var i = 0, length = aTempObj.merged.length; i < length; i++) {
var elem = aTempObj.merged[i];
elem.bbox.setOffset(offset);
this.mergeManager.add(elem.bbox, elem.data);
}
}
if (null != aTempObj.hyperlinks) {
for (var i = 0, length = aTempObj.hyperlinks.length; i < length; i++) {
var elem = aTempObj.hyperlinks[i];
elem.bbox.setOffset(offset);
this.hyperlinkManager.add(elem.bbox, elem.data);
}
}
}
if (oBBoxFrom.r2 > this.nRowsCount) {
this.nRowsCount = oBBoxFrom.r2 + 1;
}
if (oBBoxFrom.c2 > this.nColsCount) {
this.nColsCount = oBBoxFrom.c2 + 1;
}
if (oBBoxTo.r2 > this.nRowsCount) {
this.nRowsCount = oBBoxTo.r2 + 1;
}
if (oBBoxTo.c2 > this.nColsCount) {
this.nColsCount = oBBoxTo.c2 + 1;
}
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_MoveRange, this.getId(), new Asc.Range(0, 0, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_FromTo(new UndoRedoData_BBox(oBBoxFrom), new UndoRedoData_BBox(oBBoxTo)));
History.EndTransaction();
return true;
};
Woorksheet.prototype._shiftCellsLeft = function (oBBox) {
lockDraw(this.workbook);
var nLeft = oBBox.c1;
var nRight = oBBox.c2;
var dif = nLeft - nRight - 1;
for (var i = oBBox.r1; i <= oBBox.r2; i++) {
var row = this.aGCells[i];
if (row) {
var aIndexes = new Array();
for (var cellInd in row.c) {
var nIndex = cellInd - 0;
if (nIndex >= nLeft) {
aIndexes.push(nIndex);
}
}
aIndexes.sort(fSortAscending);
for (var j = 0, length2 = aIndexes.length; j < length2; ++j) {
var nCellInd = aIndexes[j];
if (nCellInd <= nRight) {
this._removeCell(i, nCellInd);
} else {
this._moveCellHor(i, nCellInd, dif, oBBox);
}
}
}
}
var res = this.renameDependencyNodes({
offsetRow: 0,
offsetCol: dif
},
oBBox);
buildRecalc(this.workbook);
unLockDraw(this.workbook);
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_ShiftCellsLeft, this.getId(), new Asc.Range(0, oBBox.r1, gc_nMaxCol0, oBBox.r1), new UndoRedoData_BBox(oBBox));
};
Woorksheet.prototype._shiftCellsUp = function (oBBox) {
lockDraw(this.workbook);
var nTop = oBBox.r1;
var nBottom = oBBox.r2;
var dif = nTop - nBottom - 1;
var aIndexes = new Array();
for (var i in this.aGCells) {
var rowInd = i - 0;
if (rowInd >= nTop) {
aIndexes.push(rowInd);
}
}
aIndexes.sort(fSortAscending);
for (var i = 0, length = aIndexes.length; i < length; ++i) {
var rowInd = aIndexes[i];
var row = this.aGCells[rowInd];
if (row) {
if (rowInd <= nBottom) {
for (var j = oBBox.c1; j <= oBBox.c2; j++) {
this._removeCell(rowInd, j);
}
} else {
var nIndex = rowInd + dif;
var rowTop = this._getRow(nIndex);
for (var j = oBBox.c1; j <= oBBox.c2; j++) {
this._moveCellVer(rowInd, j, dif);
}
}
}
}
var res = this.renameDependencyNodes({
offsetRow: dif,
offsetCol: 0
},
oBBox);
buildRecalc(this.workbook);
unLockDraw(this.workbook);
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_ShiftCellsTop, this.getId(), new Asc.Range(0, oBBox.r1, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_BBox(oBBox));
};
Woorksheet.prototype._shiftCellsRight = function (oBBox) {
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_ShiftCellsRight, this.getId(), new Asc.Range(0, oBBox.r1, gc_nMaxCol0, oBBox.r1), new UndoRedoData_BBox(oBBox));
History.TurnOff();
var nLeft = oBBox.c1;
var nRight = oBBox.c2;
var dif = nRight - nLeft + 1;
for (var i = oBBox.r1; i <= oBBox.r2; i++) {
var row = this.aGCells[i];
if (row) {
var aIndexes = new Array();
for (var cellInd in row.c) {
var nIndex = cellInd - 0;
if (nIndex >= nLeft) {
aIndexes.push(nIndex);
}
}
aIndexes.sort(fSortDescending);
for (var j = 0, length2 = aIndexes.length; j < length2; ++j) {
var nCellInd = aIndexes[j];
var cell = row.c[nCellInd];
if (cell) {
if (nCellInd + dif > this.nColsCount) {
this.nColsCount = nCellInd + dif;
}
this._moveCellHor(i, nCellInd, dif, oBBox);
}
}
}
}
var res = this.renameDependencyNodes({
offsetRow: 0,
offsetCol: dif
},
oBBox);
History.TurnOn();
};
Woorksheet.prototype._shiftCellsBottom = function (oBBox) {
lockDraw(this.workbook);
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_ShiftCellsBottom, this.getId(), new Asc.Range(0, oBBox.r1, gc_nMaxCol0, gc_nMaxRow0), new UndoRedoData_BBox(oBBox));
History.TurnOff();
var nTop = oBBox.r1;
var nBottom = oBBox.r2;
var dif = nBottom - nTop + 1;
var aIndexes = new Array();
for (var i in this.aGCells) {
var rowInd = i - 0;
if (rowInd >= nTop) {
aIndexes.push(rowInd);
}
}
aIndexes.sort(fSortDescending);
for (var i = 0, length = aIndexes.length; i < length; ++i) {
rowInd = aIndexes[i];
var row = this.aGCells[rowInd];
if (row) {
var nIndex = rowInd + dif;
if (nIndex + dif > this.nRowsCount) {
this.nRowsCount = nIndex + dif;
}
var rowTop = this._getRow(nIndex);
for (var j = oBBox.c1; j <= oBBox.c2; j++) {
this._moveCellVer(rowInd, j, dif);
}
}
}
var res = this.renameDependencyNodes({
offsetRow: dif,
offsetCol: 0
},
oBBox);
buildRecalc(this.workbook);
unLockDraw(this.workbook);
History.TurnOn();
};
Woorksheet.prototype._setIndex = function (ind) {
this.index = ind;
};
Woorksheet.prototype._BuildDependencies = function (cellRange) {
var c, ca;
for (var i in cellRange) {
ca = new CellAddress(i);
c = this._getCellNoEmpty(ca.getRow0(), ca.getCol0());
if (c && c.sFormula) {
c.formulaParsed = new parserFormula(c.sFormula, c.oId.getID(), this);
c.formulaParsed.parse();
c.formulaParsed.buildDependencies();
}
}
};
Woorksheet.prototype._RecalculatedFunctions = function (cell, bad) {
var thas = this;
function adjustCellFormat(c, ftext) {
var match = (/[^a-z0-9:]([a-z]+\d+:[a-z]+\d+|[a-z]+:[a-z]+|\d+:\d+|[a-z]+\d+)/i).exec("=" + ftext);
if (!match) {
return;
}
var m = match[1].split(":")[0];
if (m.search(/^[a-z]+$/i) >= 0) {
m = m + "1";
} else {
if (m.search(/^\d+$/) >= 0) {
m = "A" + m;
}
}
var ca = new CellAddress(m);
if (g_oDefaultNum.f == c.getNumFormatStr()) {
c.setNumFormat(thas.getCell(ca).getNumFormatStr());
}
}
if (cell.indexOf(":") > -1) {
return;
}
var celladd = this.getRange2(cell).getFirst(),
__cell = this._getCellNoEmpty(celladd.getRow0(), celladd.getCol0()),
res;
if (!__cell || !__cell.sFormula) {
return;
}
if (!bad) {
res = __cell.formulaParsed.calculate();
} else {
res = new cError(cErrorType.bad_reference);
}
if (res) {
if (res.type == cElementType.cell) {
var nF = res.numFormat;
res = res.getValue();
res.numFormat = nF;
} else {
if (res.type == cElementType.array) {
var nF = res.numFormat;
res = res.getElement(0);
res.numFormat = nF;
} else {
if (res.type == cElementType.cellsRange) {
var nF = res.numFormat;
res = res.cross(new CellAddress(cell));
res.numFormat = nF;
}
}
}
__cell.oValue.clean();
switch (res.type) {
case cElementType.number:
__cell.oValue.type = CellValueType.Number;
__cell.oValue.number = res.getValue();
break;
case cElementType.bool:
__cell.oValue.type = CellValueType.Bool;
__cell.oValue.number = res.value ? 1 : 0;
break;
case cElementType.error:
__cell.oValue.type = CellValueType.Error;
__cell.oValue.text = res.getValue().toString();
break;
case cElementType.name:
__cell.oValue.type = CellValueType.Error;
__cell.oValue.text = res.getValue().toString();
break;
default:
__cell.oValue.type = CellValueType.String;
__cell.oValue.text = res.getValue().toString();
}
__cell.setFormulaCA(res.ca);
if (res.numFormat !== undefined && res.numFormat >= 0) {
if (aStandartNumFormatsId[__cell.getNumFormatStr()] == 0) {
__cell.setNumFormat(aStandartNumFormats[res.numFormat]);
}
} else {
if (res.numFormat !== undefined && res.numFormat == -1) {
adjustCellFormat(__cell, __cell.sFormula);
}
}
}
};
Woorksheet.prototype._ReBuildFormulas = function (cellRange) {
var c, ca;
for (var i in cellRange) {
ca = new CellAddress(i);
c = this._getCellNoEmpty(ca.getRow0(), ca.getCol0());
if (c && c.formulaParsed && c.formulaParsed.is3D) {
c.setFormula(c.formulaParsed.assemble());
}
}
};
Woorksheet.prototype.renameDependencyNodes = function (offset, oBBox, rec, noDelete) {
var objForRebuldFormula = this.workbook.dependencyFormulas.checkOffset(oBBox, offset, this.Id, noDelete);
var c = {};
for (var id in objForRebuldFormula.move) {
var n = objForRebuldFormula.move[id].node;
var _sn = n.getSlaveEdges2();
for (var _id in _sn) {
var cell = _sn[_id].returnCell(),
cellName;
if (undefined == cell) {
continue;
}
cellName = cell.getName();
if (cell.formulaParsed) {
cell.formulaParsed.shiftCells(objForRebuldFormula.move[id].offset, oBBox, n, this.Id, objForRebuldFormula.move[id].toDelete);
cell.setFormula(cell.formulaParsed.assemble());
c[cellName] = cell;
}
}
if (n.cellId.indexOf(":") < 0) {
var cell = n.returnCell();
if (cell && cell.formulaParsed) {
c[cell.getName()] = cell;
}
}
}
for (var id in objForRebuldFormula.stretch) {
var n = objForRebuldFormula.stretch[id].node;
var _sn = n.getSlaveEdges2();
if (_sn == null) {
if (n.newCellId) {
n = this.workbook.dependencyFormulas.getNode(n.sheetId, n.newCellId);
_sn = n.getSlaveEdges2();
}
}
for (var _id in _sn) {
var cell = _sn[_id].returnCell(),
cellName = cell.getName();
if (cell && cell.formulaParsed) {
cell.formulaParsed.stretchArea(objForRebuldFormula.stretch[id].offset, oBBox, n, this.Id);
cell.setFormula(cell.formulaParsed.assemble());
c[cellName] = cell;
}
}
}
var id = null;
for (id in objForRebuldFormula) {
if (id == "recalc") {
continue;
}
for (var _id in objForRebuldFormula[id]) {
this.workbook.dependencyFormulas.deleteNode(objForRebuldFormula[id][_id].node);
}
}
for (var i in c) {
var ws = c[i].ws;
if (ws.getCell2(c[i].getName()).getCells()[0].formulaParsed) {
var n = c[i].getName();
c[i].formulaParsed.setCellId(n);
this.workbook.cwf[c[i].ws.Id].cells[n] = n;
c[i].formulaParsed.buildDependencies();
this.workbook.needRecalc[getVertexId(c[i].ws.Id, n)] = [c[i].ws.Id, n];
this.workbook.needRecalc.length++;
}
c[i] = null;
delete c[i];
}
for (var id in objForRebuldFormula.recalc) {
var n = objForRebuldFormula.recalc[id];
var _sn = n.getSlaveEdges();
for (var _id in _sn) {
if (!_sn[_id].isArea) {
this.workbook.needRecalc[_sn[_id].nodeId] = [_sn[_id].sheetId, _sn[_id].cellId];
this.workbook.needRecalc.length++;
}
}
}
if (false !== rec && lc <= 1) {
recalc(this.workbook);
}
};
Woorksheet.prototype.helperRebuildFormulas = function (cell, lastName) {
if (cell.sFormula) {
this.workbook.cwf[this.Id].cells[lastName] = null;
delete this.workbook.cwf[this.Id].cells[lastName];
}
};
Woorksheet.prototype.getAllCol = function () {
if (null == this.oAllCol) {
this.oAllCol = new Col(this, g_nAllColIndex);
}
return this.oAllCol;
};
Woorksheet.prototype.getHyperlinkByCell = function (row, col) {
var oHyperlink = this.hyperlinkManager.getByCell(row, col);
return oHyperlink ? oHyperlink.data : null;
};
Woorksheet.prototype.getMergedByCell = function (row, col) {
var oMergeInfo = this.mergeManager.getByCell(row, col);
return oMergeInfo ? oMergeInfo.bbox : null;
};
Woorksheet.prototype._expandRangeByMergedAddToOuter = function (aOuter, range, aMerged) {
for (var i = 0, length = aMerged.all.length; i < length; i++) {
var elem = aMerged.all[i];
if (!range.containsRange(elem.bbox)) {
aOuter.push(elem);
}
}
};
Woorksheet.prototype._expandRangeByMergedGetOuter = function (range) {
var aOuter = [];
this._expandRangeByMergedAddToOuter(aOuter, range, this.mergeManager.get({
r1: range.r1,
c1: range.c1,
r2: range.r2,
c2: range.c1
}));
if (range.c1 != range.c2) {
this._expandRangeByMergedAddToOuter(aOuter, range, this.mergeManager.get({
r1: range.r1,
c1: range.c2,
r2: range.r2,
c2: range.c2
}));
if (range.c2 - range.c1 > 1) {
this._expandRangeByMergedAddToOuter(aOuter, range, this.mergeManager.get({
r1: range.r1,
c1: range.c1 + 1,
r2: range.r1,
c2: range.c2 - 1
}));
if (range.r1 != range.r2) {
this._expandRangeByMergedAddToOuter(aOuter, range, this.mergeManager.get({
r1: range.r2,
c1: range.c1 + 1,
r2: range.r2,
c2: range.c2 - 1
}));
}
}
}
return aOuter;
};
Woorksheet.prototype.expandRangeByMerged = function (range) {
if (null != range) {
var aOuter = this._expandRangeByMergedGetOuter(range);
if (aOuter.length > 0) {
range = range.clone();
while (aOuter.length > 0) {
for (var i = 0, length = aOuter.length; i < length; i++) {
range.union2(aOuter[i].bbox);
}
aOuter = this._expandRangeByMergedGetOuter(range);
}
}
}
return range;
};
function Cell(worksheet) {
this.ws = worksheet;
this.sm = worksheet.workbook.oStyleManager;
this.cs = worksheet.workbook.CellStyles;
this.oValue = new CCellValue(this);
this.xfs = null;
this.tableXfs = null;
this.conditionalFormattingXfs = null;
this.bNeedCompileXfs = true;
this.compiledXfs = null;
this.oId = null;
this.oFormulaExt = null;
this.sFormula = null;
this.formulaParsed = null;
}
Cell.prototype.getStyle = function () {
if (this.bNeedCompileXfs) {
this.bNeedCompileXfs = false;
this.compileXfs();
}
return this.compiledXfs;
};
Cell.prototype.compileXfs = function () {
this.compiledXfs = null;
if (null != this.xfs || null != this.tableXfs || null != this.conditionalFormattingXfs) {
if (null != this.tableXfs) {
this.compiledXfs = this.tableXfs;
}
if (null != this.xfs) {
if (null != this.compiledXfs) {
this.compiledXfs = this.xfs.merge(this.compiledXfs);
} else {
this.compiledXfs = this.xfs;
}
}
if (null != this.conditionalFormattingXfs) {
if (null != this.compiledXfs) {
this.compiledXfs = this.conditionalFormattingXfs.merge(this.compiledXfs);
} else {
this.compiledXfs = this.xfs;
}
}
}
};
Cell.prototype.clone = function () {
var oNewCell = new Cell(this.ws);
oNewCell.oId = new CellAddress(this.oId.getRow(), this.oId.getCol());
if (null != this.xfs) {
oNewCell.xfs = this.xfs.clone();
}
oNewCell.oValue = this.oValue.clone(oNewCell);
if (null != this.sFormula) {
oNewCell.sFormula = this.sFormula;
}
return oNewCell;
};
Cell.prototype.create = function (xfs, oId) {
this.xfs = xfs;
this.oId = oId;
};
Cell.prototype.isEmptyText = function () {
if (false == this.oValue.isEmpty()) {
return false;
}
if (null != this.sFormula) {
return false;
}
return true;
};
Cell.prototype.isEmptyTextString = function () {
return this.oValue.isEmpty();
};
Cell.prototype.isEmpty = function () {
if (false == this.isEmptyText()) {
return false;
}
if (null != this.xfs) {
return false;
}
return true;
};
Cell.prototype.isFormula = function () {
return this.sFormula ? true : false;
};
Cell.prototype.Remove = function () {
this.ws._removeCell(null, null, this);
};
Cell.prototype.getName = function () {
return this.oId.getID();
};
Cell.prototype.cleanCache = function () {
this.oValue.cleanCache();
};
Cell.prototype.setFormula = function (val) {
this.sFormula = val;
this.oValue.cleanCache();
};
Cell.prototype.setValue = function (val, callback) {
var ret = true;
var DataOld = null;
if (History.Is_On()) {
DataOld = this.getValueData();
}
var sNumFormat;
if (null != this.xfs && null != this.xfs.num) {
sNumFormat = this.xfs.num.f;
} else {
sNumFormat = g_oDefaultNum.f;
}
var numFormat = oNumFormatCache.get(sNumFormat);
var wb = this.ws.workbook;
var ws = this.ws;
if (false == numFormat.isTextFormat()) {
if (null != val && val[0] == "=" && val.length > 1) {
var oldFP = undefined;
if (this.formulaParsed) {
oldFP = this.formulaParsed;
}
this.formulaParsed = new parserFormula(val.substring(1), this.oId.getID(), this.ws);
if (!this.formulaParsed.parse()) {
switch (this.formulaParsed.error[this.formulaParsed.error.length - 1]) {
case c_oAscError.ID.FrmlWrongFunctionName:
break;
default:
wb.handlers.trigger("asc_onError", this.formulaParsed.error[this.formulaParsed.error.length - 1], c_oAscError.Level.NoCritical);
if (callback) {
callback(false);
}
if (oldFP !== undefined) {
this.formulaParsed = oldFP;
}
return;
}
} else {
val = "=" + this.formulaParsed.assemble();
}
}
}
this.oValue.clean();
var needRecalc = false;
var ar = {};
if (null != val && val[0] != "=" || true == numFormat.isTextFormat()) {
if (this.sFormula) {
if (this.oId.getID() in wb.cwf[ws.Id].cells) {
wb.dependencyFormulas.deleteMasterNodes(ws.Id, this.oId.getID());
delete wb.cwf[ws.Id].cells[this.oId.getID()];
}
needRecalc = true;
ar[this.oId.getID()] = this.oId.getID();
} else {
if (wb.dependencyFormulas.nodeExist2(ws.Id, this.oId.getID())) {
needRecalc = true;
ar[this.oId.getID()] = this.oId.getID();
}
}
} else {
wb.dependencyFormulas.deleteMasterNodes(ws.Id, this.oId.getID());
needRecalc = true;
wb.cwf[ws.Id].cells[this.oId.getID()] = this.oId.getID();
ar[this.oId.getID()] = this.oId.getID();
if (!arrRecalc[this.ws.getId()]) {
arrRecalc[this.ws.getId()] = {};
}
arrRecalc[this.ws.getId()][this.oId.getID()] = this.oId.getID();
wb.needRecalc[getVertexId(this.ws.getId(), this.oId.getID())] = [this.ws.getId(), this.oId.getID()];
wb.needRecalc.length++;
}
this.sFormula = null;
this.setFormulaCA(false);
if (val) {
if (false == numFormat.isTextFormat() && val[0] == "=" && val.length > 1) {
this.setFormula(val.substring(1));
} else {
this.oValue.setValue(val);
}
}
if (needRecalc && this.ws.workbook.isNeedCacheClean) {
sortDependency(this.ws, ar);
} else {
if (this.ws.workbook.isNeedCacheClean == false) {
if (ws.workbook.dependencyFormulas.nodeExist2(this.ws.getId(), this.getName())) {
if (!arrRecalc[this.ws.getId()]) {
arrRecalc[this.ws.getId()] = {};
}
arrRecalc[this.ws.getId()][this.oId.getID()] = this.oId.getID();
wb.needRecalc[getVertexId(this.ws.getId(), this.oId.getID())] = [this.ws.getId(), this.oId.getID()];
wb.needRecalc.length++;
}
}
}
var DataNew = null;
if (History.Is_On()) {
DataNew = this.getValueData();
}
if (History.Is_On() && false == DataOld.isEqual(DataNew)) {
History.Add(g_oUndoRedoCell, historyitem_Cell_ChangeValue, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), DataOld, DataNew));
}
if (this.isEmptyTextString()) {
var cell = this.ws.getCell(this.oId);
cell.removeHyperlink();
}
return ret;
};
Cell.prototype.setValue2 = function (array) {
var DataOld = null;
if (History.Is_On()) {
DataOld = this.getValueData();
}
var ws = this.ws;
var wb = this.ws.workbook;
var needRecalc = false;
var ar = new Array();
if (this.sFormula) {
if (this.oId.getID() in wb.cwf[ws.Id].cells) {
wb.dependencyFormulas.deleteMasterNodes(ws.Id, this.oId.getID());
delete wb.cwf[ws.Id].cells[this.oId.getID()];
}
needRecalc = true;
ar.push(this.oId.getID());
} else {
if (wb.dependencyFormulas.nodeExist2(ws.Id, this.oId.getID())) {
needRecalc = true;
ar.push(this.oId.getID());
}
}
this.sFormula = null;
this.oValue.clean();
this.setFormulaCA(false);
this.oValue.setValue2(array);
if (needRecalc) {
sortDependency(this.ws, ar);
}
var DataNew = null;
if (History.Is_On()) {
DataNew = this.getValueData();
}
if (History.Is_On() && false == DataOld.isEqual(DataNew)) {
History.Add(g_oUndoRedoCell, historyitem_Cell_ChangeValue, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), DataOld, DataNew));
}
if (this.isEmptyTextString()) {
var cell = this.ws.getCell(this.oId);
cell.removeHyperlink();
}
};
Cell.prototype.setType = function (type) {
return this.oValue.type = type;
};
Cell.prototype.getType = function () {
return this.oValue.type;
};
Cell.prototype.setCellStyle = function (val) {
var newVal = this.cs._prepareCellStyle(val);
var oRes = this.sm.setCellStyle(this, newVal);
if (History.Is_On()) {
var oldStyleName = this.cs.getStyleNameByXfId(oRes.oldVal);
History.Add(g_oUndoRedoCell, historyitem_Cell_Style, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oldStyleName, val));
var oStyle = this.cs.getStyleByXfId(oRes.newVal);
if (oStyle.ApplyFont) {
this.setFont(oStyle.getFont());
}
if (oStyle.ApplyFill) {
this.setFill(oStyle.getFill());
}
if (oStyle.ApplyBorder) {
this.setBorder(oStyle.getBorder());
}
if (oStyle.ApplyNumberFormat) {
this.setNumFormat(oStyle.getNumFormatStr());
}
}
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.setNumFormat = function (val) {
var oRes;
if (val == aStandartNumFormats[0] && this.formulaParsed && this.formulaParsed.value && this.formulaParsed.value.numFormat !== null && this.formulaParsed.value.numFormat !== undefined && aStandartNumFormats[this.formulaParsed.value.numFormat]) {
oRes = this.sm.setNumFormat(this, aStandartNumFormats[this.formulaParsed.value.numFormat]);
} else {
oRes = this.sm.setNumFormat(this, val);
}
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_Numformat, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.shiftNumFormat = function (nShift, dDigitsCount) {
var bRes = false;
var bGeneral = true;
var sNumFormat;
if (null != this.xfs && null != this.xfs.num) {
sNumFormat = this.xfs.num.f;
} else {
sNumFormat = g_oDefaultNum.f;
}
if ("General" != sNumFormat) {
var oCurNumFormat = oNumFormatCache.get(sNumFormat);
if (null != oCurNumFormat && false == oCurNumFormat.isGeneralFormat()) {
bGeneral = false;
var output = new Object();
bRes = oCurNumFormat.shiftFormat(output, nShift);
if (true == bRes) {
this.setNumFormat(output.format);
}
}
}
if (bGeneral) {
if (CellValueType.Number == this.oValue.type) {
var sGeneral = DecodeGeneralFormat(this.oValue.number, this.oValue.type, dDigitsCount);
var oGeneral = oNumFormatCache.get(sGeneral);
if (null != oGeneral && false == oGeneral.isGeneralFormat()) {
var output = new Object();
bRes = oGeneral.shiftFormat(output, nShift);
if (true == bRes) {
this.setNumFormat(output.format);
}
}
}
}
this.oValue.cleanCache();
return bRes;
};
Cell.prototype.setFont = function (val, bModifyValue) {
if (false != bModifyValue) {
if (null != this.oValue.multiText) {
var oldVal = null;
if (History.Is_On()) {
oldVal = this.getValueData();
}
this.oValue.makeSimpleText();
if (History.Is_On()) {
var newVal = this.getValueData();
History.Add(g_oUndoRedoCell, historyitem_Cell_ChangeValue, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oldVal, newVal));
}
}
}
var oRes = this.sm.setFont(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
var oldVal = null;
if (null != oRes.oldVal) {
oldVal = oRes.oldVal.clone();
}
var newVal = null;
if (null != oRes.newVal) {
newVal = oRes.newVal.clone();
}
History.Add(g_oUndoRedoCell, historyitem_Cell_SetFont, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oldVal, newVal));
}
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.setFontname = function (val) {
this.oValue.setFontname(val);
var oRes = this.sm.setFontname(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_Fontname, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.setFontsize = function (val) {
this.oValue.setFontsize(val);
var oRes = this.sm.setFontsize(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_Fontsize, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.setFontcolor = function (val) {
this.oValue.setFontcolor(val);
var oRes = this.sm.setFontcolor(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_Fontcolor, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.setBold = function (val) {
this.oValue.setBold(val);
var oRes = this.sm.setBold(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_Bold, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.setItalic = function (val) {
this.oValue.setItalic(val);
var oRes = this.sm.setItalic(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_Italic, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.setUnderline = function (val) {
this.oValue.setUnderline(val);
var oRes = this.sm.setUnderline(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_Underline, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.setStrikeout = function (val) {
this.oValue.setStrikeout(val);
var oRes = this.sm.setStrikeout(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_Strikeout, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.setFontAlign = function (val) {
this.oValue.setFontAlign(val);
var oRes = this.sm.setFontAlign(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_FontAlign, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.setAlignVertical = function (val) {
var oRes = this.sm.setAlignVertical(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_AlignVertical, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
};
Cell.prototype.setAlignHorizontal = function (val) {
var oRes = this.sm.setAlignHorizontal(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_AlignHorizontal, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
};
Cell.prototype.setFill = function (val) {
var oRes = this.sm.setFill(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_Fill, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
};
Cell.prototype.setBorder = function (val) {
var oRes = this.sm.setBorder(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
var oldVal = null;
if (null != oRes.oldVal) {
oldVal = oRes.oldVal.clone();
}
var newVal = null;
if (null != oRes.newVal) {
newVal = oRes.newVal.clone();
}
History.Add(g_oUndoRedoCell, historyitem_Cell_Border, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oldVal, newVal));
}
this.bNeedCompileXfs = true;
};
Cell.prototype.setShrinkToFit = function (val) {
var oRes = this.sm.setShrinkToFit(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_ShrinkToFit, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
};
Cell.prototype.setWrap = function (val) {
var oRes = this.sm.setWrap(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_Wrap, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
};
Cell.prototype.setAngle = function (val) {
var oRes = this.sm.setAngle(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_Angle, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
};
Cell.prototype.setVerticalText = function (val) {
var oRes = this.sm.setVerticalText(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_Angle, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.bNeedCompileXfs = true;
};
Cell.prototype.setQuotePrefix = function (val) {
var oRes = this.sm.setQuotePrefix(this, val);
if (History.Is_On() && oRes.oldVal != oRes.newVal) {
History.Add(g_oUndoRedoCell, historyitem_Cell_SetQuotePrefix, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oRes.oldVal, oRes.newVal));
}
this.oValue.cleanCache();
};
Cell.prototype.setConditionalFormattingStyle = function (xfs) {
this.conditionalFormattingXfs = xfs;
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.setTableStyle = function (xfs) {
this.tableXfs = xfs;
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
};
Cell.prototype.setStyle = function (xfs) {
var oldVal = this.xfs;
var newVal = null;
this.xfs = null;
if (null != xfs) {
this.xfs = xfs.clone();
newVal = this.xfs;
}
this.bNeedCompileXfs = true;
this.oValue.cleanCache();
if (History.Is_On() && false == ((null == oldVal && null == newVal) || (null != oldVal && null != newVal && true == oldVal.isEqual(newVal)))) {
if (null != oldVal) {
oldVal = oldVal.clone();
}
if (null != newVal) {
newVal = newVal.clone();
}
History.Add(g_oUndoRedoCell, historyitem_Cell_SetStyle, this.ws.getId(), new Asc.Range(0, this.oId.getRow0(), gc_nMaxCol0, this.oId.getRow0()), new UndoRedoData_CellSimpleData(this.oId.getRow0(), this.oId.getCol0(), oldVal, newVal));
}
};
Cell.prototype.getFormula = function () {
if (null != this.sFormula) {
return this.sFormula;
} else {
return "";
}
};
Cell.prototype.getValueForEdit = function (numFormat) {
return this.oValue.getValueForEdit();
};
Cell.prototype.getValueForEdit2 = function (numFormat) {
return this.oValue.getValueForEdit2();
};
Cell.prototype.getValueWithoutFormat = function () {
return this.oValue.getValueWithoutFormat();
};
Cell.prototype.getValue = function (numFormat, dDigitsCount) {
return this.oValue.getValue();
};
Cell.prototype.getValue2 = function (dDigitsCount, fIsFitMeasurer) {
if (null == fIsFitMeasurer) {
fIsFitMeasurer = function (aText) {
return true;
};
}
if (null == dDigitsCount) {
dDigitsCount = gc_nMaxDigCountView;
}
return this.oValue.getValue2(dDigitsCount, fIsFitMeasurer);
};
Cell.prototype.getNumFormatStr = function () {
if (null != this.xfs && null != this.xfs.num) {
return this.xfs.num.f;
}
return g_oDefaultNum.f;
};
Cell.prototype.moveHor = function (val) {
this.oId.moveCol(val);
};
Cell.prototype.moveVer = function (val) {
this.oId.moveRow(val);
};
Cell.prototype.getOffset = function (cell) {
var cAddr1 = this.oId,
cAddr2 = cell.oId;
return {
offsetCol: (cAddr1.col - cAddr2.col),
offsetRow: (cAddr1.row - cAddr2.row)
};
};
Cell.prototype.getOffset2 = function (cellId) {
var cAddr1 = this.oId,
cAddr2 = new CellAddress(cellId);
return {
offsetCol: (cAddr1.col - cAddr2.col),
offsetRow: (cAddr1.row - cAddr2.row)
};
};
Cell.prototype.getOffset3 = function (cellAddr) {
var cAddr1 = this.oId,
cAddr2 = cellAddr;
return {
offsetCol: (cAddr1.col - cAddr2.col),
offsetRow: (cAddr1.row - cAddr2.row)
};
};
Cell.prototype.getCellAddress = function () {
return this.oId;
};
Cell.prototype.getValueData = function () {
return new UndoRedoData_CellValueData(this.sFormula, this.oValue.clone(null));
};
Cell.prototype.setValueData = function (Val) {
if (null != Val.formula) {
this.setValue("=" + Val.formula);
} else {
if (null != Val.value) {
if (null != Val.value.number) {
this.setValue(Val.value.number.toString());
} else {
if (null != Val.value.text) {
this.setValue(Val.value.text);
} else {
if (null != Val.value.multiText) {
this.setValue2(Val.value._cloneMultiText());
} else {
this.setValue("");
}
}
}
} else {
this.setValue("");
}
}
};
Cell.prototype.setFormulaCA = function (ca) {
if (ca) {
this.sFormulaCA = true;
} else {
if (this.sFormulaCA) {
delete this.sFormulaCA;
}
}
};
function Range(worksheet, r1, c1, r2, c2) {
this.worksheet = worksheet;
this.bbox = new Asc.Range(c1, r1, c2, r2);
this.first = new CellAddress(this.bbox.r1, this.bbox.c1, 0);
this.last = new CellAddress(this.bbox.r2, this.bbox.c2, 0);
}
Range.prototype.clone = function () {
return new Range(this.worksheet, this.bbox.r1, this.bbox.c1, this.bbox.r2, this.bbox.c2);
};
Range.prototype.getFirst = function () {
return this.first;
};
Range.prototype.getLast = function () {
return this.last;
};
Range.prototype._foreach = function (action) {
if (null != action) {
var oBBox = this.bbox;
for (var i = oBBox.r1; i <= oBBox.r2; i++) {
for (var j = oBBox.c1; j <= oBBox.c2; j++) {
var oCurCell = this.worksheet._getCell(i, j);
action(oCurCell, i, j, oBBox.r1, oBBox.c1);
}
}
}
};
Range.prototype._foreach2 = function (action) {
if (null != action) {
var oBBox = this.bbox,
minC = Math.min(this.worksheet.getColsCount(), oBBox.c2),
minR = Math.min(this.worksheet.getRowsCount(), oBBox.r2);
for (var i = oBBox.r1; i <= minR; i++) {
for (var j = oBBox.c1; j <= minC; j++) {
var oCurCell = this.worksheet._getCellNoEmpty(i, j);
var oRes = action(oCurCell, i, j, oBBox.r1, oBBox.c1);
if (null != oRes) {
return oRes;
}
}
}
}
};
Range.prototype._foreachNoEmpty = function (action) {
if (null != action) {
var oBBox = this.bbox,
minC = Math.min(this.worksheet.getColsCount(), oBBox.c2),
minR = Math.min(this.worksheet.getRowsCount(), oBBox.r2);
for (var i = oBBox.r1; i <= minR; i++) {
for (var j = oBBox.c1; j <= minC; j++) {
var oCurCell = this.worksheet._getCellNoEmpty(i, j);
if (null != oCurCell) {
var oRes = action(oCurCell, i, j, oBBox.r1, oBBox.c1);
if (null != oRes) {
return oRes;
}
}
}
}
}
};
Range.prototype._foreachRow = function (actionRow, actionCell) {
var oBBox = this.bbox;
for (var i = oBBox.r1; i <= oBBox.r2; i++) {
var row = this.worksheet._getRow(i);
if (row) {
if (null != actionRow) {
actionRow(row);
}
if (null != actionCell) {
for (var j in row.c) {
var oCurCell = row.c[j];
if (null != oCurCell) {
actionCell(oCurCell, i, j - 0, oBBox.r1, oBBox.c1);
}
}
}
}
}
};
Range.prototype._foreachRowNoEmpty = function (actionRow, actionCell) {
var oBBox = this.bbox;
if (0 == oBBox.r1 && gc_nMaxRow0 == oBBox.r2) {
var aRows = this.worksheet._getRows();
for (var i in aRows) {
var row = aRows[i];
if (null != actionRow) {
var oRes = actionRow(row);
if (null != oRes) {
return oRes;
}
}
if (null != actionCell) {
for (var j in row.c) {
var oCurCell = row.c[j];
if (null != oCurCell) {
var oRes = actionCell(oCurCell, i, j - 0, oBBox.r1, oBBox.c1);
if (null != oRes) {
return oRes;
}
}
}
}
}
} else {
var minR = Math.min(oBBox.r2, this.worksheet.getRowsCount());
for (var i = oBBox.r1; i <= minR; i++) {
var row = this.worksheet._getRowNoEmpty(i);
if (row) {
if (null != actionRow) {
var oRes = actionRow(row);
if (null != oRes) {
return oRes;
}
}
if (null != actionCell) {
for (var j in row.c) {
var oCurCell = row.c[j];
if (null != oCurCell) {
var oRes = actionCell(oCurCell, i, j - 0, oBBox.r1, oBBox.c1);
if (null != oRes) {
return oRes;
}
}
}
}
}
}
}
};
Range.prototype._foreachCol = function (actionCol, actionCell) {
var oBBox = this.bbox;
if (null != actionCol) {
for (var i = oBBox.c1; i <= oBBox.c2; ++i) {
var col = this.worksheet._getCol(i);
if (null != col) {
actionCol(col);
}
}
}
if (null != actionCell) {
var nRangeType = this._getRangeType();
var aRows = this.worksheet._getRows();
for (var i in aRows) {
var row = aRows[i];
if (row) {
if (0 == oBBox.c1 && gc_nMaxCol0 == oBBox.c2) {
for (var j in row.c) {
var oCurCell = row.c[j];
if (null != oCurCell) {
actionCell(oCurCell, i - 0, j, oBBox.r1, oBBox.c1);
}
}
} else {
for (var j = oBBox.c1; j <= oBBox.c2; ++j) {
var oCurCell = row.c[j];
if (null != oCurCell) {
actionCell(oCurCell, i - 0, j, oBBox.r1, oBBox.c1);
}
}
}
}
}
}
};
Range.prototype._foreachColNoEmpty = function (actionCol, actionCell) {
var oBBox = this.bbox;
var minC = Math.min(oBBox.c2, this.worksheet.getColsCount());
if (0 == oBBox.c1 && gc_nMaxCol0 == oBBox.c2) {
if (null != actionCol) {
var aCols = this.worksheet._getCols();
for (var i in aCols) {
var nIndex = i - 0;
if (nIndex >= oBBox.c1 && nIndex <= minC) {
var col = this.worksheet._getColNoEmpty(nIndex);
if (null != col) {
var oRes = actionCol(col);
if (null != oRes) {
return oRes;
}
}
}
}
}
if (null != actionCell) {
var aRows = this.worksheet._getRows();
for (var i in aRows) {
var row = aRows[i];
if (row) {
for (var j in row.c) {
var nIndex = j - 0;
if (nIndex >= oBBox.c1 && nIndex <= minC) {
var oCurCell = row.c[j];
if (null != oCurCell) {
var oRes = actionCell(oCurCell, i - 0, j, oBBox.r1, oBBox.c1);
if (null != oRes) {
return oRes;
}
}
}
}
}
}
}
} else {
if (null != actionCol) {
for (var i = oBBox.c1; i <= minC; ++i) {
var col = this.worksheet._getColNoEmpty(i);
if (null != col) {
var oRes = actionCol(col);
if (null != oRes) {
return oRes;
}
}
}
}
if (null != actionCell) {
var aRows = this.worksheet._getRows();
for (var i in aRows) {
var row = aRows[i];
if (row) {
for (var j = oBBox.c1; j <= minC; ++j) {
var oCurCell = row.c[j];
if (null != oCurCell) {
var oRes = actionCell(oCurCell, i - 0, j, oBBox.r1, oBBox.c1);
if (null != oRes) {
return oRes;
}
}
}
}
}
}
}
};
Range.prototype._foreachIndex = function (action) {
var oBBox = this.bbox;
for (var i = oBBox.r1; i <= oBBox.r2; i++) {
for (var j = oBBox.c1; j <= oBBox.c2; j++) {
var res = action(i, j);
if (null != res) {
return res;
}
}
}
return null;
};
Range.prototype._getRangeType = function (oBBox) {
if (null == oBBox) {
oBBox = this.bbox;
}
return getRangeType(oBBox);
};
Range.prototype._setProperty = function (actionRow, actionCol, actionCell) {
var nRangeType = this._getRangeType();
if (c_oRangeType.Range == nRangeType) {
this._foreach(actionCell);
} else {
if (c_oRangeType.Row == nRangeType) {
this._foreachRow(actionRow, actionCell);
} else {
if (c_oRangeType.Col == nRangeType) {
this._foreachCol(actionCol, actionCell);
} else {}
}
}
};
Range.prototype._setPropertyNoEmpty = function (actionRow, actionCol, actionCell) {
var nRangeType = this._getRangeType();
if (c_oRangeType.Range == nRangeType) {
this._foreachNoEmpty(actionCell);
} else {
if (c_oRangeType.Row == nRangeType) {
this._foreachRowNoEmpty(actionRow, actionCell);
} else {
if (c_oRangeType.Col == nRangeType) {
this._foreachColNoEmpty(actionCol, actionCell);
} else {
this._foreachRowNoEmpty(actionRow, actionCell);
if (null != actionCol) {
this._foreachColNoEmpty(actionCol, null);
}
}
}
}
};
Range.prototype.containCell = function (cellId) {
var cellAddress = cellId;
return cellAddress.getRow0() >= this.bbox.r1 && cellAddress.getCol0() >= this.bbox.c1 && cellAddress.getRow0() <= this.bbox.r2 && cellAddress.getCol0() <= this.bbox.c2;
};
Range.prototype.cross = function (cellAddress) {
if (cellAddress.getRow0() >= this.bbox.r1 && cellAddress.getRow0() <= this.bbox.r2 && this.bbox.c1 == this.bbox.c2) {
return {
r: cellAddress.getRow()
};
}
if (cellAddress.getCol0() >= this.bbox.c1 && cellAddress.getCol0() <= this.bbox.c2 && this.bbox.r1 == this.bbox.r2) {
return {
c: cellAddress.getCol()
};
}
return undefined;
};
Range.prototype.getWorksheet = function () {
return this.worksheet;
};
Range.prototype.isFormula = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
return cell.isFormula();
};
Range.prototype.isOneCell = function () {
var oBBox = this.bbox;
return oBBox.r1 == oBBox.r2 && oBBox.c1 == oBBox.c2;
};
Range.prototype.isColumn = function () {
if (this.first.getRow() == 1 && this.last.getRow() == gc_nMaxRow) {
return true;
} else {
return false;
}
};
Range.prototype.isRow = function () {
if (this.first.getCol() == 1 && this.last.getCol() == gc_nMaxCol) {
return true;
} else {
return false;
}
};
Range.prototype.getBBox = function () {
return {
r1: this.bbox.r1 + 1,
r2: this.bbox.r2 + 1,
c1: this.bbox.c1 + 1,
c2: this.bbox.c2 + 1
};
};
Range.prototype.getBBox0 = function () {
return this.bbox;
};
Range.prototype.getName = function () {
var first = this.getFirst();
var sRes = first.getID();
if (false == this.isOneCell()) {
var last = this.getLast();
sRes = sRes + ":" + last.getID();
}
return sRes;
};
Range.prototype.getCells = function () {
var aResult = new Array();
var oBBox = this.bbox;
if (! ((0 == oBBox.c1 && gc_nMaxCol0 == oBBox.c2) || (0 == oBBox.r1 && gc_nMaxRow0 == oBBox.r2))) {
for (var i = oBBox.r1; i <= oBBox.r2; i++) {
for (var j = oBBox.c1; j <= oBBox.c2; j++) {
aResult.push(this.worksheet._getCell(i, j));
}
}
}
return aResult;
};
Range.prototype.setValue = function (val, callback) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
History.StartTransaction();
var oThis = this;
this._foreach(function (cell) {
cell.setValue(val, callback);
});
History.EndTransaction();
};
Range.prototype.setValue2 = function (array) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
History.StartTransaction();
var wb = this.worksheet.workbook,
ws = this.worksheet,
needRecalc = false,
ar = [];
var oThis = this;
this._foreach(function (cell) {
cell.setValue2(array);
});
History.EndTransaction();
};
Range.prototype.setCellStyle = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setCellStyle(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setCellStyle(val);
},
function (col) {
col.setCellStyle(val);
},
function (cell) {
cell.setCellStyle(val);
});
};
Range.prototype.setTableStyle = function (val) {
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
},
function (col) {},
function (cell) {
cell.setTableStyle(val);
});
};
Range.prototype.setNumFormat = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setNumFormat(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setNumFormat(val);
},
function (col) {
col.setNumFormat(val);
},
function (cell) {
cell.setNumFormat(val);
});
};
Range.prototype.shiftNumFormat = function (nShift, aDigitsCount) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
var bRes = false;
var oThis = this;
this._setPropertyNoEmpty(null, null, function (cell, nRow0, nCol0, nRowStart, nColStart) {
bRes |= cell.shiftNumFormat(nShift, aDigitsCount[nCol0 - nColStart] || 8);
});
return bRes;
};
Range.prototype.setFont = function (val) {
History.Create_NewPoint();
History.SetSelection(this.bbox.clone());
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setFont(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setFont(val);
},
function (col) {
col.setFont(val);
},
function (cell) {
cell.setFont(val);
});
};
Range.prototype.setFontname = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setFontname(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setFontname(val);
},
function (col) {
col.setFontname(val);
},
function (cell) {
cell.setFontname(val);
});
};
Range.prototype.setFontsize = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setFontsize(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setFontsize(val);
},
function (col) {
col.setFontsize(val);
},
function (cell) {
cell.setFontsize(val);
});
};
Range.prototype.setFontcolor = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setFontcolor(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setFontcolor(val);
},
function (col) {
col.setFontcolor(val);
},
function (cell) {
cell.setFontcolor(val);
});
};
Range.prototype.setBold = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setBold(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setBold(val);
},
function (col) {
col.setBold(val);
},
function (cell) {
cell.setBold(val);
});
};
Range.prototype.setItalic = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setItalic(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setItalic(val);
},
function (col) {
col.setItalic(val);
},
function (cell) {
cell.setItalic(val);
});
};
Range.prototype.setUnderline = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setUnderline(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setUnderline(val);
},
function (col) {
col.setUnderline(val);
},
function (cell) {
cell.setUnderline(val);
});
};
Range.prototype.setStrikeout = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setStrikeout(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setStrikeout(val);
},
function (col) {
col.setStrikeout(val);
},
function (cell) {
cell.setStrikeout(val);
});
};
Range.prototype.setFontAlign = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setFontAlign(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setFontAlign(val);
},
function (col) {
col.setFontAlign(val);
},
function (cell) {
cell.setFontAlign(val);
});
};
Range.prototype.setAlignVertical = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
if ("none" == val) {
val = null;
}
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setAlignVertical(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setAlignVertical(val);
},
function (col) {
col.setAlignVertical(val);
},
function (cell) {
cell.setAlignVertical(val);
});
};
Range.prototype.setAlignHorizontal = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setAlignHorizontal(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setAlignHorizontal(val);
},
function (col) {
col.setAlignHorizontal(val);
},
function (cell) {
cell.setAlignHorizontal(val);
});
};
Range.prototype.setFill = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setFill(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setFill(val);
},
function (col) {
col.setFill(val);
},
function (cell) {
cell.setFill(val);
});
};
Range.prototype.setBorderSrc = function (border) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
History.StartTransaction();
if (null == border) {
border = new Border();
}
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setBorder(border.clone());
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setBorder(border.clone());
},
function (col) {
col.setBorder(border.clone());
},
function (cell) {
cell.setBorder(border.clone());
});
History.EndTransaction();
};
Range.prototype.setBorder = function (border) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
var nRangeType = this._getRangeType();
var oThis = this;
var fSetBorder = function (nRow, nCol, oNewBorder) {
if (null == oNewBorder) {
var cell = oThis.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
cell.setBorder(oNewBorder);
}
} else {
if (oNewBorder.isEqual(g_oDefaultBorderAbs)) {
return;
}
var _cell = oThis.worksheet.getCell(new CellAddress(nRow, nCol, 0));
var oCurBorder = _cell.getBorderSrc().clone();
oCurBorder.mergeInner(oNewBorder);
var cell = oThis.worksheet._getCell(nRow, nCol);
cell.setBorder(oCurBorder);
}
};
var fSetBorderRowCol = function (rowcol, oNewBorder) {
if (null == oNewBorder) {
rowcol.setBorder(null);
} else {
if (oNewBorder.isEqual(g_oDefaultBorderAbs)) {
return;
}
var oCurBorder;
if (null != rowcol.xfs && null != rowcol.xfs.border) {
oCurBorder = rowcol.xfs.border.clone();
} else {
oCurBorder = new Border();
}
oCurBorder.mergeInner(oNewBorder);
rowcol.setBorder(oNewBorder);
}
};
var nEdgeTypeLeft = 1;
var nEdgeTypeTop = 2;
var nEdgeTypeRight = 3;
var nEdgeTypeBottom = 4;
var fSetBorderEdge = function (nRow, nCol, oNewBorder, type) {
var _cell = oThis.worksheet.getCell(new CellAddress(nRow, nCol, 0));
var oCurBorder = _cell.getBorderSrc().clone();
var oCurBorderProp;
var oNewBorderProp = null;
if (null == oNewBorder) {
oNewBorderProp = new BorderProp();
}
switch (type) {
case nEdgeTypeLeft:
oCurBorderProp = oCurBorder.r;
if (null != oNewBorder) {
oNewBorderProp = oNewBorder.l;
}
break;
case nEdgeTypeTop:
oCurBorderProp = oCurBorder.b;
if (null != oNewBorder) {
oNewBorderProp = oNewBorder.t;
}
break;
case nEdgeTypeRight:
oCurBorderProp = oCurBorder.l;
if (null != oNewBorder) {
oNewBorderProp = oNewBorder.r;
}
break;
case nEdgeTypeBottom:
oCurBorderProp = oCurBorder.t;
if (null != oNewBorder) {
oNewBorderProp = oNewBorder.b;
}
break;
}
if (null != oNewBorderProp && null != oCurBorderProp && c_oAscBorderStyles.None != oCurBorderProp.s && (null == oNewBorder || c_oAscBorderStyles.None != oNewBorderProp.s) && (oNewBorderProp.s != oCurBorderProp.s || oNewBorderProp.getRgbOrNull() != oCurBorderProp.getRgbOrNull())) {
switch (type) {
case nEdgeTypeLeft:
oCurBorder.r = new BorderProp();
break;
case nEdgeTypeTop:
oCurBorder.b = new BorderProp();
break;
case nEdgeTypeRight:
oCurBorder.l = new BorderProp();
break;
case nEdgeTypeBottom:
oCurBorder.t = new BorderProp();
break;
}
var cell = oThis.worksheet._getCell(nRow, nCol);
cell.setBorder(oCurBorder);
}
};
var fSetBorderRowColEdge = function (rowcol, oNewBorder, type) {
if (null != rowcol.xfs && null != rowcol.xfs.border) {
var oCurBorder = rowcol.xfs.border.clone();
var oCurBorderProp;
var oNewBorderProp;
if (null == oNewBorder) {
oNewBorderProp = new BorderProp();
}
switch (type) {
case nEdgeTypeLeft:
oCurBorderProp = oCurBorder.r;
if (null != oNewBorder) {
oNewBorderProp = oNewBorder.l;
}
break;
case nEdgeTypeTop:
oCurBorderProp = oCurBorder.b;
if (null != oNewBorder) {
oNewBorderProp = oNewBorder.t;
}
break;
case nEdgeTypeRight:
oCurBorderProp = oCurBorder.l;
if (null != oNewBorder) {
oNewBorderProp = oNewBorder.r;
}
break;
case nEdgeTypeBottom:
oCurBorderProp = oCurBorder.t;
if (null != oNewBorder) {
oNewBorderProp = oNewBorder.b;
}
break;
}
if (null != oNewBorderProp && null != oCurBorderProp && c_oAscBorderStyles.None != oCurBorderProp.s && (null == oNewBorder || c_oAscBorderStyles.None != oNewBorderProp.s) && (oNewBorderProp.s != oCurBorderProp.s || oNewBorderProp.getRgbOrNull() != oCurBorderProp.getRgbOrNull())) {
switch (type) {
case nEdgeTypeLeft:
oCurBorder.r = new BorderProp();
break;
case nEdgeTypeTop:
oCurBorder.b = new BorderProp();
break;
case nEdgeTypeRight:
oCurBorder.l = new BorderProp();
break;
case nEdgeTypeBottom:
oCurBorder.t = new BorderProp();
break;
}
rowcol.setBorder(oCurBorder);
}
}
};
if (null != border && border.isEqual(g_oDefaultBorderAbs)) {
border = null;
}
if (nRangeType == c_oRangeType.Col) {
var oLeftOuter = null;
var oLeftInner = null;
var oInner = null;
var oRightInner = null;
var oRightOuter = null;
var nWidth = oBBox.c2 - oBBox.c1 + 1;
if (null != border) {
if (oBBox.c1 > 0 && null != border.l) {
oLeftOuter = new Border();
oLeftOuter.l = border.l;
}
if (oBBox.c2 < gc_nMaxCol0 && null != border.r) {
oRightOuter = new Border();
oRightOuter.r = border.r;
}
oLeftInner = new Border();
oLeftInner.l = border.l;
oLeftInner.t = border.ih;
if (nWidth > 1) {
oLeftInner.r = border.iv;
} else {
oLeftInner.r = border.r;
}
oLeftInner.b = border.ih;
oLeftInner.d = border.d;
oLeftInner.dd = border.dd;
oLeftInner.du = border.du;
if (oLeftInner.isEqual(g_oDefaultBorderAbs)) {
oLeftInner = null;
}
if (nWidth > 1) {
oRightInner = new Border();
oRightInner.l = border.iv;
oRightInner.t = border.ih;
oRightInner.r = border.r;
oRightInner.b = border.ih;
oRightInner.d = border.d;
oRightInner.dd = border.dd;
oRightInner.du = border.du;
if (oRightInner.isEqual(g_oDefaultBorderAbs)) {
oRightInner = null;
}
}
if (nWidth > 2) {
oInner = new Border();
oInner.l = border.iv;
oInner.t = border.ih;
oInner.r = border.iv;
oInner.b = border.ih;
oInner.d = border.d;
oInner.dd = border.dd;
oInner.du = border.du;
if (oInner.isEqual(g_oDefaultBorderAbs)) {
oInner = null;
}
}
}
if (oBBox.c1 > 0) {
var oTempRange = this.worksheet.getRange(new CellAddress(0, oBBox.c1 - 1, 0), new CellAddress(gc_nMaxRow0, oBBox.c1 - 1, 0));
oTempRange._foreachColNoEmpty(function (col) {
if (null != col.xfs) {
fSetBorderRowColEdge(col, oLeftOuter, nEdgeTypeLeft);
}
},
function (cell, nRow, nCol, nRowStart, nColStart) {
fSetBorderEdge(nRow, nCol, oLeftOuter, nEdgeTypeLeft);
});
}
var oTempRange = this.worksheet.getRange(new CellAddress(0, oBBox.c1, 0), new CellAddress(gc_nMaxRow0, oBBox.c1, 0));
oTempRange._foreachCol(function (col) {
fSetBorderRowCol(col, oLeftInner);
},
function (cell, nRow, nCol, nRowStart, nColStart) {
fSetBorder(nRow, nCol, oLeftInner);
});
if (nWidth > 2) {
var oTempRange = this.worksheet.getRange(new CellAddress(0, oBBox.c1 + 1, 0), new CellAddress(gc_nMaxRow0, oBBox.c2 - 1, 0));
oTempRange._foreachCol(function (col) {
fSetBorderRowCol(col, oInner);
},
function (cell, nRow, nCol, nRowStart, nColStart) {
fSetBorder(nRow, nCol, oInner);
});
}
if (nWidth > 1) {
var oTempRange = this.worksheet.getRange(new CellAddress(0, oBBox.c2, 0), new CellAddress(gc_nMaxRow0, oBBox.c2, 0));
oTempRange._foreachCol(function (col) {
fSetBorderRowCol(col, oRightInner);
},
function (cell, nRow, nCol, nRowStart, nColStart) {
fSetBorder(nRow, nCol, oRightInner);
});
}
if (oBBox.c2 < gc_nMaxCol0) {
var oTempRange = this.worksheet.getRange(new CellAddress(0, oBBox.c2 + 1, 0), new CellAddress(gc_nMaxRow0, oBBox.c2 + 1, 0));
oTempRange._foreachColNoEmpty(function (col) {
if (null != col.xfs) {
fSetBorderRowColEdge(col, oRightOuter, nEdgeTypeRight);
}
},
function (cell, nRow, nCol, nRowStart, nColStart) {
fSetBorderEdge(nRow, nCol, oRightOuter, nEdgeTypeRight);
});
}
} else {
if (nRangeType == c_oRangeType.Row) {
var oTopOuter = null;
var oTopInner = null;
var oInner = null;
var oBottomInner = null;
var oBottomOuter = null;
var nHeight = oBBox.r2 - oBBox.r1 + 1;
if (null != border) {
if (oBBox.r1 > 0 && null != border.t) {
oTopOuter = new Border();
oTopOuter.t = border.t;
}
if (oBBox.r2 < gc_nMaxRow0 && null != border.b) {
oBottomOuter = new Border();
oBottomOuter.b = border.b;
}
oTopInner = new Border();
oTopInner.l = border.iv;
oTopInner.t = border.t;
oTopInner.r = border.iv;
if (nHeight > 1) {
oTopInner.b = border.ih;
} else {
oTopInner.b = border.b;
}
oTopInner.d = border.d;
oTopInner.dd = border.dd;
oTopInner.du = border.du;
if (oTopInner.isEqual(g_oDefaultBorderAbs)) {
oTopInner = null;
}
if (nHeight > 1) {
oBottomInner = new Border();
oBottomInner.l = border.iv;
oBottomInner.t = border.ih;
oBottomInner.r = border.iv;
oBottomInner.b = border.b;
oBottomInner.d = border.d;
oBottomInner.dd = border.dd;
oBottomInner.du = border.du;
if (oBottomInner.isEqual(g_oDefaultBorderAbs)) {
oBottomInner = null;
}
}
if (nHeight > 2) {
oInner = new Border();
oInner.l = border.iv;
oInner.t = border.ih;
oInner.r = border.iv;
oInner.b = border.ih;
oInner.d = border.d;
oInner.dd = border.dd;
oInner.du = border.du;
if (oInner.isEqual(g_oDefaultBorderAbs)) {
oInner = null;
}
}
}
if (oBBox.r1 > 0) {
var oTempRange = this.worksheet.getRange(new CellAddress(oBBox.r1 - 1, 0, 0), new CellAddress(oBBox.r1 - 1, gc_nMaxCol0, 0));
oTempRange._foreachRowNoEmpty(function (row) {
if (null != row.xfs) {
fSetBorderRowColEdge(row, oTopOuter, nEdgeTypeTop);
}
},
function (cell, nRow, nCol, nRowStart, nColStart) {
fSetBorderEdge(nRow, nCol, oTopOuter, nEdgeTypeTop);
});
}
var oTempRange = this.worksheet.getRange(new CellAddress(oBBox.r1, 0, 0), new CellAddress(oBBox.r1, gc_nMaxCol0, 0));
oTempRange._foreachRow(function (row) {
fSetBorderRowCol(row, oTopInner);
},
function (cell, nRow, nCol, nRowStart, nColStart) {
fSetBorder(nRow, nCol, oTopInner);
});
if (nHeight > 2) {
var oTempRange = this.worksheet.getRange(new CellAddress(oBBox.r1 + 1, 0, 0), new CellAddress(oBBox.r2 - 1, gc_nMaxCol0, 0));
oTempRange._foreachRow(function (row) {
fSetBorderRowCol(row, oInner);
},
function (cell, nRow, nCol, nRowStart, nColStart) {
fSetBorder(nRow, nCol, oInner);
});
}
if (nHeight > 1) {
var oTempRange = this.worksheet.getRange(new CellAddress(oBBox.r2, 0, 0), new CellAddress(oBBox.r2, gc_nMaxCol0, 0));
oTempRange._foreachRow(function (row) {
fSetBorderRowCol(row, oBottomInner);
},
function (cell, nRow, nCol, nRowStart, nColStart) {
fSetBorder(nRow, nCol, oBottomInner);
});
}
if (oBBox.r2 < gc_nMaxRow0) {
var oTempRange = this.worksheet.getRange(new CellAddress(oBBox.r2 + 1, 0, 0), new CellAddress(oBBox.r2 + 1, gc_nMaxCol0, 0));
oTempRange._foreachRowNoEmpty(function (row) {
if (null != row.xfs) {
fSetBorderRowColEdge(row, oBottomOuter, nEdgeTypeBottom);
}
},
function (cell, nRow, nCol, nRowStart, nColStart) {
fSetBorderEdge(nRow, nCol, oBottomOuter, nEdgeTypeBottom);
});
}
} else {
if (nRangeType == c_oRangeType.Range) {
var bLeftBorder = false;
var bTopBorder = false;
var bRightBorder = false;
var bBottomBorder = false;
if (null == border) {
this._foreachNoEmpty(function (cell) {
cell.setBorder(border);
});
bLeftBorder = true;
bTopBorder = true;
bRightBorder = true;
bBottomBorder = true;
} else {
bLeftBorder = null != border.l;
bTopBorder = null != border.t;
bRightBorder = null != border.r;
bBottomBorder = null != border.b;
var bInnerHBorder = null != border.ih;
var bInnerVBorder = null != border.iv;
var bDiagonal = null != border.d;
if (oBBox.c1 == oBBox.c2 && oBBox.r1 == oBBox.r2) {
fSetBorder(oBBox.r1, oBBox.c1, border);
} else {
if (oBBox.c1 == oBBox.c2) {
if (bLeftBorder || bTopBorder || bRightBorder || bInnerHBorder || bDiagonal) {
var oLTBorder = new Border();
oLTBorder.l = border.l;
oLTBorder.t = border.t;
oLTBorder.r = border.r;
oLTBorder.b = border.ih;
oLTBorder.d = border.d;
oLTBorder.dd = border.dd;
oLTBorder.du = border.du;
fSetBorder(oBBox.r1, oBBox.c1, oLTBorder);
}
if (bLeftBorder || bBottomBorder || bRightBorder || bInnerHBorder || bDiagonal) {
var oLBBorder = new Border();
oLBBorder.l = border.l;
oLBBorder.t = border.ih;
oLBBorder.r = border.r;
oLBBorder.b = border.b;
oLBBorder.d = border.d;
oLBBorder.dd = border.dd;
oLBBorder.du = border.du;
fSetBorder(oBBox.r2, oBBox.c1, oLBBorder);
}
} else {
if (bLeftBorder || bTopBorder || bInnerVBorder || (oBBox.r1 == oBBox.r2 ? bBottomBorder : bInnerHBorder) || bDiagonal) {
var oLTBorder = new Border();
oLTBorder.l = border.l;
oLTBorder.t = border.t;
oLTBorder.r = border.iv;
if (oBBox.r1 == oBBox.r2) {
oLTBorder.b = border.b;
} else {
oLTBorder.b = border.ih;
}
oLTBorder.d = border.d;
oLTBorder.dd = border.dd;
oLTBorder.du = border.du;
fSetBorder(oBBox.r1, oBBox.c1, oLTBorder);
}
if (oBBox.r1 != oBBox.r2 && (bLeftBorder || bInnerVBorder || bInnerHBorder || bBottomBorder || bDiagonal)) {
var oLBBorder = new Border();
oLBBorder.l = border.l;
oLBBorder.t = border.ih;
oLBBorder.r = border.iv;
oLBBorder.b = border.b;
oLBBorder.d = border.d;
oLBBorder.dd = border.dd;
oLBBorder.du = border.du;
fSetBorder(oBBox.r2, oBBox.c1, oLBBorder);
}
if (bRightBorder || bTopBorder || bInnerVBorder || (oBBox.r1 == oBBox.r2 ? bBottomBorder : bInnerHBorder) || bDiagonal) {
var oRTBorder = new Border();
oRTBorder.l = border.iv;
oRTBorder.t = border.t;
oRTBorder.r = border.r;
if (oBBox.r1 == oBBox.r2) {
oRTBorder.b = border.b;
} else {
oRTBorder.b = border.ih;
}
oRTBorder.d = border.d;
oRTBorder.dd = border.dd;
oRTBorder.du = border.du;
fSetBorder(oBBox.r1, oBBox.c2, oRTBorder);
}
if (oBBox.r1 != oBBox.r2 && (bRightBorder || bInnerHBorder || bInnerVBorder || bBottomBorder || bDiagonal)) {
var oRBBorder = new Border();
oRBBorder.l = border.iv;
oRBBorder.t = border.ih;
oRBBorder.r = border.r;
oRBBorder.b = border.b;
oRBBorder.d = border.d;
oRBBorder.dd = border.dd;
oRBBorder.du = border.du;
fSetBorder(oBBox.r2, oBBox.c2, oRBBorder);
}
}
if (bTopBorder || bInnerVBorder || (oBBox.r1 == oBBox.r2 ? bBottomBorder : bInnerHBorder) || bDiagonal) {
for (var i = oBBox.c1 + 1; i < oBBox.c2; i++) {
var oTopBorder = new Border();
oTopBorder.l = border.iv;
oTopBorder.t = border.t;
oTopBorder.r = border.iv;
if (oBBox.r1 == oBBox.r2) {
oTopBorder.b = border.b;
} else {
oTopBorder.b = border.ih;
}
oTopBorder.d = border.d;
oTopBorder.dd = border.dd;
oTopBorder.du = border.du;
fSetBorder(oBBox.r1, i, oTopBorder);
}
}
if (oBBox.r1 != oBBox.r2 && (bBottomBorder || bInnerVBorder || bInnerHBorder || bDiagonal)) {
for (var i = oBBox.c1 + 1; i < oBBox.c2; i++) {
var oBottomBorder = new Border();
oBottomBorder.l = border.iv;
oBottomBorder.t = border.ih;
oBottomBorder.r = border.iv;
oBottomBorder.b = border.b;
oBottomBorder.d = border.d;
oBottomBorder.dd = border.dd;
oBottomBorder.du = border.du;
fSetBorder(oBBox.r2, i, oBottomBorder);
}
}
if (bLeftBorder || bInnerHBorder || (oBBox.c1 == oBBox.c2 ? bRightBorder : bInnerVBorder) || bDiagonal) {
for (var i = oBBox.r1 + 1; i < oBBox.r2; i++) {
var oLeftBorder = new Border();
oLeftBorder.l = border.l;
oLeftBorder.t = border.ih;
if (oBBox.c1 == oBBox.c2) {
oLeftBorder.r = border.r;
} else {
oLeftBorder.r = border.iv;
}
oLeftBorder.b = border.ih;
oLeftBorder.d = border.d;
oLeftBorder.dd = border.dd;
oLeftBorder.du = border.du;
fSetBorder(i, oBBox.c1, oLeftBorder);
}
}
if (oBBox.c1 != oBBox.c2 && (bRightBorder || bInnerVBorder || bInnerHBorder || bDiagonal)) {
for (var i = oBBox.r1 + 1; i < oBBox.r2; i++) {
var oRightBorder = new Border();
oRightBorder.l = border.iv;
oRightBorder.t = border.ih;
oRightBorder.r = border.r;
oRightBorder.b = border.ih;
oRightBorder.d = border.d;
oRightBorder.dd = border.dd;
oRightBorder.du = border.du;
fSetBorder(i, oBBox.c2, oRightBorder);
}
}
if (bInnerHBorder || bInnerVBorder || bDiagonal) {
for (var i = oBBox.r1 + 1; i < oBBox.r2; i++) {
for (var j = oBBox.c1 + 1; j < oBBox.c2; j++) {
var oInnerBorder = new Border();
oInnerBorder.l = border.iv;
oInnerBorder.t = border.ih;
oInnerBorder.r = border.iv;
oInnerBorder.b = border.ih;
oInnerBorder.d = border.d;
oInnerBorder.dd = border.dd;
oInnerBorder.du = border.du;
fSetBorder(i, j, oInnerBorder);
}
}
}
}
}
if (bLeftBorder && oBBox.c1 > 0) {
var nCol = oBBox.c1 - 1;
for (var i = oBBox.r1; i <= oBBox.r2; i++) {
fSetBorderEdge(i, nCol, border, nEdgeTypeLeft);
}
}
if (bTopBorder && oBBox.r1 > 0) {
var nRow = oBBox.r1 - 1;
for (var i = oBBox.c1; i <= oBBox.c2; i++) {
fSetBorderEdge(nRow, i, border, nEdgeTypeTop);
}
}
if (bRightBorder && oBBox.c2 + 1 < this.worksheet.getColsCount()) {
var nCol = oBBox.c2 + 1;
for (var i = oBBox.r1; i <= oBBox.r2; i++) {
fSetBorderEdge(i, nCol, border, nEdgeTypeRight);
}
}
if (bBottomBorder && oBBox.r2 + 1 < this.worksheet.getRowsCount()) {
var nRow = oBBox.r2 + 1;
for (var i = oBBox.c1; i <= oBBox.c2; i++) {
fSetBorderEdge(nRow, i, border, nEdgeTypeBottom);
}
}
} else {
this.worksheet.getAllCol().setBorder(border);
this._setPropertyNoEmpty(function (row) {
row.setBorder(border);
},
function (col) {
col.setBorder(border);
},
function (cell) {
cell.setBorder(border);
});
}
}
}
};
Range.prototype.setShrinkToFit = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setShrinkToFit(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setShrinkToFit(val);
},
function (col) {
col.setShrinkToFit(val);
},
function (cell) {
cell.setShrinkToFit(val);
});
};
Range.prototype.setWrap = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setWrap(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setWrap(val);
},
function (col) {
col.setWrap(val);
},
function (cell) {
cell.setWrap(val);
});
};
Range.prototype.setAngle = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setAngle(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setAngle(val);
},
function (col) {
col.setAngle(val);
},
function (cell) {
cell.setAngle(val);
});
};
Range.prototype.setVerticalText = function (val) {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
this.createCellOnRowColCross();
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
this.worksheet.getAllCol().setVerticalText(val);
fSetProperty = this._setPropertyNoEmpty;
}
fSetProperty.call(this, function (row) {
if (c_oRangeType.All == nRangeType && null == row.xfs) {
return;
}
row.setVerticalText(val);
},
function (col) {
col.setVerticalText(val);
},
function (cell) {
cell.setVerticalText(val);
});
};
Range.prototype.getType = function () {
var cell = this.worksheet._getCellNoEmpty(this.bbox.r1, this.bbox.c1);
if (null != cell) {
return cell.getType();
} else {
return null;
}
};
Range.prototype.getFormula = function () {
var cell = this.worksheet._getCellNoEmpty(this.bbox.r1, this.bbox.c1);
if (null != cell) {
return cell.getFormula();
} else {
return "";
}
};
Range.prototype.getValueForEdit = function () {
var cell = this.worksheet._getCellNoEmpty(this.bbox.r1, this.bbox.c1);
if (null != cell) {
var numFormat = this.getNumFormat();
return cell.getValueForEdit(numFormat);
} else {
return "";
}
};
Range.prototype.getValueForEdit2 = function () {
var cell = this.worksheet._getCellNoEmpty(this.bbox.r1, this.bbox.c1);
if (null != cell) {
var numFormat = this.getNumFormat();
return cell.getValueForEdit2(numFormat);
} else {
var oRow = this.worksheet._getRowNoEmpty(this.bbox.r1);
var oCol = this.worksheet._getColNoEmptyWithAll(this.bbox.c1);
var xfs = null;
if (null != oRow && null != oRow.xfs) {
xfs = oRow.xfs.clone();
} else {
if (null != oCol && null != oCol.xfs) {
xfs = oCol.xfs.clone();
}
}
var oTempCell = new Cell(this.worksheet);
oTempCell.create(xfs, this.getFirst());
return oTempCell.getValueForEdit2();
}
};
Range.prototype.getValueWithoutFormat = function () {
var cell = this.worksheet._getCellNoEmpty(this.bbox.r1, this.bbox.c1);
if (null != cell) {
return cell.getValueWithoutFormat();
} else {
return "";
}
};
Range.prototype.getValue = function () {
return this.getValueWithoutFormat();
};
Range.prototype.getValueWithFormat = function () {
var cell = this.worksheet._getCellNoEmpty(this.bbox.r1, this.bbox.c1);
if (null != cell) {
return cell.getValue();
} else {
return "";
}
};
Range.prototype.getValue2 = function (dDigitsCount, fIsFitMeasurer) {
var nRow0 = this.bbox.r1;
var nCol0 = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(this.bbox.r1, this.bbox.c1);
if (null != cell) {
return cell.getValue2(dDigitsCount, fIsFitMeasurer);
} else {
var oRow = this.worksheet._getRowNoEmpty(this.bbox.r1);
var oCol = this.worksheet._getColNoEmptyWithAll(this.bbox.c1);
var xfs = null;
if (null != oRow && null != oRow.xfs) {
xfs = oRow.xfs.clone();
} else {
if (null != oCol && null != oCol.xfs) {
xfs = oCol.xfs.clone();
}
}
var oTempCell = new Cell(this.worksheet);
oTempCell.create(xfs, this.getFirst());
return oTempCell.getValue2(dDigitsCount, fIsFitMeasurer);
}
};
Range.prototype.getXfId = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.XfId) {
return xfs.XfId;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.XfId) {
return row.xfs.XfId;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.XfId) {
return col.xfs.XfId;
}
}
return g_oDefaultXfId;
};
Range.prototype.getStyleName = function () {
var res = this.worksheet.workbook.CellStyles.getStyleNameByXfId(this.getXfId());
return res || this.worksheet.workbook.CellStyles.getStyleNameByXfId(g_oDefaultXfId);
};
Range.prototype.getNumFormat = function () {
return oNumFormatCache.get(this.getNumFormatStr());
};
Range.prototype.getNumFormatStr = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.num) {
return xfs.num.f;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.num) {
return row.xfs.num.f;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.num) {
return col.xfs.num.f;
}
}
return g_oDefaultNum.f;
};
Range.prototype.getNumFormatType = function () {
return this.getNumFormat().getType();
};
Range.prototype.getFont = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.font) {
return xfs.font;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.font) {
return row.xfs.font;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.font) {
return col.xfs.font;
}
}
return g_oDefaultFont;
};
Range.prototype.getFontname = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.font) {
return xfs.font.fn;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.font) {
return row.xfs.font.fn;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.font) {
return col.xfs.font.fn;
}
}
return g_oDefaultFont.fn;
};
Range.prototype.getFontsize = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.font) {
return xfs.font.fs;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.font) {
return row.xfs.font.fs;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.font) {
return col.xfs.font.fs;
}
}
return g_oDefaultFont.fs;
};
Range.prototype.getFontcolor = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.font) {
return xfs.font.c;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.font) {
return row.xfs.font.c;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.font) {
return col.xfs.font.c;
}
}
return g_oDefaultFont.c;
};
Range.prototype.getBold = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.font) {
return xfs.font.b;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.font) {
return row.xfs.font.b;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.font) {
return col.xfs.font.b;
}
}
return g_oDefaultFont.b;
};
Range.prototype.getItalic = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.font) {
return xfs.font.i;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.font) {
return row.xfs.font.i;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.font) {
return col.xfs.font.i;
}
}
return g_oDefaultFont.i;
};
Range.prototype.getUnderline = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.font) {
return xfs.font.u;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.font) {
return row.xfs.font.u;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.font) {
return col.xfs.font.u;
}
}
return g_oDefaultFont.u;
};
Range.prototype.getStrikeout = function (val) {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.font) {
return xfs.font.s;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.font) {
return row.xfs.font.s;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.font) {
return col.xfs.font.s;
}
}
return g_oDefaultFont.s;
};
Range.prototype.getFontAlign = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.font) {
return xfs.font.va;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.font) {
return row.xfs.font.va;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.font) {
return col.xfs.font.va;
}
}
return g_oDefaultFont.va;
};
Range.prototype.getQuotePrefix = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.QuotePrefix) {
return xfs.QuotePrefix;
}
}
return false;
};
Range.prototype.getAlignVertical = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs) {
if (null != xfs.align) {
return xfs.align.ver;
} else {
return g_oDefaultAlignAbs.ver;
}
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.align) {
return row.xfs.align.ver;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.align) {
return col.xfs.align.ver;
}
}
return g_oDefaultAlign.ver;
};
Range.prototype.getAlignHorizontal = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs) {
if (null != xfs.align) {
return xfs.align.hor;
} else {
return g_oDefaultAlignAbs.hor;
}
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.align) {
return row.xfs.align.hor;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.align) {
return col.xfs.align.hor;
}
}
return g_oDefaultAlign.hor;
};
Range.prototype.getAlignHorizontalByValue = function () {
var align = this.getAlignHorizontal();
if ("none" == align) {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (cell) {
switch (cell.getType()) {
case CellValueType.String:
align = "left";
break;
case CellValueType.Bool:
case CellValueType.Error:
align = "center";
break;
default:
if (this.getValueWithoutFormat()) {
var oNumFmt = this.getNumFormat();
if (true == oNumFmt.isTextFormat()) {
align = "left";
} else {
align = "right";
}
} else {
align = "left";
}
break;
}
}
if ("none" == align) {
align = "left";
}
}
return align;
};
Range.prototype.getFill = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.fill) {
return xfs.fill.bg;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.fill) {
return row.xfs.fill.bg;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.fill) {
return col.xfs.fill.bg;
}
}
return g_oDefaultFill.bg;
};
Range.prototype.getBorderSrc = function (_cell) {
if (null == _cell) {
_cell = this.getFirst();
}
var nRow = _cell.getRow0();
var nCol = _cell.getCol0();
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs && null != xfs.border) {
return xfs.border;
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.border) {
return row.xfs.border;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.border) {
return col.xfs.border;
}
}
return g_oDefaultBorder;
};
Range.prototype.getBorder = function (_cell) {
var oRes = this.getBorderSrc(_cell);
if (null != oRes) {
return oRes;
} else {
return g_oDefaultBorder;
}
};
Range.prototype.getBorderFull = function () {
var borders = this.getBorder(this.getFirst()).clone();
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
if (c_oAscBorderStyles.None === borders.l.s) {
if (nCol > 1) {
var left = this.getBorder(new CellAddress(nRow, nCol - 1, 0));
if (c_oAscBorderStyles.None !== left.r.s) {
borders.l = left.r;
}
}
}
if (c_oAscBorderStyles.None === borders.t.s) {
if (nRow > 1) {
var top = this.getBorder(new CellAddress(nRow - 1, nCol, 0));
if (c_oAscBorderStyles.None !== top.b.s) {
borders.t = top.b;
}
}
}
if (c_oAscBorderStyles.None === borders.r.s) {
var right = this.getBorder(new CellAddress(nRow, nCol + 1, 0));
if (c_oAscBorderStyles.None !== right.l.s) {
borders.r = right.l;
}
}
if (c_oAscBorderStyles.None === borders.b.s) {
var bottom = this.getBorder(new CellAddress(nRow + 1, nCol, 0));
if (c_oAscBorderStyles.None !== bottom.t.s) {
borders.b = bottom.t;
}
}
return borders;
};
Range.prototype.getShrinkToFit = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs) {
if (null != xfs.align) {
return xfs.align.shrink;
} else {
return g_oDefaultAlignAbs.shrink;
}
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.align) {
return row.xfs.align.shrink;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.align) {
return col.xfs.align.shrink;
}
}
return g_oDefaultAlign.shrink;
};
Range.prototype.getWrapByAlign = function (align) {
return "justify" === align.hor ? true : align.wrap;
};
Range.prototype.getWrap = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs) {
if (null != xfs.align) {
return this.getWrapByAlign(xfs.align);
} else {
return this.getWrapByAlign(g_oDefaultAlignAbs);
}
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.align) {
return this.getWrapByAlign(row.xfs.align);
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.align) {
return this.getWrapByAlign(col.xfs.align);
}
}
return this.getWrapByAlign(g_oDefaultAlign);
};
Range.prototype.getAngle = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs) {
if (null != xfs.align) {
return angleFormatToInterface(xfs.align.angle);
} else {
return angleFormatToInterface(g_oDefaultAlignAbs.angle);
}
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.align) {
return angleFormatToInterface(row.xfs.align.angle);
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.align) {
return angleFormatToInterface(col.xfs.align.angle);
}
}
return angleFormatToInterface(g_oDefaultAlign.angle);
};
Range.prototype.getVerticalText = function () {
var nRow = this.bbox.r1;
var nCol = this.bbox.c1;
var cell = this.worksheet._getCellNoEmpty(nRow, nCol);
if (null != cell) {
var xfs = cell.getStyle();
if (null != xfs) {
if (null != xfs.align) {
return g_nVerticalTextAngle == xfs.align.angle;
} else {
return g_nVerticalTextAngle == g_oDefaultAlignAbs.angle;
}
}
} else {
var row = this.worksheet._getRowNoEmpty(nRow);
if (null != row && null != row.xfs && null != row.xfs.align) {
return g_nVerticalTextAngle == row.xfs.align.angle;
}
var col = this.worksheet._getColNoEmptyWithAll(nCol);
if (null != col && null != col.xfs && null != col.xfs.align) {
return g_nVerticalTextAngle == col.xfs.align.angle;
}
}
return g_nVerticalTextAngle == g_oDefaultAlign.angle;
};
Range.prototype.hasMerged = function () {
var oThis = this;
var aMerged = this.worksheet.mergeManager.get(this.bbox);
if (aMerged.all.length > 0) {
return aMerged.all[0].bbox;
}
return null;
};
Range.prototype.mergeOpen = function () {
this.worksheet.mergeManager.add(this.bbox, 1);
};
Range.prototype.merge = function (type) {
if (null == type) {
type = c_oAscMergeOptions.Merge;
}
var oBBox = this.bbox;
if (oBBox.r1 == oBBox.r2 && oBBox.c1 == oBBox.c2) {
return;
}
History.Create_NewPoint();
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
History.StartTransaction();
if (this.hasMerged()) {
this.unmerge();
if (type == c_oAscMergeOptions.MergeCenter) {
this.setAlignHorizontal("none");
History.EndTransaction();
return;
}
}
var oLeftBorder = null;
var oTopBorder = null;
var oRightBorder = null;
var oBottomBorder = null;
var nRangeType = this._getRangeType(oBBox);
if (c_oRangeType.Range == nRangeType) {
var oThis = this;
var fGetBorder = function (bRow, v1, v2, v3, type) {
var oRes = null;
for (var i = v1; i <= v2; ++i) {
var bNeedDelete = true;
var oCurCell;
if (bRow) {
oCurCell = oThis.worksheet._getCellNoEmpty(v3, i);
} else {
oCurCell = oThis.worksheet._getCellNoEmpty(i, v3);
}
if (null != oCurCell && null != oCurCell.xfs && null != oCurCell.xfs.border) {
var border = oCurCell.xfs.border;
var oBorderProp;
switch (type) {
case 1:
oBorderProp = border.l;
break;
case 2:
oBorderProp = border.t;
break;
case 3:
oBorderProp = border.r;
break;
case 4:
oBorderProp = border.b;
break;
}
if (false == oBorderProp.isEmpty()) {
if (null == oRes) {
oRes = oBorderProp;
bNeedDelete = false;
} else {
if (true == oRes.isEqual(oBorderProp)) {
bNeedDelete = false;
}
}
}
}
if (bNeedDelete) {
oRes = null;
break;
}
}
return oRes;
};
oLeftBorder = fGetBorder(false, oBBox.r1, oBBox.r2, oBBox.c1, 1);
oTopBorder = fGetBorder(true, oBBox.c1, oBBox.c2, oBBox.r1, 2);
oRightBorder = fGetBorder(false, oBBox.r1, oBBox.r2, oBBox.c2, 3);
oBottomBorder = fGetBorder(true, oBBox.c1, oBBox.c2, oBBox.r2, 4);
} else {
if (c_oRangeType.Row == nRangeType) {
var oTopRow = this.worksheet._getRowNoEmpty(oBBox.r1);
if (null != oTopRow && null != oTopRow.xfs && null != oTopRow.xfs.border && false == oTopRow.xfs.border.t.isEmpty()) {
oTopBorder = oTopRow.xfs.border.t;
}
if (oBBox.r1 != oBBox.r2) {
var oBottomRow = this.worksheet._getRowNoEmpty(oBBox.r2);
if (null != oBottomRow && null != oBottomRow.xfs && null != oBottomRow.xfs.border && false == oBottomRow.xfs.border.b.isEmpty()) {
oBottomBorder = oBottomRow.xfs.border.b;
}
}
} else {
var oLeftCol = this.worksheet._getColNoEmptyWithAll(oBBox.c1);
if (null != oLeftCol && null != oLeftCol.xfs && null != oLeftCol.xfs.border && false == oLeftCol.xfs.border.l.isEmpty()) {
oLeftBorder = oLeftCol.xfs.border.l;
}
if (oBBox.c1 != oBBox.c2) {
var oRightCol = this.worksheet._getColNoEmptyWithAll(oBBox.c2);
if (null != oRightCol && null != oRightCol.xfs && null != oRightCol.xfs.border && false == oRightCol.xfs.border.r.isEmpty()) {
oRightBorder = oRightCol.xfs.border.r;
}
}
}
}
var bFirst = true;
var oThis = this;
var oLeftTopCellStyle = null;
var oFirstCellStyle = null;
var oFirstCellValue = null;
var oFirstCellRow = null;
var oFirstCellCol = null;
var oFirstCellHyperlink = null;
this._setPropertyNoEmpty(null, null, function (cell, nRow0, nCol0, nRowStart, nColStart) {
if (bFirst && false == cell.isEmptyText()) {
bFirst = false;
oFirstCellStyle = cell.getStyle();
oFirstCellValue = cell.getValueData();
oFirstCellRow = cell.oId.getRow0();
oFirstCellCol = cell.oId.getCol0();
var oCurHyp = oThis.worksheet.hyperlinkManager.getByCell(oFirstCellRow, oFirstCellCol);
if (null != oCurHyp && oCurHyp.data.Ref.isOneCell()) {
oFirstCellHyperlink = oCurHyp.data;
}
}
if (nRow0 == nRowStart && nCol0 == nColStart) {
oLeftTopCellStyle = cell.getStyle();
}
cell.setValue("");
});
var oTargetStyle = null;
if (null != oFirstCellValue && null != oFirstCellRow && null != oFirstCellCol) {
if (null != oFirstCellStyle) {
oTargetStyle = oFirstCellStyle.clone();
}
var oLeftTopCell = this.worksheet._getCell(oBBox.r1, oBBox.c1);
oLeftTopCell.setValueData(oFirstCellValue);
if (null != oFirstCellHyperlink) {
var oLeftTopRange = this.worksheet.getCell(new CellAddress(oBBox.r1, oBBox.c1, 0));
oLeftTopRange.setHyperlink(oFirstCellHyperlink, true);
}
} else {
if (null != oLeftTopCellStyle) {
oTargetStyle = oLeftTopCellStyle.clone();
}
}
if (null != oTargetStyle) {
if (null != oTargetStyle.border) {
oTargetStyle.border = null;
}
} else {
if (null != oLeftBorder || null != oTopBorder || null != oRightBorder || null != oBottomBorder) {
oTargetStyle = new CellXfs();
}
}
var bEmptyStyle = true;
var bEmptyBorder = true;
var fSetProperty = this._setProperty;
var nRangeType = this._getRangeType();
if (c_oRangeType.All == nRangeType) {
fSetProperty = this._setPropertyNoEmpty;
oTargetStyle = null;
}
fSetProperty.call(this, function (row) {
if (null == oTargetStyle) {
row.setStyle(null);
} else {
var oNewStyle = oTargetStyle.clone();
if (row.index == oBBox.r1 && null != oTopBorder) {
oNewStyle.border = new Border();
oNewStyle.border.t = oTopBorder.clone();
} else {
if (row.index == oBBox.r2 && null != oBottomBorder) {
oNewStyle.border = new Border();
oNewStyle.border.b = oBottomBorder.clone();
}
}
row.setStyle(oNewStyle);
}
},
function (col) {
if (null == oTargetStyle) {
col.setStyle(null);
} else {
var oNewStyle = oTargetStyle.clone();
if (col.index == oBBox.c1 && null != oLeftBorder) {
oNewStyle.border = new Border();
oNewStyle.border.l = oLeftBorder.clone();
} else {
if (col.index == oBBox.c2 && null != oRightBorder) {
oNewStyle.border = new Border();
oNewStyle.border.r = oRightBorder.clone();
}
}
col.setStyle(oNewStyle);
}
},
function (cell, nRow, nCol, nRowStart, nColStart) {
if (null == oTargetStyle) {
cell.setStyle(null);
} else {
var oNewStyle = oTargetStyle.clone();
if (oBBox.r1 == nRow && oBBox.c1 == nCol) {
if (null != oLeftBorder || null != oTopBorder || (oBBox.r1 == oBBox.r2 && null != oBottomBorder) || (oBBox.c1 == oBBox.c2 && null != oRightBorder)) {
oNewStyle.border = new Border();
if (null != oLeftBorder) {
oNewStyle.border.l = oLeftBorder.clone();
}
if (null != oTopBorder) {
oNewStyle.border.t = oTopBorder.clone();
}
if (oBBox.r1 == oBBox.r2 && null != oBottomBorder) {
oNewStyle.border.b = oBottomBorder.clone();
}
if (oBBox.c1 == oBBox.c2 && null != oRightBorder) {
oNewStyle.border.r = oRightBorder.clone();
}
}
} else {
if (oBBox.r1 == nRow && oBBox.c2 == nCol) {
if (null != oRightBorder || null != oTopBorder || (oBBox.r1 == oBBox.r2 && null != oBottomBorder)) {
oNewStyle.border = new Border();
if (null != oRightBorder) {
oNewStyle.border.r = oRightBorder.clone();
}
if (null != oTopBorder) {
oNewStyle.border.t = oTopBorder.clone();
}
if (oBBox.r1 == oBBox.r2 && null != oBottomBorder) {
oNewStyle.border.b = oBottomBorder.clone();
}
}
} else {
if (oBBox.r2 == nRow && oBBox.c1 == nCol) {
if (null != oLeftBorder || null != oBottomBorder || (oBBox.c1 == oBBox.c2 && null != oRightBorder)) {
oNewStyle.border = new Border();
if (null != oLeftBorder) {
oNewStyle.border.l = oLeftBorder.clone();
}
if (null != oBottomBorder) {
oNewStyle.border.b = oBottomBorder.clone();
}
if (oBBox.c1 == oBBox.c2 && null != oRightBorder) {
oNewStyle.border.r = oRightBorder.clone();
}
}
} else {
if (oBBox.r2 == nRow && oBBox.c2 == nCol) {
if (null != oRightBorder || null != oBottomBorder) {
oNewStyle.border = new Border();
if (null != oRightBorder) {
oNewStyle.border.r = oRightBorder.clone();
}
if (null != oBottomBorder) {
oNewStyle.border.b = oBottomBorder.clone();
}
}
} else {
if (oBBox.r1 == nRow) {
if (null != oTopBorder || (oBBox.r1 == oBBox.r2 && null != oBottomBorder)) {
oNewStyle.border = new Border();
if (null != oTopBorder) {
oNewStyle.border.t = oTopBorder.clone();
}
if (oBBox.r1 == oBBox.r2 && null != oBottomBorder) {
oNewStyle.border.b = oBottomBorder.clone();
}
}
} else {
if (oBBox.r2 == nRow) {
if (null != oBottomBorder) {
oNewStyle.border = new Border();
oNewStyle.border.b = oBottomBorder.clone();
}
} else {
if (oBBox.c1 == nCol) {
if (null != oLeftBorder || (oBBox.c1 == oBBox.c2 && null != oRightBorder)) {
oNewStyle.border = new Border();
if (null != oLeftBorder) {
oNewStyle.border.l = oLeftBorder.clone();
}
if (oBBox.c1 == oBBox.c2 && null != oRightBorder) {
oNewStyle.border.r = oRightBorder.clone();
}
}
} else {
if (oBBox.c2 == nCol) {
if (null != oRightBorder) {
oNewStyle.border = new Border();
oNewStyle.border.r = oRightBorder.clone();
}
}
}
}
}
}
}
}
}
cell.setStyle(oNewStyle);
}
});
if (type == c_oAscMergeOptions.MergeCenter) {
this.setAlignHorizontal("center");
}
if (false == this.worksheet.workbook.bUndoChanges && false == this.worksheet.workbook.bRedoChanges) {
this.worksheet.mergeManager.add(this.bbox, 1);
}
History.EndTransaction();
};
Range.prototype.unmerge = function (bOnlyInRange) {
History.Create_NewPoint();
History.SetSelection(this.bbox.clone());
History.StartTransaction();
if (false == this.worksheet.workbook.bUndoChanges && false == this.worksheet.workbook.bRedoChanges) {
this.worksheet.mergeManager.remove(this.bbox, null);
}
History.EndTransaction();
};
Range.prototype._getHyperlinks = function () {
var nRangeType = this._getRangeType();
var result = [];
var oThis = this;
if (c_oRangeType.Range == nRangeType) {
var oTempRows = {};
var fAddToTempRows = function (oTempRows, bbox, data) {
if (null != bbox) {
for (var i = bbox.r1; i <= bbox.r2; i++) {
var row = oTempRows[i];
if (null == row) {
row = {};
oTempRows[i] = row;
}
for (var j = bbox.c1; j <= bbox.c2; j++) {
var cell = row[j];
if (null == cell) {
row[j] = data;
}
}
}
}
};
var aHyperlinks = this.worksheet.hyperlinkManager.get(this.bbox);
for (var i = 0, length = aHyperlinks.all.length; i < length; i++) {
var hyp = aHyperlinks.all[i];
var hypBBox = hyp.bbox.intersectionSimple(this.bbox);
fAddToTempRows(oTempRows, hypBBox, hyp.data);
var aMerged = this.worksheet.mergeManager.get(hyp.bbox);
for (var j = 0, length2 = aMerged.all.length; j < length2; j++) {
var merge = aMerged.all[j];
var mergeBBox = merge.bbox.intersectionSimple(this.bbox);
fAddToTempRows(oTempRows, mergeBBox, hyp.data);
}
}
for (var i in oTempRows) {
var nRowIndex = i - 0;
var row = oTempRows[i];
for (var j in row) {
var nColIndex = j - 0;
var oCurHyp = row[j];
result.push({
hyperlink: oCurHyp,
col: nColIndex,
row: nRowIndex
});
}
}
}
return result;
};
Range.prototype.getHyperlink = function () {
var aHyperlinks = this._getHyperlinks();
if (null != aHyperlinks && aHyperlinks.length > 0) {
return aHyperlinks[0].hyperlink;
}
return null;
};
Range.prototype.getHyperlinks = function () {
return this._getHyperlinks();
};
Range.prototype.setHyperlinkOpen = function (val) {
if (null != val && false == val.isValid()) {
return;
}
this.worksheet.hyperlinkManager.add(val.Ref.getBBox0(), val);
};
Range.prototype.setHyperlink = function (val, bWithoutStyle) {
if (null != val && false == val.isValid()) {
return;
}
var bExist = false;
var aHyperlinks = this.worksheet.hyperlinkManager.get(this.bbox);
for (var i = 0, length = aHyperlinks.all.length; i < length; i++) {
var hyp = aHyperlinks.all[i];
if (hyp.data.isEqual(val)) {
bExist = true;
break;
}
}
if (false == bExist) {
var oThis = this;
History.Create_NewPoint();
History.SetSelection(this.bbox.clone());
History.StartTransaction();
if (false == this.worksheet.workbook.bUndoChanges && false == this.worksheet.workbook.bRedoChanges) {
for (var i = 0, length = aHyperlinks.all.length; i < length; i++) {
var hyp = aHyperlinks.all[i];
if (hyp.bbox.isEqual(this.bbox)) {
this.worksheet.hyperlinkManager.remove(hyp.bbox, hyp);
}
}
}
if (true != bWithoutStyle) {
var oHyperlinkFont = new Font();
oHyperlinkFont.fn = this.worksheet.workbook.getDefaultFont();
oHyperlinkFont.fs = this.worksheet.workbook.getDefaultSize();
oHyperlinkFont.u = "single";
oHyperlinkFont.c = g_oColorManager.getThemeColor(g_nColorHyperlink);
this.setFont(oHyperlinkFont);
}
if (false == this.worksheet.workbook.bUndoChanges && false == this.worksheet.workbook.bRedoChanges) {
this.worksheet.hyperlinkManager.add(val.Ref.getBBox0(), val);
}
History.EndTransaction();
}
};
Range.prototype.removeHyperlink = function (val) {
var bbox = this.bbox;
var elem = null;
if (null != val) {
bbox = val.Ref.getBBox0();
elem = new RangeDataManagerElem(bbox, val);
}
History.Create_NewPoint();
History.SetSelection(bbox.clone());
History.StartTransaction();
if (false == this.worksheet.workbook.bUndoChanges && false == this.worksheet.workbook.bRedoChanges) {
this.worksheet.hyperlinkManager.remove(bbox, elem);
}
History.EndTransaction();
};
Range.prototype.deleteCellsShiftUp = function () {
return this._shiftUpDown(true);
};
Range.prototype.addCellsShiftBottom = function () {
return this._shiftUpDown(false);
};
Range.prototype.addCellsShiftRight = function () {
return this._shiftLeftRight(false);
};
Range.prototype.deleteCellsShiftLeft = function () {
return this._shiftLeftRight(true);
};
Range.prototype._shiftLeftRight = function (bLeft) {
lockDraw(this.worksheet.workbook);
var oBBox = this.bbox;
var nWidth = oBBox.c2 - oBBox.c1 + 1;
var nRangeType = this._getRangeType(oBBox);
if (c_oRangeType.Range != nRangeType && c_oRangeType.Col != nRangeType) {
return false;
}
var mergeManager = this.worksheet.mergeManager;
History.Create_NewPoint();
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
History.StartTransaction();
if (false == this.worksheet.workbook.bUndoChanges && false == this.worksheet.workbook.bRedoChanges) {
var oShiftGet = mergeManager.shiftGet(this.bbox, true);
var aMerged = oShiftGet.elems;
if (null != aMerged.outer && aMerged.outer.length > 0) {
var bChanged = false;
for (var i = 0, length = aMerged.outer.length; i < length; i++) {
var elem = aMerged.outer[i];
if (! (elem.bbox.c1 < oShiftGet.bbox.c1 && oShiftGet.bbox.r1 <= elem.bbox.r1 && elem.bbox.r2 <= oShiftGet.bbox.r2)) {
mergeManager.remove(elem.bbox, elem);
bChanged = true;
}
}
if (bChanged) {
oShiftGet = null;
}
}
}
if (bLeft) {
if (c_oRangeType.Range == nRangeType) {
this.worksheet._shiftCellsLeft(oBBox);
} else {
this.worksheet._removeCols(oBBox.c1, oBBox.c2);
}
} else {
if (c_oRangeType.Range == nRangeType) {
this.worksheet._shiftCellsRight(oBBox);
} else {
this.worksheet._insertColsBefore(oBBox.c1, nWidth);
}
}
if (false == this.worksheet.workbook.bUndoChanges && false == this.worksheet.workbook.bRedoChanges) {
mergeManager.shift(this.bbox, !bLeft, true, oShiftGet);
this.worksheet.hyperlinkManager.shift(this.bbox, !bLeft, true);
}
History.EndTransaction();
buildRecalc(this.worksheet.workbook);
unLockDraw(this.worksheet.workbook);
return true;
};
Range.prototype._shiftUpDown = function (bUp) {
var oBBox = this.bbox;
var nHeight = oBBox.r2 - oBBox.r1 + 1;
var nRangeType = this._getRangeType(oBBox);
if (c_oRangeType.Range != nRangeType && c_oRangeType.Row != nRangeType) {
return false;
}
var mergeManager = this.worksheet.mergeManager;
History.Create_NewPoint();
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
History.StartTransaction();
if (false == this.worksheet.workbook.bUndoChanges && false == this.worksheet.workbook.bRedoChanges) {
var oShiftGet = mergeManager.shiftGet(this.bbox, false);
var aMerged = oShiftGet.elems;
if (null != aMerged.outer && aMerged.outer.length > 0) {
var bChanged = false;
for (var i = 0, length = aMerged.outer.length; i < length; i++) {
var elem = aMerged.outer[i];
if (! (elem.bbox.r1 < oShiftGet.bbox.r1 && oShiftGet.bbox.c1 <= elem.bbox.c1 && elem.bbox.c2 <= oShiftGet.bbox.c2)) {
mergeManager.remove(elem.bbox, elem);
bChanged = true;
}
}
if (bChanged) {
oShiftGet = null;
}
}
}
if (bUp) {
if (c_oRangeType.Range == nRangeType) {
this.worksheet._shiftCellsUp(oBBox);
} else {
this.worksheet._removeRows(oBBox.r1, oBBox.r2);
}
} else {
if (c_oRangeType.Range == nRangeType) {
this.worksheet._shiftCellsBottom(oBBox);
} else {
this.worksheet._insertRowsBefore(oBBox.r1, nHeight);
}
}
if (false == this.worksheet.workbook.bUndoChanges && false == this.worksheet.workbook.bRedoChanges) {
mergeManager.shift(this.bbox, !bUp, false, oShiftGet);
this.worksheet.hyperlinkManager.shift(this.bbox, !bUp, false);
}
History.EndTransaction();
return true;
};
Range.prototype.setOffset = function (offset) {
this.bbox.c1 += offset.offsetCol;
if (this.bbox.c1 < 0) {
this.bbox.c1 = 0;
}
this.bbox.r1 += offset.offsetRow;
if (this.bbox.r1 < 0) {
this.bbox.r1 = 0;
}
this.bbox.c2 += offset.offsetCol;
if (this.bbox.c2 < 0) {
this.bbox.c2 = 0;
}
this.bbox.r2 += offset.offsetRow;
if (this.bbox.r2 < 0) {
this.bbox.r2 = 0;
}
this.first = new CellAddress(this.bbox.r1, this.bbox.c1, 0);
this.last = new CellAddress(this.bbox.r2, this.bbox.c2, 0);
};
Range.prototype.setOffsetFirst = function (offset) {
this.bbox.c1 += offset.offsetCol;
if (this.bbox.c1 < 0) {
this.bbox.c1 = 0;
}
this.bbox.r1 += offset.offsetRow;
if (this.bbox.r1 < 0) {
this.bbox.r1 = 0;
}
this.first = new CellAddress(this.bbox.r1, this.bbox.c1, 0);
};
Range.prototype.setOffsetLast = function (offset) {
this.bbox.c2 += offset.offsetCol;
if (this.bbox.c2 < 0) {
this.bbox.c2 = 0;
}
this.bbox.r2 += offset.offsetRow;
if (this.bbox.r2 < 0) {
this.bbox.r2 = 0;
}
this.last = new CellAddress(this.bbox.r2, this.bbox.c2, 0);
};
Range.prototype.intersect = function (range) {
var oBBox1 = this.bbox;
var oBBox2 = range.bbox;
var r1 = Math.max(oBBox1.r1, oBBox2.r1);
var c1 = Math.max(oBBox1.c1, oBBox2.c1);
var r2 = Math.min(oBBox1.r2, oBBox2.r2);
var c2 = Math.min(oBBox1.c2, oBBox2.c2);
if (r1 <= r2 && c1 <= c2) {
return this.worksheet.getRange3(r1, c1, r2, c2);
}
return null;
};
Range.prototype.cleanCache = function () {
this._setPropertyNoEmpty(null, null, function (cell, nRow0, nCol0, nRowStart, nColStart) {
cell.cleanCache();
});
};
Range.prototype.cleanFormat = function () {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
History.StartTransaction();
this.unmerge();
var oThis = this;
this._setPropertyNoEmpty(function (row) {
row.setStyle(null);
},
function (col) {
col.setStyle(null);
},
function (cell, nRow0, nCol0, nRowStart, nColStart) {
cell.setStyle(null);
});
History.EndTransaction();
};
Range.prototype.cleanText = function () {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
History.StartTransaction();
var oThis = this;
this._setPropertyNoEmpty(null, null, function (cell, nRow0, nCol0, nRowStart, nColStart) {
cell.setValue("");
});
History.EndTransaction();
};
Range.prototype.cleanAll = function () {
History.Create_NewPoint();
var oBBox = this.bbox;
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
History.StartTransaction();
this.unmerge();
var aHyperlinks = this.worksheet.hyperlinkManager.get(this.bbox);
for (var i = 0, length = aHyperlinks.inner.length; i < length; ++i) {
this.removeHyperlink(aHyperlinks.inner[i].data);
}
var oThis = this;
this._setPropertyNoEmpty(function (row) {
row.setStyle(null);
},
function (col) {
col.setStyle(null);
},
function (cell, nRow0, nCol0, nRowStart, nColStart) {
oThis.worksheet._removeCell(nRow0, nCol0);
});
buildRecalc(this.worksheet.workbook);
History.EndTransaction();
};
Range.prototype.sort = function (nOption, nStartCol) {
lockDraw(this.worksheet.workbook);
if (null != this.hasMerged()) {
return null;
}
var oRes = null;
var oThis = this;
var bAscent = false;
if (nOption == c_oAscSortOptions.Ascending) {
bAscent = true;
}
var nRowFirst0 = this.bbox.r1;
var nRowLast0 = this.bbox.r2;
var nColFirst0 = this.bbox.c1;
var nColLast0 = this.bbox.c2;
var bWholeCol = false;
var bWholeRow = false;
if (0 == nRowFirst0 && gc_nMaxRow0 == nRowLast0) {
bWholeCol = true;
}
if (0 == nColFirst0 && gc_nMaxCol0 == nColLast0) {
bWholeRow = true;
}
var oRangeCol = this.worksheet.getRange(new CellAddress(nRowFirst0, nStartCol, 0), new CellAddress(nRowLast0, nStartCol, 0));
var nLastRow0 = 0;
var nLastCol0 = nColLast0;
if (true == bWholeRow) {
nLastCol0 = 0;
this._foreachRowNoEmpty(function () {},
function (cell) {
var nCurCol0 = cell.oId.getCol0();
if (nCurCol0 > nLastCol0) {
nLastCol0 = nCurCol0;
}
});
}
var aSortElems = new Array();
var aHiddenRow = new Object();
var fAddSortElems = function (oCell, nRow0, nCol0, nRowStart0, nColStart0) {
var row = oThis.worksheet._getRowNoEmpty(nRow0);
if (null != row) {
if (true == row.hd) {
aHiddenRow[nRow0] = 1;
} else {
if (nLastRow0 < nRow0) {
nLastRow0 = nRow0;
}
var val = oCell.getValueWithoutFormat();
var nNumber = null;
var sText = null;
if ("" != val) {
var nVal = val - 0;
if (nVal == val) {
nNumber = nVal;
} else {
sText = val;
}
aSortElems.push({
row: nRow0,
num: nNumber,
text: sText
});
}
}
}
};
if (nColFirst0 == nStartCol) {
while (0 == aSortElems.length && nStartCol <= nLastCol0) {
if (false == bWholeCol) {
oRangeCol._foreachNoEmpty(fAddSortElems);
} else {
oRangeCol._foreachColNoEmpty(null, fAddSortElems);
}
if (0 == aSortElems.length) {
nStartCol++;
oRangeCol = this.worksheet.getRange(new CellAddress(nRowFirst0, nStartCol, 0), new CellAddress(nRowLast0, nStartCol, 0));
}
}
} else {
if (false == bWholeCol) {
oRangeCol._foreachNoEmpty(fAddSortElems);
} else {
oRangeCol._foreachColNoEmpty(null, fAddSortElems);
}
}
function strcmp(str1, str2) {
return ((str1 == str2) ? 0 : ((str1 > str2) ? 1 : -1));
}
aSortElems.sort(function (a, b) {
var res = 0;
if (null != a.text) {
if (null != b.text) {
res = strcmp(a.text, b.text);
} else {
res = 1;
}
} else {
if (null != a.num) {
if (null != b.num) {
res = a.num - b.num;
} else {
res = -1;
}
}
}
if (0 == res) {
res = a.row - b.row;
} else {
if (!bAscent) {
res = -res;
}
}
return res;
});
var aSortData = new Array();
var nHiddenCount = 0;
var oFromArray = new Object();
var nRowMax = 0;
var nRowMin = gc_nMaxRow0;
var nToMax = 0;
for (var i = 0, length = aSortElems.length; i < length; ++i) {
var item = aSortElems[i];
var nNewIndex = i + nRowFirst0 + nHiddenCount;
while (null != aHiddenRow[nNewIndex]) {
nHiddenCount++;
nNewIndex = i + nRowFirst0 + nHiddenCount;
}
var oNewElem = new UndoRedoData_FromToRowCol(true, item.row, nNewIndex);
oFromArray[item.row] = 1;
if (nRowMax < item.row) {
nRowMax = item.row;
}
if (nRowMax < nNewIndex) {
nRowMax = nNewIndex;
}
if (nRowMin > item.row) {
nRowMin = item.row;
}
if (nRowMin > nNewIndex) {
nRowMin = nNewIndex;
}
if (nToMax < nNewIndex) {
nToMax = nNewIndex;
}
if (oNewElem.from != oNewElem.to) {
aSortData.push(oNewElem);
}
}
if (aSortData.length > 0) {
for (var i = nRowMin; i <= nRowMax; ++i) {
if (null == oFromArray[i] && null == aHiddenRow[i]) {
var nFrom = i;
var nTo = ++nToMax;
while (null != aHiddenRow[nTo]) {
nTo = ++nToMax;
}
if (nFrom != nTo) {
var oNewElem = new UndoRedoData_FromToRowCol(true, nFrom, nTo);
aSortData.push(oNewElem);
}
}
}
History.Create_NewPoint();
History.SetSelection(new Asc.Range(nColFirst0, nRowFirst0, nLastCol0, nLastRow0));
var oUndoRedoBBox = new UndoRedoData_BBox({
r1: nRowFirst0,
c1: nColFirst0,
r2: nLastRow0,
c2: nLastCol0
});
oRes = new UndoRedoData_SortData(oUndoRedoBBox, aSortData);
History.Add(g_oUndoRedoWorksheet, historyitem_Worksheet_Sort, this.worksheet.getId(), new Asc.Range(0, nRowFirst0, gc_nMaxCol0, nLastRow0), oRes);
this._sortByArray(oUndoRedoBBox, aSortData, false);
}
buildRecalc(this.worksheet.workbook, true);
unLockDraw(this.worksheet.workbook);
return oRes;
};
Range.prototype._sortByArray = function (oBBox, aSortData, bUndo) {
var rec = {
length: 0
};
var oSortedIndexes = new Object();
for (var i = 0, length = aSortData.length; i < length; ++i) {
var item = aSortData[i];
var nFrom = item.from;
var nTo = item.to;
if (bUndo) {
nFrom = item.to;
nTo = item.from;
}
oSortedIndexes[nFrom] = nTo;
}
var aSortedHyperlinks = new Array();
if (false == this.worksheet.workbook.bUndoChanges && false == this.worksheet.workbook.bRedoChanges) {
var aHyperlinks = this.worksheet.hyperlinkManager.get(this.bbox);
for (var i = 0, length = aHyperlinks.inner.length; i < length; i++) {
var elem = aHyperlinks.inner[i];
var hyp = elem.data;
if (hyp.Ref.isOneCell()) {
var nFrom = elem.bbox.r1;
var nTo = oSortedIndexes[nFrom];
if (null != nTo) {
var oTempBBox = hyp.Ref.getBBox0();
this.worksheet.hyperlinkManager.remove(oTempBBox, new RangeDataManagerElem(oTempBBox, hyp));
var oNewHyp = hyp.clone();
oNewHyp.Ref.setOffset({
offsetCol: 0,
offsetRow: nTo - nFrom
});
aSortedHyperlinks.push(oNewHyp);
}
}
}
}
var nColFirst0 = oBBox.c1;
var nLastCol0 = oBBox.c2;
for (var i = nColFirst0; i <= nLastCol0; ++i) {
var oTempCellsTo = new Object();
for (var j in oSortedIndexes) {
var nIndexFrom = j - 0;
var nIndexTo = oSortedIndexes[j];
var shift = nIndexTo - nIndexFrom;
var rowFrom = this.worksheet._getRow(nIndexFrom);
var rowTo = this.worksheet._getRow(nIndexTo);
var oCurCell;
var oTempCell = oTempCellsTo[nIndexFrom];
if (oTempCellsTo.hasOwnProperty(nIndexFrom)) {
oCurCell = oTempCell;
} else {
oCurCell = rowFrom.c[i];
}
oTempCellsTo[nIndexTo] = rowTo.c[i];
if (null != oCurCell) {
var lastName = oCurCell.getName();
oCurCell.moveVer(shift);
rowTo.c[i] = oCurCell;
var sNewName = oCurCell.getName();
if (oCurCell.sFormula) {
oCurCell.setFormula(oCurCell.formulaParsed.changeOffset({
offsetCol: 0,
offsetRow: shift
}).assemble());
this.worksheet.workbook.dependencyFormulas.deleteMasterNodes(this.worksheet.Id, lastName);
delete this.worksheet.workbook.cwf[this.worksheet.Id].cells[lastName];
if (!arrRecalc[this.worksheet.getId()]) {
arrRecalc[this.worksheet.getId()] = {};
}
arrRecalc[this.worksheet.getId()][sNewName] = sNewName;
} else {}
} else {
if (null != rowTo.c[i]) {
delete rowTo.c[i];
var sNewName = (new CellAddress(nIndexTo, i, 0)).getID();
if (!arrRecalc[this.worksheet.getId()]) {
arrRecalc[this.worksheet.getId()] = {};
}
arrRecalc[this.worksheet.getId()][sNewName] = sNewName;
}
}
}
}
if (false == this.worksheet.workbook.bUndoChanges && false == this.worksheet.workbook.bRedoChanges) {
if (aSortedHyperlinks.length > 0) {
for (var i = 0, length = aSortedHyperlinks.length; i < length; i++) {
var hyp = aSortedHyperlinks[i];
this.worksheet.hyperlinkManager.add(hyp.Ref.getBBox0(), hyp);
}
}
}
};
Range.prototype.promote = function (bCtrl, bVertical, nIndex) {
var oBBox = this.bbox;
var nWidth = oBBox.c2 - oBBox.c1 + 1;
var nHeight = oBBox.r2 - oBBox.r1 + 1;
var bWholeCol = false;
var bWholeRow = false;
if (0 == oBBox.r1 && gc_nMaxRow0 == oBBox.r2) {
bWholeCol = true;
}
if (0 == oBBox.c1 && gc_nMaxCol0 == oBBox.c2) {
bWholeRow = true;
}
if ((bWholeCol && bWholeRow) || (true == bVertical && bWholeCol) || (false == bVertical && bWholeRow)) {
return;
}
var oPromoteRange = null;
if (bVertical) {
if (nHeight < nIndex) {
oPromoteRange = this.worksheet.getRange3(oBBox.r2 + 1, oBBox.c1, oBBox.r2 + nIndex - nHeight, oBBox.c2);
} else {
if (nIndex < 0) {
oPromoteRange = this.worksheet.getRange3(oBBox.r1 - 1, oBBox.c1, oBBox.r1 + nIndex, oBBox.c2);
}
}
} else {
if (nWidth < nIndex) {
oPromoteRange = this.worksheet.getRange3(oBBox.r1, oBBox.c2 + 1, oBBox.r2, oBBox.c2 + nIndex - nWidth);
} else {
if (nIndex < 0) {
oPromoteRange = this.worksheet.getRange3(oBBox.r1, oBBox.c1 - 1, oBBox.r2, oBBox.c1 + nIndex);
}
}
}
if (null != oPromoteRange && oPromoteRange.hasMerged()) {
return;
}
lockDraw(this.worksheet.workbook);
History.Create_NewPoint();
var recalcArr = [];
History.SetSelection(new Asc.Range(oBBox.c1, oBBox.r1, oBBox.c2, oBBox.r2));
History.StartTransaction();
if ((true == bVertical && 1 == nHeight) || (false == bVertical && 1 == nWidth)) {
bCtrl = !bCtrl;
}
var fFinishSection = function (param, oPromoteHelper) {
if (null != param && null != param.prefix) {
if (false == oPromoteHelper.isOnlyIntegerSequence()) {
param.valid = false;
oPromoteHelper.removeLast();
}
}
oPromoteHelper.finishSection();
};
if (true == bVertical) {
var nLastCol = oBBox.c2;
if (bWholeRow) {
nLastCol = 0;
this._foreachRowNoEmpty(function () {},
function (cell) {
var nCurCol0 = cell.oId.getCol0();
if (nCurCol0 > nLastCol0) {
nLastCol0 = nCurCol0;
}
});
}
if (nIndex >= 0 && nHeight > nIndex) {
for (var i = oBBox.c1; i <= nLastCol; ++i) {
for (var j = oBBox.r1 + nIndex; j <= oBBox.r2; ++j) {
var oCurCell = this.worksheet._getCellNoEmpty(j, i);
if (null != oCurCell) {
oCurCell.setValue("");
}
}
}
} else {
for (var i = oBBox.c1; i <= nLastCol; ++i) {
var aCells = new Array();
var oPromoteHelper = new PromoteHelper();
var oDigParams = null;
for (var j = oBBox.r1; j <= oBBox.r2; ++j) {
var oCurCell = this.worksheet._getCellNoEmpty(j, i);
var nVal = null,
nF = null;
var sCurPrefix = null;
if (null != oCurCell) {
if (!oCurCell.sFormula) {
var nType = oCurCell.getType();
if (CellValueType.Number == nType || CellValueType.String == nType) {
var sValue = oCurCell.getValueWithoutFormat();
if ("" != sValue) {
if (CellValueType.Number == nType) {
nVal = sValue - 0;
} else {
var nEndIndex = sValue.length;
for (var k = sValue.length - 1; k >= 0; --k) {
var sCurChart = sValue[k];
if ("0" <= sCurChart && sCurChart <= "9") {
nEndIndex--;
} else {
break;
}
}
if (sValue.length != nEndIndex) {
sCurPrefix = sValue.substring(0, nEndIndex);
nVal = sValue.substring(nEndIndex) - 0;
}
}
if (null != nVal) {
if (null == oDigParams) {
oDigParams = {
valid: true,
prefix: sCurPrefix
};
} else {
if (sCurPrefix != oDigParams.prefix) {
fFinishSection(oDigParams, oPromoteHelper);
oDigParams = {
valid: true,
prefix: sCurPrefix
};
}
}
oPromoteHelper.add(nVal);
} else {
fFinishSection(oDigParams, oPromoteHelper);
oDigParams = null;
}
}
}
} else {
fFinishSection(oDigParams, oPromoteHelper);
oDigParams = null;
nF = true;
}
}
if (null == nVal) {
aCells.push({
digparams: null,
cell: oCurCell,
formula: nF
});
} else {
aCells.push({
digparams: oDigParams,
cell: oCurCell,
formula: nF
});
}
}
fFinishSection(oDigParams, oPromoteHelper);
oPromoteHelper.finishAdd();
var bExistDigit = false;
if (false == bCtrl && false == oPromoteHelper.isEmpty()) {
bExistDigit = true;
oPromoteHelper.calc();
}
var nCellsLength = aCells.length;
var nCellsIndex;
var nStart;
var nEnd;
var nDj;
var nDCellsIndex;
var fCondition;
if (nIndex > 0) {
nStart = oBBox.r2 + 1;
nEnd = oBBox.r2 + (nIndex - nHeight + 1);
nCellsIndex = 0;
nDj = 1;
nDCellsIndex = 1;
fCondition = function (j, nEnd) {
return j <= nEnd;
};
} else {
oPromoteHelper.reverse();
nStart = oBBox.r1 - 1;
nEnd = oBBox.r1 + nIndex;
if (nEnd < 0) {
nEnd = 0;
}
nCellsIndex = nCellsLength - 1;
nDj = -1;
nDCellsIndex = -1;
fCondition = function (j, nEnd) {
return j >= nEnd;
};
}
for (var j = nStart; fCondition(j, nEnd); j += nDj) {
var oCurItem = aCells[nCellsIndex];
var oCurCell = this.worksheet._getCellNoEmpty(j, i);
if (null != oCurCell) {
this.worksheet._removeCell(j, i);
}
if (null != oCurItem.cell) {
var oCopyCell = this.worksheet._getCell(j, i);
oCopyCell.setStyle(oCurItem.cell.getStyle());
oCopyCell.setType(oCurItem.cell.getType());
if (bExistDigit && null != oCurItem.digparams && true == oCurItem.digparams.valid) {
var dNewValue = oPromoteHelper.getNext();
var sVal = "";
if (null != oCurItem.digparams.prefix) {
sVal += oCurItem.digparams.prefix;
}
sVal += dNewValue;
oCopyCell.setValue(sVal);
} else {
if (!oCurItem.formula) {
var DataOld = oCopyCell.getValueData();
oCopyCell.oValue = oCurItem.cell.oValue.clone(oCopyCell);
var DataNew = oCopyCell.getValueData();
if (false == DataOld.isEqual(DataNew)) {
History.Add(g_oUndoRedoCell, historyitem_Cell_ChangeValue, this.worksheet.getId(), new Asc.Range(0, oCopyCell.oId.getRow0(), gc_nMaxCol0, oCopyCell.oId.getRow0()), new UndoRedoData_CellSimpleData(oCopyCell.oId.getRow0(), oCopyCell.oId.getCol0(), DataOld, DataNew));
}
if (!arrRecalc[this.worksheet.getId()]) {
arrRecalc[this.worksheet.getId()] = {};
}
arrRecalc[this.worksheet.getId()][oCopyCell.getName()] = oCopyCell.getName();
this.worksheet.workbook.needRecalc[getVertexId(this.worksheet.getId(), oCopyCell.getName())] = [this.worksheet.getId(), oCopyCell.getName()];
if (this.worksheet.workbook.needRecalc.length < 0) {
this.worksheet.workbook.needRecalc.length = 0;
}
this.worksheet.workbook.needRecalc.length++;
} else {
var assemb;
var _p_ = new parserFormula(oCurItem.cell.sFormula, oCopyCell.getName(), this.worksheet);
if (_p_.parse()) {
assemb = _p_.changeOffset(oCopyCell.getOffset2(oCurItem.cell.getName())).assemble();
oCopyCell.setValue("=" + assemb);
}
this.worksheet.workbook.needRecalc[getVertexId(this.worksheet.getId(), oCopyCell.getName())] = [this.worksheet.getId(), oCopyCell.getName()];
if (this.worksheet.workbook.needRecalc.length < 0) {
this.worksheet.workbook.needRecalc.length = 0;
}
this.worksheet.workbook.needRecalc.length++;
}
}
}
nCellsIndex += nDCellsIndex;
if (nDCellsIndex > 0 && nCellsIndex >= nCellsLength) {
nCellsIndex = 0;
} else {
if (nCellsIndex < 0) {
nCellsIndex = nCellsLength - 1;
}
}
}
}
}
} else {
var nLastRow = oBBox.r2;
if (bWholeCol) {
nLastRow = 0;
this._foreachColNoEmpty(function () {},
function (cell) {
var nCurRow0 = cell.oId.getRow0();
if (nCurRow0 > nLastRow) {
nLastRow = nCurRow0;
}
});
}
if (nIndex >= 0 && nWidth > nIndex) {
for (var i = oBBox.r1; i <= nLastRow; ++i) {
for (var j = oBBox.c1 + nIndex; j <= oBBox.c2; ++j) {
var oCurCell = this.worksheet._getCellNoEmpty(i, j);
if (null != oCurCell) {
oCurCell.setValue("");
}
}
}
} else {
for (var i = oBBox.r1; i <= nLastRow; ++i) {
var aCells = new Array();
var oPromoteHelper = new PromoteHelper();
var oDigParams = null;
for (var j = oBBox.c1; j <= oBBox.c2; ++j) {
var oCurCell = this.worksheet._getCellNoEmpty(i, j);
var nVal = null,
nF = null;
var sCurPrefix = null;
if (null != oCurCell) {
if (!oCurCell.sFormula) {
var nType = oCurCell.getType();
if (CellValueType.Number == nType || CellValueType.String == nType) {
var sValue = oCurCell.getValueWithoutFormat();
if ("" != sValue) {
if (CellValueType.Number == nType) {
nVal = sValue - 0;
} else {
var nEndIndex = sValue.length;
for (var k = sValue.length - 1; k >= 0; --k) {
var sCurChart = sValue[k];
if ("0" <= sCurChart && sCurChart <= "9") {
nEndIndex--;
} else {
break;
}
}
if (sValue.length != nEndIndex) {
sCurPrefix = sValue.substring(0, nEndIndex);
nVal = sValue.substring(nEndIndex) - 0;
}
}
if (null != nVal) {
if (null == oDigParams) {
oDigParams = {
valid: true,
prefix: sCurPrefix
};
} else {
if (sCurPrefix != oDigParams.prefix) {
fFinishSection(oDigParams, oPromoteHelper);
oDigParams = {
valid: true,
prefix: sCurPrefix
};
}
}
oPromoteHelper.add(nVal);
} else {
fFinishSection(oDigParams, oPromoteHelper);
oDigParams = null;
}
}
}
} else {
fFinishSection(oDigParams, oPromoteHelper);
oDigParams = null;
nF = true;
}
}
if (null == nVal) {
aCells.push({
digparams: null,
cell: oCurCell,
formula: nF
});
} else {
aCells.push({
digparams: oDigParams,
cell: oCurCell,
formula: nF
});
}
}
fFinishSection(oDigParams, oPromoteHelper);
oPromoteHelper.finishAdd();
var bExistDigit = false;
if (false == bCtrl && false == oPromoteHelper.isEmpty()) {
bExistDigit = true;
oPromoteHelper.calc();
}
var nCellsLength = aCells.length;
var nCellsIndex;
var nStart;
var nEnd;
var nDj;
var nDCellsIndex;
var fCondition;
if (nIndex > 0) {
nStart = oBBox.c2 + 1;
nEnd = oBBox.c2 + (nIndex - nWidth + 1);
nCellsIndex = 0;
nDj = 1;
nDCellsIndex = 1;
fCondition = function (j, nEnd) {
return j <= nEnd;
};
} else {
oPromoteHelper.reverse();
nStart = oBBox.c1 - 1;
nEnd = oBBox.c1 + nIndex;
if (nEnd < 0) {
nEnd = 0;
}
nCellsIndex = nCellsLength - 1;
nDj = -1;
nDCellsIndex = -1;
fCondition = function (j, nEnd) {
return j >= nEnd;
};
}
for (var j = nStart; fCondition(j, nEnd); j += nDj) {
var oCurItem = aCells[nCellsIndex];
var oCurCell = this.worksheet._getCellNoEmpty(i, j);
if (null != oCurCell) {
this.worksheet._removeCell(i, j);
}
if (null != oCurItem.cell) {
var oCopyCell = this.worksheet._getCell(i, j);
oCopyCell.setStyle(oCurItem.cell.getStyle());
oCopyCell.setType(oCurItem.cell.getType());
if (bExistDigit && null != oCurItem.digparams && true == oCurItem.digparams.valid) {
var dNewValue = oPromoteHelper.getNext();
var sVal = "";
if (null != oCurItem.digparams.prefix) {
sVal += oCurItem.digparams.prefix;
}
sVal += dNewValue;
oCopyCell.setValue(sVal);
} else {
if (!oCurItem.formula) {
var DataOld = oCopyCell.getValueData();
oCopyCell.oValue = oCurItem.cell.oValue.clone(oCopyCell);
var DataNew = oCopyCell.getValueData();
if (false == DataOld.isEqual(DataNew)) {
History.Add(g_oUndoRedoCell, historyitem_Cell_ChangeValue, this.worksheet.getId(), new Asc.Range(0, oCopyCell.oId.getRow0(), gc_nMaxCol0, oCopyCell.oId.getRow0()), new UndoRedoData_CellSimpleData(oCopyCell.oId.getRow0(), oCopyCell.oId.getCol0(), DataOld, DataNew));
}
if (!arrRecalc[this.worksheet.getId()]) {
arrRecalc[this.worksheet.getId()] = {};
}
arrRecalc[this.worksheet.getId()][oCopyCell.getName()] = oCopyCell.getName();
this.worksheet.workbook.needRecalc[getVertexId(this.worksheet.getId(), oCopyCell.getName())] = [this.worksheet.getId(), oCopyCell.getName()];
if (this.worksheet.workbook.needRecalc.length < 0) {
this.worksheet.workbook.needRecalc.length = 0;
}
this.worksheet.workbook.needRecalc.length++;
} else {
var assemb;
var _p_ = new parserFormula(oCurItem.cell.sFormula, oCopyCell.getName(), this.worksheet);
if (_p_.parse()) {
assemb = _p_.changeOffset(oCopyCell.getOffset2(oCurItem.cell.getName())).assemble();
oCopyCell.setValue("=" + assemb);
}
this.worksheet.workbook.needRecalc[getVertexId(this.worksheet.getId(), oCopyCell.getName())] = [this.worksheet.getId(), oCopyCell.getName()];
if (this.worksheet.workbook.needRecalc.length < 0) {
this.worksheet.workbook.needRecalc.length = 0;
}
this.worksheet.workbook.needRecalc.length++;
}
}
}
nCellsIndex += nDCellsIndex;
if (nDCellsIndex > 0 && nCellsIndex >= nCellsLength) {
nCellsIndex = 0;
} else {
if (nCellsIndex < 0) {
nCellsIndex = nCellsLength - 1;
}
}
}
}
}
}
History.EndTransaction();
buildRecalc(this.worksheet.workbook);
unLockDraw(this.worksheet.workbook);
};
Range.prototype.createCellOnRowColCross = function () {
var oThis = this;
var bbox = this.bbox;
var nRangeType = this._getRangeType(bbox);
if (c_oRangeType.Row == nRangeType) {
this._foreachColNoEmpty(function (col) {
for (var i = bbox.r1; i <= bbox.r2; ++i) {
oThis.worksheet._getCell(i, col.index);
}
},
null);
} else {
if (c_oRangeType.Col == nRangeType) {
this._foreachRowNoEmpty(function (row) {
for (var i = bbox.c1; i <= bbox.c2; ++i) {
oThis.worksheet._getCell(row.index, i);
}
},
null);
}
}
};
function PromoteHelper() {
this.aCurDigits = new Array();
this.nCurSequence = 0;
this.nCurSequenceIndex = 0;
this.nDx = 1;
this.aSequence = new Array();
this.nSequenceLength = 0;
}
PromoteHelper.prototype = {
add: function (dVal) {
this.aCurDigits.push(dVal);
},
finishSection: function () {
if (this.aCurDigits.length > 0) {
this.aSequence.push({
digits: this.aCurDigits,
a0: 0,
a1: 0,
nX: 0,
length: this.aCurDigits.length
});
this.aCurDigits = new Array();
}
},
isOnlyIntegerSequence: function () {
var bRes = true;
var nPrevValue = null;
var nDiff = null;
for (var i = 0, length = this.aCurDigits.length; i < length; ++i) {
var nCurValue = this.aCurDigits[i];
if (null != nPrevValue) {
if (null == nDiff) {
nDiff = nCurValue - nPrevValue;
} else {
if (nCurValue != nPrevValue + nDiff) {
bRes = false;
break;
}
}
}
nPrevValue = nCurValue;
}
return bRes;
},
removeLast: function () {
this.aCurDigits = new Array();
},
finishAdd: function () {
if (this.aCurDigits.length > 0) {
this.aSequence.push({
digits: this.aCurDigits,
a0: 0,
a1: 0,
nX: 0,
length: this.aCurDigits.length
});
}
this.nSequenceLength = this.aSequence.length;
},
isEmpty: function () {
return 0 == this.nSequenceLength;
},
calc: function () {
for (var i = 0, length = this.aSequence.length; i < length; ++i) {
var sequence = this.aSequence[i];
var sequenceParams = this._promoteSequence(sequence.digits);
sequence.a0 = sequenceParams.a0;
sequence.a1 = sequenceParams.a1;
sequence.nX = sequenceParams.nX;
}
},
reverse: function () {
if (this.isEmpty()) {
return;
}
this.nCurSequence = this.nSequenceLength - 1;
this.nCurSequenceIndex = this.aSequence[this.nCurSequence].length - 1;
this.nDx = -1;
for (var i = 0, length = this.aSequence.length; i < length; ++i) {
this.aSequence[i].nX = -1;
}
},
getNext: function () {
var sequence = this.aSequence[this.nCurSequence];
var dNewVal = sequence.a1 * sequence.nX + sequence.a0;
sequence.nX += this.nDx;
this.nCurSequenceIndex += this.nDx;
if (this.nDx > 0) {
if (this.nCurSequenceIndex >= sequence.length) {
this.nCurSequenceIndex = 0;
this.nCurSequence++;
if (this.nCurSequence >= this.nSequenceLength) {
this.nCurSequence = 0;
}
}
} else {
if (this.nCurSequenceIndex < 0) {
this.nCurSequence--;
if (this.nCurSequence < 0) {
this.nCurSequence = this.nSequenceLength - 1;
}
this.nCurSequenceIndex = this.aSequence[this.nCurSequence].length - 1;
}
}
return dNewVal;
},
_promoteSequence: function (aDigits) {
var a0 = 0;
var a1 = 0;
var nX = 0;
if (1 == aDigits.length) {
nX = 1;
a1 = 1;
a0 = aDigits[0];
} else {
var nN = aDigits.length;
var nXi = 0;
var nXiXi = 0;
var dYi = 0;
var dYiXi = 0;
for (var i = 0, length = aDigits.length; i < length; ++i, ++nX) {
var dValue = aDigits[i];
nXi += nX;
nXiXi += nX * nX;
dYi += dValue;
dYiXi += dValue * nX;
}
var dD = nN * nXiXi - nXi * nXi;
var dD1 = dYi * nXiXi - nXi * dYiXi;
var dD2 = nN * dYiXi - dYi * nXi;
a0 = dD1 / dD;
a1 = dD2 / dD;
}
return {
a0: a0,
a1: a1,
nX: nX
};
}
};
function DefinedName() {
this.Name = null;
this.Ref = null;
this.LocalSheetId = null;
this.bTable = false;
}
function NameGenerator(wb) {
this.wb = wb;
this.aExistNames = new Object();
this.sTableNamePattern = "Table";
this.nTableNameMaxIndex = 0;
}
NameGenerator.prototype = {
addName: function (sName) {
this.aExistNames[sName] = 1;
},
addLocalDefinedName: function (oDefinedName) {
this.addName(oDefinedName.Name);
},
addDefinedName: function (oDefinedName) {
this.wb.DefinedNames[oDefinedName.Name] = oDefinedName;
this.addName(oDefinedName.Name);
},
addTableName: function (sName, ws, Ref) {
var sDefinedNameRef = ws.getName();
if (false == rx_test_ws_name.test(sDefinedNameRef)) {
sDefinedNameRef = "'" + sDefinedNameRef + "'";
}
sDefinedNameRef += "!" + Ref;
var oNewDefinedName = new DefinedName();
oNewDefinedName.Name = sName;
oNewDefinedName.Ref = sDefinedNameRef;
oNewDefinedName.bTable = true;
this.addDefinedName(oNewDefinedName);
},
isExist: function (sName) {
return null != this.aExistNames[sName];
},
getNextTableName: function (ws, Ref) {
this.nTableNameMaxIndex++;
var sNewName = this.sTableNamePattern + this.nTableNameMaxIndex;
while (null != this.aExistNames[sNewName]) {
this.nTableNameMaxIndex++;
sNewName = this.sTableNamePattern + this.nTableNameMaxIndex;
}
this.addTableName(sNewName, ws, Ref);
return sNewName;
}
};