Commit 5230af71 authored by Dmitry.Shahtanov's avatar Dmitry.Shahtanov Committed by Alexander.Trofimov

fix: Bug 19685 - Ссылки на ячейки в формуле не меняются если их перенести и отменить действие

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@48904 954022d7-b5bf-4e40-9824-e11837661b57
parent d2dc5d44
......@@ -3127,7 +3127,7 @@ UndoRedoWoorksheet.prototype = {
{
if( bUndo ){
var rec = {length:0};
var rec = {length:0}, rec2;
for(var ind = 0; ind < Data.arr.to.length; ind++ ){
var nRow = Data.arr.to[ind].getCellAddress().getRow0(),
nCol = Data.arr.to[ind].getCellAddress().getCol0();
......@@ -3195,8 +3195,17 @@ UndoRedoWoorksheet.prototype = {
}
}
}
var offset = { offsetRow : Data.from.r1 - Data.to.r1, offsetCol : Data.from.c1 - Data.to.c1 }
rec2 = ws._moveRecalcGraph(Data.to, offset);
this.wb.buildDependency();
rec.length += rec2.length;
for( var id in rec2 ){
if( id == "length" ) continue;
rec[id] = rec2[id];
}
this.wb.needRecalc = rec;
recalc(this.wb);
......
......@@ -676,9 +676,7 @@ function DependencyGraph(wb) {
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)),
exist = false,
n = new Vertex(range.getWorksheet().getId(),range.getName()),
nID = getVertexId(range.getWorksheet().getId(),range.getName());
n = new Vertex(range.getWorksheet().getId(),range.getName());
if( n.isArea ){
if( n.nodeId in nodes ){
......@@ -715,7 +713,7 @@ function DependencyGraph(wb) {
}
}
}
return {move:move,recalc:recalc};
}
......@@ -3369,44 +3367,48 @@ Woorksheet.prototype._prepareMoveRange=function(oBBoxFrom, oBBoxTo){
})
return res;
}
Woorksheet.prototype._moveRange=function(oBBoxFrom, oBBoxTo, copyRange){
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){
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();
History.TurnOff();
var arrUndo={from:[],to:[]};
var merged = this.getRange(new CellAddress(oBBoxTo.r1, oBBoxTo.c1, 0), new CellAddress(oBBoxTo.r2, oBBoxTo.c2, 0)).hasMergedAll();
var arrUndo={from:[],to:[]},
offset = { offsetRow : oBBoxTo.r1 - oBBoxFrom.r1, offsetCol : oBBoxTo.c1 - oBBoxFrom.c1 }, rec,
var t = this, offset = { offsetRow : oBBoxTo.r1 - oBBoxFrom.r1, offsetCol : oBBoxTo.c1 - oBBoxFrom.c1 }, rec = {length:0};
var move = this.workbook.dependencyFormulas.helper(oBBoxFrom,this.Id), c = {}, ret = {}, arrFrom = [], arrTo = [];
arrFrom = [], arrTo = [];
rec = this._moveRecalcGraph(oBBoxFrom, offset);
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++;
}
}
}
for(var nRow = oBBoxFrom.r2; nRow >= oBBoxFrom.r1; nRow-- ){
arrFrom[nRow] = [];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment