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

checkDefName

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@62834 954022d7-b5bf-4e40-9824-e11837661b57
parent 338652d3
...@@ -2130,6 +2130,10 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -2130,6 +2130,10 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
return this.wb.delDefinedNames(oldName); return this.wb.delDefinedNames(oldName);
}; };
spreadsheet_api.prototype.asc_checkDefinedName = function (checkName, scope) {
return this.wb.checkDefName(checkName, scope);
};
spreadsheet_api.prototype.asc_getDefaultDefinedName = function () { spreadsheet_api.prototype.asc_getDefaultDefinedName = function () {
return this.wb.getDefaultDefinedName(); return this.wb.getDefaultDefinedName();
}; };
...@@ -2407,6 +2411,11 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -2407,6 +2411,11 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
spreadsheet_api.prototype.asc_findCell = function(reference) { spreadsheet_api.prototype.asc_findCell = function(reference) {
var d = this.wb.findCell(reference ); var d = this.wb.findCell(reference );
if( !d ){
this.handlers.trigger("asc_onError", c_oAscError.ID.InvalidReferenceOrName, c_oAscError.Level.NoCritical);
return;
}
// Получаем sheet по имени // Получаем sheet по имени
var ws = this.wbModel.getWorksheetByName(d.sheet); var ws = this.wbModel.getWorksheetByName(d.sheet);
if (!ws || ws.getHidden()) if (!ws || ws.getHidden())
...@@ -3853,6 +3862,7 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -3853,6 +3862,7 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
prot["asc_editDefinedNames"] = prot.asc_editDefinedNames; prot["asc_editDefinedNames"] = prot.asc_editDefinedNames;
prot["asc_delDefinedNames"] = prot.asc_delDefinedNames; prot["asc_delDefinedNames"] = prot.asc_delDefinedNames;
prot["asc_getDefaultDefinedName"] = prot.asc_getDefaultDefinedName; prot["asc_getDefaultDefinedName"] = prot.asc_getDefaultDefinedName;
prot["asc_getDefaultDefinedName"] = prot.asc_checkDefinedName;
// Auto filters interface // Auto filters interface
prot["asc_addAutoFilter"] = prot.asc_addAutoFilter; prot["asc_addAutoFilter"] = prot.asc_addAutoFilter;
......
...@@ -815,37 +815,41 @@ DependencyGraph.prototype = { ...@@ -815,37 +815,41 @@ DependencyGraph.prototype = {
getDefNameNode:function ( node ) { getDefNameNode:function ( node ) {
return this.defNameList[node]; return this.defNameList[node];
}, },
getDefNameNodeByName:function(name, sheetId){ getDefNameNodeByName:function ( name, sheetId ) {
name = name.toLowerCase(); name = name.toLowerCase();
var _this = this, sheetNodeList, var sheetNodeList,
nodeId = getDefNameVertexId( sheetId, name ), nodeId = getDefNameVertexId( sheetId, name ),
oRes = false; oRes = false;
if ( !rx_defName.test( name ) ) {
return oRes ;
}
if ( null != sheetId ) { if ( null != sheetId ) {
sheetNodeList = this.defNameSheets[sheetId]; sheetNodeList = this.defNameSheets[sheetId];
if(sheetNodeList ){ if ( sheetNodeList ) {
nodeId = getDefNameVertexId( sheetId, name ); nodeId = getDefNameVertexId( sheetId, name );
oRes = sheetNodeList[nodeId]; oRes = sheetNodeList[nodeId];
if( oRes ) return oRes; if ( oRes ) return oRes;
} }
} }
sheetNodeList = this.defNameSheets["WB"]; sheetNodeList = this.defNameSheets["WB"];
nodeId = getDefNameVertexId( null, name ); nodeId = getDefNameVertexId( null, name );
oRes = sheetNodeList[nodeId]; oRes = sheetNodeList[nodeId];
if( oRes ) return oRes; if ( oRes ) return oRes;
return oRes; return oRes;
}, },
getDefNameNodeByRef:function(ref, sheetId){ getDefNameNodeByRef:function ( ref, sheetId ) {
var sheetNodeList; var sheetNodeList;
if ( null != sheetId ) { if ( null != sheetId ) {
sheetNodeList = this.defNameSheets[sheetId]; sheetNodeList = this.defNameSheets[sheetId];
for(var id in sheetNodeList){ for ( var id in sheetNodeList ) {
if( sheetNodeList[id].Ref == ref ){ if ( sheetNodeList[id].Ref == ref ) {
return sheetNodeList[id].Name; return sheetNodeList[id].Name;
} }
} }
...@@ -860,9 +864,9 @@ DependencyGraph.prototype = { ...@@ -860,9 +864,9 @@ DependencyGraph.prototype = {
return false; return false;
}, },
addDefinedNameNode:function(defName, sheetId, defRef, bUndo){ addDefinedNameNode:function ( defName, sheetId, defRef, bUndo ) {
var ws = this.wb.getWorksheet(sheetId) var ws = this.wb.getWorksheet( sheetId )
ws ? sheetId = ws.getId() : null; ws ? sheetId = ws.getId() : null;
var _this = this, var _this = this,
...@@ -870,34 +874,34 @@ DependencyGraph.prototype = { ...@@ -870,34 +874,34 @@ DependencyGraph.prototype = {
oRes = this.defNameList[nodeId], oRes = this.defNameList[nodeId],
dfv, defNameSheetsList; dfv, defNameSheetsList;
if( null == oRes ){ if ( null == oRes ) {
dfv = new DefNameVertex(sheetId,defName,defRef,this.wb); dfv = new DefNameVertex( sheetId, defName, defRef, this.wb );
oRes = (this.defNameList[dfv.nodeId] = dfv); oRes = (this.defNameList[dfv.nodeId] = dfv);
defNameSheetsList = this.defNameSheets[dfv.sheetId]; defNameSheetsList = this.defNameSheets[dfv.sheetId];
if( defNameSheetsList == null ){ if ( defNameSheetsList == null ) {
defNameSheetsList = {}; defNameSheetsList = {};
this.defNameSheets[dfv.sheetId] = defNameSheetsList; this.defNameSheets[dfv.sheetId] = defNameSheetsList;
} }
defNameSheetsList[dfv.nodeId] = dfv; defNameSheetsList[dfv.nodeId] = dfv;
} }
if(bUndo){ if ( bUndo ) {
oRes.Ref = defRef; oRes.Ref = defRef;
} }
return oRes; return oRes;
}, },
remoteDefName:function(sheetId, name){ remoteDefName:function ( sheetId, name ) {
var ws = this.wb.getWorksheet(sheetId) var ws = this.wb.getWorksheet( sheetId )
ws ? sheetId = ws.getId() : null; ws ? sheetId = ws.getId() : null;
var nodeId = getDefNameVertexId( sheetId, name ), var nodeId = getDefNameVertexId( sheetId, name ),
oRes = this.defNameList[nodeId], oRes = this.defNameList[nodeId],
ret = null; ret = null;
if( oRes ){ if ( oRes ) {
this.defNameList[nodeId].Ref = null; this.defNameList[nodeId].Ref = null;
ret = oRes; ret = oRes;
} }
...@@ -905,17 +909,17 @@ DependencyGraph.prototype = { ...@@ -905,17 +909,17 @@ DependencyGraph.prototype = {
return ret; return ret;
}, },
changeDefName: function( oldDefName, newDefName ){ changeDefName:function ( oldDefName, newDefName ) {
var ws = this.wb.getWorksheet(oldDefName.LocalSheetId ), sheetId = null; var ws = this.wb.getWorksheet( oldDefName.LocalSheetId ), sheetId = null;
ws ? sheetId = ws.getId() : null; ws ? sheetId = ws.getId() : null;
var oldN = this.getDefNameNodeByName( oldDefName.Name, sheetId ), var oldN = this.getDefNameNodeByName( oldDefName.Name, sheetId ),
res = null, sheetNodeList, nodeId, res = null, sheetNodeList, nodeId,
name = oldDefName.Name; name = oldDefName.Name;
sheetNodeList = this.defNameSheets[sheetId||"WB"]; sheetNodeList = this.defNameSheets[sheetId || "WB"];
nodeId = getDefNameVertexId( sheetId||"WB", name ); nodeId = getDefNameVertexId( sheetId || "WB", name );
sheetNodeList[nodeId] = null; sheetNodeList[nodeId] = null;
delete sheetNodeList[nodeId]; delete sheetNodeList[nodeId];
...@@ -923,44 +927,45 @@ DependencyGraph.prototype = { ...@@ -923,44 +927,45 @@ DependencyGraph.prototype = {
this.defNameList[nodeId] = null; this.defNameList[nodeId] = null;
delete this.defNameList[nodeId]; delete this.defNameList[nodeId];
oldN.changeDefName(newDefName); oldN.changeDefName( newDefName );
this.defNameList[oldN.nodeId] = oldN; this.defNameList[oldN.nodeId] = oldN;
sheetNodeList[oldN.nodeId] = oldN; sheetNodeList[oldN.nodeId] = oldN;
return oldN; return oldN;
}, },
saveDefName:function(){ saveDefName:function () {
var list = [], defN; var list = [], defN;
for(var id in this.defNameList){ for ( var id in this.defNameList ) {
defN = this.defNameList[id]; defN = this.defNameList[id];
if( defN.isTable ){continue;} if ( defN.isTable ) {
if(defN.Ref != null){ continue;
list.push(defN.getAscCDefName()); }
if ( defN.Ref != null ) {
list.push( defN.getAscCDefName() );
} }
} }
return list; return list;
}, },
getNextTableName:function(ws, Ref){ getNextTableName:function ( ws, Ref ) {
this.nTableNameMaxIndex++; this.nTableNameMaxIndex++;
var sNewName = this.sTableNamePattern + this.nTableNameMaxIndex, var sNewName = this.sTableNamePattern + this.nTableNameMaxIndex,
name = getDefNameVertexId(null,sNewName); name = getDefNameVertexId( null, sNewName );
while(this.defNameList[name]) while ( this.defNameList[name] ) {
{
this.nTableNameMaxIndex++; this.nTableNameMaxIndex++;
sNewName = this.sTableNamePattern + this.nTableNameMaxIndex; sNewName = this.sTableNamePattern + this.nTableNameMaxIndex;
name = getDefNameVertexId(null,sNewName); name = getDefNameVertexId( null, sNewName );
} }
this.addTableName(sNewName,ws,Ref); this.addTableName( sNewName, ws, Ref );
console.log( sNewName ); console.log( sNewName );
return sNewName; return sNewName;
}, },
addTableName : function(sName, ws, Ref){ addTableName:function ( sName, ws, Ref ) {
var dfv = new DefNameVertex(null,sName,parserHelp.get3DRef(ws.getName(), Ref.getAbsName()),this.wb,true ), var dfv = new DefNameVertex( null, sName, parserHelp.get3DRef( ws.getName(), Ref.getAbsName() ), this.wb, true ),
defNameSheetsList = this.defNameSheets[dfv.sheetId]; defNameSheetsList = this.defNameSheets[dfv.sheetId];
this.defNameList[dfv.nodeId] = dfv; this.defNameList[dfv.nodeId] = dfv;
if( defNameSheetsList == null ){ if ( defNameSheetsList == null ) {
defNameSheetsList = {}; defNameSheetsList = {};
this.defNameSheets[dfv.sheetId] = defNameSheetsList; this.defNameSheets[dfv.sheetId] = defNameSheetsList;
} }
...@@ -1213,230 +1218,229 @@ Vertex.prototype = { ...@@ -1213,230 +1218,229 @@ Vertex.prototype = {
}; };
function DefNameVertex(scope,defName,defRef,wb,isTable){ function DefNameVertex( scope, defName, defRef, wb, isTable ) {
this.sheetId = scope === null || scope === undefined ? "WB" : scope this.sheetId = scope === null || scope === undefined ? "WB" : scope
// this.sheetId = scope || "WB"; // this.sheetId = scope || "WB";
this.cellId = defName.toLowerCase(); this.cellId = defName.toLowerCase();
this.Ref = defRef; this.Ref = defRef;
this.Name = defName this.Name = defName
this.isTable = isTable; this.isTable = isTable;
this.nodeId = getDefNameVertexId(this.sheetId, defName); this.nodeId = getDefNameVertexId( this.sheetId, defName );
this.wb = wb; this.wb = wb;
//вершина которую мы прошли и поставили в очередь обхода //вершина которую мы прошли и поставили в очередь обхода
this.isBlack = false; this.isBlack = false;
//вершина которую мы прошли, но не поставили в очередь обхода. нужно для определения петель в графе. //вершина которую мы прошли, но не поставили в очередь обхода. нужно для определения петель в графе.
this.isGray = false; this.isGray = false;
//если вершина входит в цикличный путь, то она помечается плохой и запоминается в списке плохих вершин. //если вершина входит в цикличный путь, то она помечается плохой и запоминается в списке плохих вершин.
this.isBad = false; this.isBad = false;
//masterEdges содержит ячейки, от которых зависит текущая ячейка //masterEdges содержит ячейки, от которых зависит текущая ячейка
this.masterEdges = null; this.masterEdges = null;
//slaveEdges содержит ячейки, которые зависят от данной ячейки //slaveEdges содержит ячейки, которые зависят от данной ячейки
this.slaveEdges = null; this.slaveEdges = null;
this.refCount = 0; this.refCount = 0;
this.isDefinedName = true; this.isDefinedName = true;
} }
DefNameVertex.prototype = { DefNameVertex.prototype = {
constructor: Vertex, constructor:Vertex,
moveInner: function (bboxTo) { moveInner:function ( bboxTo ) {
//удаляем старые ссылки slave и master //удаляем старые ссылки slave и master
for (var i in this.slaveEdges) { for ( var i in this.slaveEdges ) {
var slave = this.slaveEdges[i]; var slave = this.slaveEdges[i];
slave.deleteMasterEdge(this); slave.deleteMasterEdge( this );
}
for (var i in this.masterEdges) {
var master = this.masterEdges[i];
master.deleteSlaveEdge(this);
}
var sOldNodeId = this.nodeId;
this.bbox = bboxTo;
this.cellId = bboxTo.getName();
this.nodeId = getVertexId(this.sheetId, this.cellId);
this.wb.needRecalc.nodes[this.nodeId] = [this.sheetId, this.cellId ];
this.wb.needRecalc.length++;
//добавляем новые slave и master
for (var i in this.slaveEdges) {
var slave = this.slaveEdges[i];
slave.addMasterEdge(this);
}
for (var i in this.masterEdges) {
var master = this.masterEdges[i];
master.addSlaveEdge(this);
}
},
moveOuter: function (from, to, oFormulas) {
if ((from.r1 == to.r1 && from.c1 == to.c1) || (from.r2 == to.r2 && from.c2 == to.c2)) {
var _sn = this.getSlaveEdges();
for (var _id in _sn) {
var slave = _sn[_id];
var cell = slave.returnCell();
if (cell && cell.formulaParsed) {
cell.formulaParsed.stretchArea(this, from, to);
var formula = cell.formulaParsed.assemble();
if (null != formula) {
if (oFormulas)
oFormulas[slave.nodeId] = { node: slave, formula: formula };
else
slave.setFormula(formula, true, false);
}
}
}
}
else {
if (oFormulas) {
if (null == oFormulas[this.nodeId])
oFormulas[this.nodeId] = { node: this, formula: null };
}
else {
var cell = this.returnCell();
if (cell && cell.formulaParsed) {
this.wb.dependencyFormulas.deleteMasterNodes2(this.sheetId, this.cellId);
addToArrRecalc(this.sheetId, cell);
}
}
var _sn = this.getSlaveEdges();
for (var _id in _sn) {
var slave = _sn[_id]
var cell = slave.returnCell();
if (cell && cell.formulaParsed) {
cell.formulaParsed.shiftCells(this, from, to);
var formula = cell.formulaParsed.assemble();
if (null != formula) {
if (oFormulas)
oFormulas[slave.nodeId] = { node: slave, formula: formula };
else
slave.setFormula(formula, true, false);
}
}
}
}
},
//добавляем ведущую ячейку.
addMasterEdge : function(node){
if( !this.masterEdges ){
this.masterEdges = {};
} }
if( !this.masterEdges[node.nodeId] ){ for ( var i in this.masterEdges ) {
this.masterEdges[node.nodeId] = node; var master = this.masterEdges[i];
this.refCount ++; master.deleteSlaveEdge( this );
} }
}, var sOldNodeId = this.nodeId;
this.bbox = bboxTo;
this.cellId = bboxTo.getName();
this.nodeId = getVertexId( this.sheetId, this.cellId );
this.wb.needRecalc.nodes[this.nodeId] = [this.sheetId, this.cellId ];
this.wb.needRecalc.length++;
//добавляем новые slave и master
for ( var i in this.slaveEdges ) {
var slave = this.slaveEdges[i];
slave.addMasterEdge( this );
}
for ( var i in this.masterEdges ) {
var master = this.masterEdges[i];
master.addSlaveEdge( this );
}
},
moveOuter:function ( from, to, oFormulas ) {
if ( (from.r1 == to.r1 && from.c1 == to.c1) || (from.r2 == to.r2 && from.c2 == to.c2) ) {
var _sn = this.getSlaveEdges();
for ( var _id in _sn ) {
var slave = _sn[_id];
var cell = slave.returnCell();
if ( cell && cell.formulaParsed ) {
cell.formulaParsed.stretchArea( this, from, to );
var formula = cell.formulaParsed.assemble();
if ( null != formula ) {
if ( oFormulas )
oFormulas[slave.nodeId] = { node:slave, formula:formula };
else
slave.setFormula( formula, true, false );
}
}
}
}
else {
if ( oFormulas ) {
if ( null == oFormulas[this.nodeId] )
oFormulas[this.nodeId] = { node:this, formula:null };
}
else {
var cell = this.returnCell();
if ( cell && cell.formulaParsed ) {
this.wb.dependencyFormulas.deleteMasterNodes2( this.sheetId, this.cellId );
addToArrRecalc( this.sheetId, cell );
}
}
var _sn = this.getSlaveEdges();
for ( var _id in _sn ) {
var slave = _sn[_id]
var cell = slave.returnCell();
if ( cell && cell.formulaParsed ) {
cell.formulaParsed.shiftCells( this, from, to );
var formula = cell.formulaParsed.assemble();
if ( null != formula ) {
if ( oFormulas )
oFormulas[slave.nodeId] = { node:slave, formula:formula };
else
slave.setFormula( formula, true, false );
}
}
}
}
},
//добавляем ведущую ячейку.
addMasterEdge:function ( node ) {
if ( !this.masterEdges ) {
this.masterEdges = {};
}
if ( !this.masterEdges[node.nodeId] ) {
this.masterEdges[node.nodeId] = node;
this.refCount++;
}
},
//добавляем зависимую(ведомую) ячейку. //добавляем зависимую(ведомую) ячейку.
addSlaveEdge : function(node){ addSlaveEdge:function ( node ) {
if( !this.slaveEdges ){ if ( !this.slaveEdges ) {
this.slaveEdges = {}; this.slaveEdges = {};
} }
if( !this.slaveEdges[node.nodeId] ){ if ( !this.slaveEdges[node.nodeId] ) {
this.slaveEdges[node.nodeId] = node; this.slaveEdges[node.nodeId] = node;
this.refCount ++; this.refCount++;
} }
}, },
getMasterEdges : function(){ getMasterEdges:function () {
return this.masterEdges; return this.masterEdges;
}, },
getSlaveEdges : function(){ getSlaveEdges:function () {
return this.slaveEdges; return this.slaveEdges;
}, },
getSlaveEdges2 : function(){ getSlaveEdges2:function () {
var ret = {}, count = 0; var ret = {}, count = 0;
for(var id in this.slaveEdges){ for ( var id in this.slaveEdges ) {
ret[id] = this.slaveEdges[id]; ret[id] = this.slaveEdges[id];
count++; count++;
} }
if ( count > 0 ) if ( count > 0 )
return ret; return ret;
else else
return null; return null;
}, },
//удаляем ребро между конкретной ведущей ячейки. //удаляем ребро между конкретной ведущей ячейки.
deleteMasterEdge: function (node) { deleteMasterEdge:function ( node ) {
if (this.masterEdges) { if ( this.masterEdges ) {
if( this.masterEdges[node.nodeId] ){ if ( this.masterEdges[node.nodeId] ) {
this.masterEdges[node.nodeId] = null; this.masterEdges[node.nodeId] = null;
delete this.masterEdges[node.nodeId]; delete this.masterEdges[node.nodeId];
node.deleteSlaveEdge(this); node.deleteSlaveEdge( this );
this.refCount--; this.refCount--;
} }
} }
}, },
//удаляем ребро между конкретной зависимой(ведомой) ячейки. //удаляем ребро между конкретной зависимой(ведомой) ячейки.
deleteSlaveEdge: function (node) { deleteSlaveEdge:function ( node ) {
if (this.slaveEdges) { if ( this.slaveEdges ) {
if(this.slaveEdges[node.nodeId]){ if ( this.slaveEdges[node.nodeId] ) {
this.slaveEdges[node.nodeId] = null; this.slaveEdges[node.nodeId] = null;
delete this.slaveEdges[node.nodeId]; delete this.slaveEdges[node.nodeId];
node.deleteMasterEdge(this); node.deleteMasterEdge( this );
this.refCount--; this.refCount--;
} }
} }
}, },
//очищаем все ребра по ведущим ячейкам. //очищаем все ребра по ведущим ячейкам.
deleteAllMasterEdges : function(){ deleteAllMasterEdges:function () {
var ret = {}; var ret = {};
for( var id in this.masterEdges ){ for ( var id in this.masterEdges ) {
var masterEdge = this.masterEdges[id]; var masterEdge = this.masterEdges[id];
masterEdge.deleteSlaveEdge(this); masterEdge.deleteSlaveEdge( this );
this.masterEdges[id] = null; this.masterEdges[id] = null;
delete this.masterEdges[id]; delete this.masterEdges[id];
this.refCount--; this.refCount--;
ret[id] = masterEdge; ret[id] = masterEdge;
} }
this.masterEdges = {}; this.masterEdges = {};
return ret; return ret;
}, },
//очищаем все ребра по ведомым ячейкам. //очищаем все ребра по ведомым ячейкам.
deleteAllSlaveEdges : function(){ deleteAllSlaveEdges:function () {
var ret = {}; var ret = {};
for( var id in this.slaveEdges ){ for ( var id in this.slaveEdges ) {
var slaveEdge = this.slaveEdges[id]; var slaveEdge = this.slaveEdges[id];
slaveEdge.deleteMasterEdge(this); slaveEdge.deleteMasterEdge( this );
this.slaveEdges[id] = null; this.slaveEdges[id] = null;
delete this.slaveEdges[id]; delete this.slaveEdges[id];
this.refCount--; this.refCount--;
ret[id] = slaveEdge; ret[id] = slaveEdge;
} }
this.slaveEdges = {}; this.slaveEdges = {};
return ret; return ret;
}, },
returnCell : function(){ returnCell:function () {
//todo //todo
if(null == this.cell && this.wb && !this.isArea) if ( null == this.cell && this.wb && !this.isArea ) {
{ var ws = this.wb.getWorksheetById( this.sheetId );
var ws = this.wb.getWorksheetById(this.sheetId); if ( ws )
if(ws) this.cell = ws._getCellNoEmpty( this.bbox.r1, this.bbox.c1 );
this.cell = ws._getCellNoEmpty(this.bbox.r1, this.bbox.c1); }
} return this.cell;
return this.cell; },
},
getAscCDefName:function(){ getAscCDefName:function () {
return new Asc.asc_CDefName( this.Name, this.Ref, this.sheetId == "WB" ? null : this.wb.getWorksheetById(this.sheetId ).getIndex(), this.isTable ); return new Asc.asc_CDefName( this.Name, this.Ref, this.sheetId == "WB" ? null : this.wb.getWorksheetById( this.sheetId ).getIndex(), this.isTable );
}, },
changeDefName:function(newName){ changeDefName:function ( newName ) {
this.cellId = newName.Name.toLowerCase(); this.cellId = newName.Name.toLowerCase();
this.Ref = newName.Ref; this.Ref = newName.Ref;
this.Name = newName.Name; this.Name = newName.Name;
this.nodeId = getDefNameVertexId(this.sheetId, newName.Name); this.nodeId = getDefNameVertexId( this.sheetId, newName.Name );
} }
}; };
...@@ -2143,34 +2147,48 @@ Workbook.prototype.recalcWB = function(isRecalcWB){ ...@@ -2143,34 +2147,48 @@ Workbook.prototype.recalcWB = function(isRecalcWB){
sortDependency( this ); sortDependency( this );
} }
}; };
Workbook.prototype.isDefinedNamesExists = function(name, sheetId){ Workbook.prototype.checkDefName = function ( checkName, scope ) {
var rxTest = rx_defName.test( checkName );
if ( !rxTest ) {
return false;
}
if( scope !== null ){
scope = this.getWorksheet(scope).getId();
}
var defName = this.dependencyFormulas.getDefNameNode(getDefNameVertexId(scope, checkName));
return defName || true;
}
Workbook.prototype.isDefinedNamesExists = function ( name, sheetId ) {
var n = name.toLowerCase(); var n = name.toLowerCase();
if(null != sheetId) if ( null != sheetId ) {
{ var ws = this.getWorksheetById( sheetId );
var ws = this.getWorksheetById(sheetId); if ( null != ws ) {
if(null != ws) var bExist = false;
{ if ( ws.DefinedNames )
var bExist = false; bExist = !!ws.DefinedNames[n];
if( ws.DefinedNames ) if ( bExist )
bExist = !!ws.DefinedNames[n]; return bExist;
if(bExist) }
return bExist; }
} if ( this.DefinedNames ) {
} return !!this.DefinedNames[n];
if( this.DefinedNames ){ }
return !!this.DefinedNames[n]; return false;
}
return false;
}; };
Workbook.prototype.getDefinesNamesWB = function () { Workbook.prototype.getDefinesNamesWB = function () {
var names = [], name; var names = [], name;
for(var id in this.dependencyFormulas.defNameList ){ for ( var id in this.dependencyFormulas.defNameList ) {
name = this.dependencyFormulas.defNameList[id].getAscCDefName() name = this.dependencyFormulas.defNameList[id].getAscCDefName()
if(name.Ref){ if ( name.Ref ) {
names.push(name); names.push( name );
} }
} }
...@@ -2178,70 +2196,70 @@ Workbook.prototype.getDefinesNamesWB = function () { ...@@ -2178,70 +2196,70 @@ Workbook.prototype.getDefinesNamesWB = function () {
} }
Workbook.prototype.getDefinesNames = function ( name, sheetId ) { Workbook.prototype.getDefinesNames = function ( name, sheetId ) {
var res = this.dependencyFormulas.getDefNameNodeByName(name, sheetId); var res = this.dependencyFormulas.getDefNameNodeByName( name, sheetId );
return res; return res;
}; };
/*Workbook.prototype.setDefinesNames = function ( defName ) { /*Workbook.prototype.setDefinesNames = function ( defName ) {
var n = defName.Name.toLowerCase(), var n = defName.Name.toLowerCase(),
retRes = null; retRes = null;
var rxTest = rx_defName.test( n ); var rxTest = rx_defName.test( n );
if ( !rxTest ) { if ( !rxTest ) {
return null; return null;
} }
var dN = this.DefinedNames || {}; var dN = this.DefinedNames || {};
if ( null != defName.Scope ) { if ( null != defName.Scope ) {
var ws = this.getWorksheetById( defName.Scope ); var ws = this.getWorksheetById( defName.Scope );
if ( ws ) { if ( ws ) {
if ( ws.DefinedNames ) { if ( ws.DefinedNames ) {
if ( ws.DefinedNames[n] ) { if ( ws.DefinedNames[n] ) {
retRes = new Asc.asc_CDefName( ws.DefinedNames[n].Name, ws.DefinedNames[n].Ref, ws.getIndex() ); retRes = new Asc.asc_CDefName( ws.DefinedNames[n].Name, ws.DefinedNames[n].Ref, ws.getIndex() );
} }
else { else {
if ( dN[n] ) { if ( dN[n] ) {
return new Asc.asc_CDefName( dN[n].Name, dN[n].Ref, null ); return new Asc.asc_CDefName( dN[n].Name, dN[n].Ref, null );
} }
ws.DefinedNames[n] = { LocalSheetId:defName.Scope, Name:defName.Name, Ref:defName.Ref, bTable:false }; ws.DefinedNames[n] = { LocalSheetId:defName.Scope, Name:defName.Name, Ref:defName.Ref, bTable:false };
retRes = new Asc.asc_CDefName( ws.DefinedNames[n].Name, ws.DefinedNames[n].Ref, ws.getIndex() ); retRes = new Asc.asc_CDefName( ws.DefinedNames[n].Name, ws.DefinedNames[n].Ref, ws.getIndex() );
} }
} }
} }
return null; return null;
} }
if ( dN[n] ) { if ( dN[n] ) {
return new Asc.asc_CDefName( dN[n].Name, dN[n].Ref, null ); return new Asc.asc_CDefName( dN[n].Name, dN[n].Ref, null );
} }
else { else {
dN[n] = { LocalSheetId:null, Name:defName.Name, Ref:defName.Ref, bTable:false }; dN[n] = { LocalSheetId:null, Name:defName.Name, Ref:defName.Ref, bTable:false };
retRes = new Asc.asc_CDefName( dN[n].Name, dN[n].Ref, null ); retRes = new Asc.asc_CDefName( dN[n].Name, dN[n].Ref, null );
} }
if( retRes ){ if( retRes ){
History.Create_NewPoint(); History.Create_NewPoint();
History.Add(g_oUndoRedoWorkbook, historyitem_Workbook_DefinedNamesAdd, null, null, new UndoRedoData_DefinedNames(retRes.Name, retRes.Ref, retRes.Scope)); History.Add(g_oUndoRedoWorkbook, historyitem_Workbook_DefinedNamesAdd, null, null, new UndoRedoData_DefinedNames(retRes.Name, retRes.Ref, retRes.Scope));
// //
// TODO // TODO
// добавить в граф зависимостей ноду с новым именованным диапазоном. // добавить в граф зависимостей ноду с новым именованным диапазоном.
// если функция содержит именованный диапазон с область видимости книга, а вводится диапазон с таким же именем, // если функция содержит именованный диапазон с область видимости книга, а вводится диапазон с таким же именем,
// но с областью видимости лист, то функция пересчитывается на диапазон с областью видимости лист // но с областью видимости лист, то функция пересчитывается на диапазон с областью видимости лист
// //
} }
return retRes; return retRes;
};*/ };*/
Workbook.prototype.delDefinesNames = function ( defName ) { Workbook.prototype.delDefinesNames = function ( defName ) {
History.Create_NewPoint(); History.Create_NewPoint();
var retRes = false, res = null; var retRes = false, res = null;
retRes = this.dependencyFormulas.remoteDefName(defName.LocalSheetId,defName.Name); retRes = this.dependencyFormulas.remoteDefName( defName.LocalSheetId, defName.Name );
if( retRes ){ if ( retRes ) {
/* /*
* #1. поменяли название - перестроили формулу. нужно вызвать пересборку формул в ячейках, в которыйх есть эта именованная ссылка. * #1. поменяли название - перестроили формулу. нужно вызвать пересборку формул в ячейках, в которыйх есть эта именованная ссылка.
* для этого пробегаемся по всем slave, и вызываем пересборку. в результате должна получиться новая формула, где используется новый диапазон. * для этого пробегаемся по всем slave, и вызываем пересборку. в результате должна получиться новая формула, где используется новый диапазон.
...@@ -2250,31 +2268,31 @@ Workbook.prototype.delDefinesNames = function ( defName ) { ...@@ -2250,31 +2268,31 @@ Workbook.prototype.delDefinesNames = function ( defName ) {
* */ * */
var nSE, se, seUndoRedo = []; var nSE, se, seUndoRedo = [];
nSE = retRes.getSlaveEdges(); nSE = retRes.getSlaveEdges();
retRes.deleteAllMasterEdges(); retRes.deleteAllMasterEdges();
for( var id in nSE ){ for ( var id in nSE ) {
seUndoRedo.push(id); seUndoRedo.push( id );
se = nSE[id]; se = nSE[id];
se.deleteMasterEdge(retRes); se.deleteMasterEdge( retRes );
this.needRecalc.nodes[se.nodeId] = [se.sheetId, se.cellId ]; this.needRecalc.nodes[se.nodeId] = [se.sheetId, se.cellId ];
this.needRecalc.length++; this.needRecalc.length++;
se = se.returnCell(); se = se.returnCell();
se ? function(){ se ? function () {
se.setFormula(se.formulaParsed.assemble()); se.setFormula( se.formulaParsed.assemble() );
se.formulaParsed.isParsed = false; se.formulaParsed.isParsed = false;
se.formulaParsed.parse(); se.formulaParsed.parse();
se.formulaParsed.buildDependencies(); se.formulaParsed.buildDependencies();
}() : null; }() : null;
} }
sortDependency(this); sortDependency( this );
History.Add(g_oUndoRedoWorkbook, historyitem_Workbook_DefinedNamesDelete, null, null, new UndoRedoData_DefinedNames(defName.Name, defName.Ref, defName.Scope, seUndoRedo)); History.Add( g_oUndoRedoWorkbook, historyitem_Workbook_DefinedNamesDelete, null, null, new UndoRedoData_DefinedNames( defName.Name, defName.Ref, defName.Scope, seUndoRedo ) );
} }
return retRes; return retRes;
...@@ -2288,53 +2306,53 @@ Workbook.prototype.editDefinesNames = function ( oldName, newName, bUndo ) { ...@@ -2288,53 +2306,53 @@ Workbook.prototype.editDefinesNames = function ( oldName, newName, bUndo ) {
return retRes; return retRes;
} }
if(oldName){ if ( oldName ) {
retRes = this.dependencyFormulas.changeDefName( oldName, newName ); retRes = this.dependencyFormulas.changeDefName( oldName, newName );
rename = true; rename = true;
} }
else{ else {
retRes = this.dependencyFormulas.addDefinedNameNode(newName.Name, newName.LocalSheetId, newName.Ref, bUndo); retRes = this.dependencyFormulas.addDefinedNameNode( newName.Name, newName.LocalSheetId, newName.Ref, bUndo );
} }
if( retRes ){ if ( retRes ) {
History.Create_NewPoint(); History.Create_NewPoint();
if(rename){ if ( rename ) {
History.Add(g_oUndoRedoWorkbook, historyitem_Workbook_DefinedNamesChange, null, null, new UndoRedoData_DefinedNamesChange(oldName, newName)); History.Add( g_oUndoRedoWorkbook, historyitem_Workbook_DefinedNamesChange, null, null, new UndoRedoData_DefinedNamesChange( oldName, newName ) );
} }
else{ else {
History.Add(g_oUndoRedoWorkbook, historyitem_Workbook_DefinedNamesAdd, null, null, new UndoRedoData_DefinedNamesChange(oldName, newName)); History.Add( g_oUndoRedoWorkbook, historyitem_Workbook_DefinedNamesAdd, null, null, new UndoRedoData_DefinedNamesChange( oldName, newName ) );
} }
/* /*
* #1. поменяли название - перестроили формулу. нужно вызвать пересборку формул в ячейках, в которыйх есть эта именованная ссылка. * #1. поменяли название - перестроили формулу. нужно вызвать пересборку формул в ячейках, в которыйх есть эта именованная ссылка.
* для этого пробегаемся по всем slave, и вызываем пересборку. в результате должна получиться новая формула, где используется новый диапазон. * для этого пробегаемся по всем slave, и вызываем пересборку. в результате должна получиться новая формула, где используется новый диапазон.
* #2. поменяли диапазон. нужно перестроить граф зависимосте и пересчитать формулу. находим диапазон; меняем в нем ссылку; разбираем ссылку; * #2. поменяли диапазон. нужно перестроить граф зависимосте и пересчитать формулу. находим диапазон; меняем в нем ссылку; разбираем ссылку;
* удаляем старые master и добавляем новые, которые получились в результате разбора новой ссылки; пересчитываем формулу. * удаляем старые master и добавляем новые, которые получились в результате разбора новой ссылки; пересчитываем формулу.
* */ * */
if(rename){ if ( rename ) {
var nSE = retRes.getSlaveEdges(), se; var nSE = retRes.getSlaveEdges(), se;
retRes.deleteAllMasterEdges(); retRes.deleteAllMasterEdges();
for( var id in nSE ){ for ( var id in nSE ) {
se = nSE[id]; se = nSE[id];
se.deleteMasterEdge(retRes); se.deleteMasterEdge( retRes );
this.needRecalc.nodes[se.nodeId] = [se.sheetId, se.cellId ]; this.needRecalc.nodes[se.nodeId] = [se.sheetId, se.cellId ];
this.needRecalc.length++; this.needRecalc.length++;
se = se.returnCell(); se = se.returnCell();
se ? function(){ se ? function () {
se.setFormula(se.formulaParsed.assemble()); se.setFormula( se.formulaParsed.assemble() );
se.formulaParsed.buildDependencies(true); se.formulaParsed.buildDependencies( true );
}() : null; }() : null;
} }
sortDependency(this); sortDependency( this );
} }
retRes = retRes.getAscCDefName(); retRes = retRes.getAscCDefName();
...@@ -2343,9 +2361,9 @@ Workbook.prototype.editDefinesNames = function ( oldName, newName, bUndo ) { ...@@ -2343,9 +2361,9 @@ Workbook.prototype.editDefinesNames = function ( oldName, newName, bUndo ) {
return retRes; return retRes;
}; };
Workbook.prototype.findDefinesNames = function(ref, sheetId){ Workbook.prototype.findDefinesNames = function ( ref, sheetId ) {
return this.dependencyFormulas.getDefNameNodeByRef(ref, sheetId); return this.dependencyFormulas.getDefNameNodeByRef( ref, sheetId );
} }
Workbook.prototype.buildDependency = function(){ Workbook.prototype.buildDependency = function(){
......
...@@ -1949,6 +1949,12 @@ ...@@ -1949,6 +1949,12 @@
}; };
WorkbookView.prototype.checkDefName = function (checkName,scope) {
return this.model.checkDefName(checkName,scope);
};
WorkbookView.prototype.editDefinedNames = function (oldName, newName) { WorkbookView.prototype.editDefinedNames = function (oldName, newName) {
//ToDo проверка defName.ref на знак "=" в начале ссылки. знака нет тогда это либо число либо строка, так делает Excel. //ToDo проверка defName.ref на знак "=" в начале ссылки. знака нет тогда это либо число либо строка, так делает Excel.
var res = this.model.editDefinesNames(oldName, newName); var res = this.model.editDefinesNames(oldName, newName);
......
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