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

сделан разбор формул для локализованных названий функций, для локализованных чисел.

добавление и изменение именованных диапазонов через одну функцию.


git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@62549 954022d7-b5bf-4e40-9824-e11837661b57
parent a42a2f2b
......@@ -2113,7 +2113,8 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
};
spreadsheet_api.prototype.asc_setDefinedNames = function (defName) {
return this.wb.setDefinedNames(defName);
// return this.wb.setDefinedNames(defName);
return this.wb.editDefinedNames(null, defName);
};
spreadsheet_api.prototype.asc_editDefinedNames = function (oldName, newName) {
......
This diff is collapsed.
......@@ -2856,11 +2856,16 @@ UndoRedoWorkbook.prototype = {
}
else if(historyitem_Workbook_DefinedNamesAdd === Type ){
if(bUndo){
this.wb.delDefinesNames( Data );
this.wb.delDefinesNames( Data.newName );
}
else{
this.wb.setDefinesNames( Data );
this.wb.setDefinesNames( Data.newName );
}
/*TODO
* Ввели формулу в которой есть именованный диапазон, но ИД нет в списке ИД. Результат формулы #NAME!.
* Создаем ИД с таким же именем, что и в функции. Необходимо пересчитать функцию. Предварительно перестроив
* граф зависимостей.
* */
}
else if(historyitem_Workbook_DefinedNamesChange === Type ){
var oldName, newName;
......
......@@ -2176,63 +2176,94 @@ Workbook.prototype.delDefinesNames = function ( defName ) {
}
Workbook.prototype.editDefinesNames = function ( oldName, newName ) {
var oldN = oldName.Name.toLowerCase(),
newN = newName.Name.toLowerCase(),
retRes = null, _tmp;
var oldN, newN = newName.Name.toLowerCase(), retRes = null, _tmp,
dN = this.DefinedNames || {};
var rxTest = rx_defName.test( newN );
if ( !rxTest ) {
if ( !rx_defName.test( newN ) ) {
return retRes;
}
var dN = this.DefinedNames || {};
if ( null != oldName.Scope ) {
var ws = this.getWorksheetByName( oldName.Scope );
if ( ws ) {
if ( ws.DefinedNames ) {
if ( null == ws.DefinedNames[oldN] ) {
retRes = null;
}
else {
ws.DefinedNames[newN] = ws.DefinedNames[oldN];
ws.DefinedNames[newN].Name = newName.Name;
ws.DefinedNames[newN].Ref = newName.Ref;
// ws.DefinedNames[newN].LocalSheetId = ws.getId();
if(oldName){
oldN = oldName.Name.toLowerCase();
if ( oldN != newN ) {
ws.DefinedNames[oldN] = null;
delete ws.DefinedNames[oldN];
if ( null != oldName.Scope ) {
var ws = this.getWorksheetByName( oldName.Scope );
if ( ws ) {
if ( ws.DefinedNames ) {
if ( null == ws.DefinedNames[oldN] ) {
retRes = null;
}
else {
ws.DefinedNames[newN] = ws.DefinedNames[oldN];
ws.DefinedNames[newN].Name = newName.Name;
ws.DefinedNames[newN].Ref = newName.Ref;
// ws.DefinedNames[newN].LocalSheetId = ws.getId();
_tmp = [ws.DefinedNames[newN].LocalSheetId,oldN,newN];
if ( oldN != newN ) {
ws.DefinedNames[oldN] = null;
delete ws.DefinedNames[oldN];
}
retRes = new Asc.asc_CDefName( ws.DefinedNames[newN].Name, ws.DefinedNames[newN].Ref, newName.Scope );
_tmp = [ws.DefinedNames[newN].LocalSheetId,oldN,newN];
retRes = new Asc.asc_CDefName( ws.DefinedNames[newN].Name, ws.DefinedNames[newN].Ref, newName.Scope );
}
}
}
}
}
else {
if ( null != dN[oldN] ) {
dN[newN] = dN[oldN];
dN[newN].Name = newName.Name;
dN[newN].Ref = newName.Ref;
dN[newN].LocalSheetId = null;
if ( oldN != newN ) {
dN[oldN] = null;
delete dN[oldN];
else {
if ( null != dN[oldN] ) {
dN[newN] = dN[oldN];
dN[newN].Name = newName.Name;
dN[newN].Ref = newName.Ref;
dN[newN].LocalSheetId = null;
if ( oldN != newN ) {
dN[oldN] = null;
delete dN[oldN];
}
_tmp = [null,oldN,newN];
retRes = new Asc.asc_CDefName( dN[newN].Name, dN[newN].Ref, null );
}
}
_tmp = [null,oldN,newN];
}
else{
if ( null != newName.Scope ) {
var ws = this.getWorksheetById( newName.Scope );
if ( ws ) {
if ( ws.DefinedNames ) {
if ( ws.DefinedNames[newN] ) {
retRes = new Asc.asc_CDefName( ws.DefinedNames[newN].Name, ws.DefinedNames[newN].Ref, ws.getIndex() );
}
else {
if ( dN[newN] ) {
return new Asc.asc_CDefName( dN[newN].Name, dN[newN].Ref, null );
}
ws.DefinedNames[newN] = { LocalSheetId:newName.Scope, Name:newName.Name, Ref:newName.Ref, bTable:false };
retRes = new Asc.asc_CDefName( ws.DefinedNames[newN].Name, ws.DefinedNames[newN].Ref, ws.getIndex() );
}
}
}
return null;
}
if ( dN[newN] ) {
return new Asc.asc_CDefName( dN[newN].Name, dN[newN].Ref, null );
}
else {
dN[newN] = { LocalSheetId:null, Name:newName.Name, Ref:newName.Ref, bTable:false };
retRes = new Asc.asc_CDefName( dN[newN].Name, dN[newN].Ref, null );
}
}
if( retRes ){
History.Create_NewPoint();
History.Add(g_oUndoRedoWorkbook, historyitem_Workbook_DefinedNamesAdd, null, null, new g_oUndoRedoData_DefinedNamesChangeProperties(oldName, newName));
History.Add(g_oUndoRedoWorkbook, historyitem_Workbook_DefinedNamesAdd, null, null, new UndoRedoData_DefinedNamesChange(oldName, newName));
/*
* #1. поменяли название - перестроили формулу. нужно вызвать пересборку формул в ячейках, в которыйх есть эта именованная ссылка.
......@@ -2240,28 +2271,31 @@ Workbook.prototype.editDefinesNames = function ( oldName, newName ) {
* #2. поменяли диапазон. нужно перестроить граф зависимосте и пересчитать формулу. находим диапазон; меняем в нем ссылку; разбираем ссылку;
* удаляем старые master и добавляем новые, которые получились в результате разбора новой ссылки; пересчитываем формулу.
* */
var defNameID = getDefNameVertexId(_tmp[0], _tmp[1]);
var n = this.dependencyFormulas.getDefNameNode( defNameID );
var nSE = n.getSlaveEdges(), se;
n.deleteAllMasterEdges();
if(_tmp){
var defNameID = getDefNameVertexId(_tmp[0], _tmp[1]);
var n = this.dependencyFormulas.getDefNameNode( defNameID );
var nSE = n.getSlaveEdges(), se;
n.deleteAllMasterEdges();
for( var id in nSE ){
se = nSE[id];
se.deleteMasterEdge(n);
for( var id in nSE ){
se = nSE[id];
se.deleteMasterEdge(n);
this.needRecalc.nodes[se.nodeId] = [se.sheetId, se.cellId ];
this.needRecalc.length++;
this.needRecalc.nodes[se.nodeId] = [se.sheetId, se.cellId ];
this.needRecalc.length++;
se = se.returnCell();
se ? function(){
se.setFormula(se.formulaParsed.assemble());
se.formulaParsed.buildDependencies(true);
}() : null;
se = se.returnCell();
se ? function(){
se.setFormula(se.formulaParsed.assemble());
se.formulaParsed.buildDependencies(true);
}() : null;
}
sortDependency(this);
}
sortDependency(this);
}
return retRes;
......@@ -4739,7 +4773,7 @@ Cell.prototype.setValue=function(val,callback, isCopyPaste){
oldFP = this.formulaParsed;
var cellId = g_oCellAddressUtils.getCellId(this.nRow, this.nCol);
this.formulaParsed = new parserFormula(val.substring(1),cellId,this.ws);
if( !this.formulaParsed.parse(true) ){
if( !this.formulaParsed.parse(true,true) ){
switch( this.formulaParsed.error[this.formulaParsed.error.length-1] ){
case c_oAscError.ID.FrmlWrongFunctionName:
break;
......
......@@ -3018,7 +3018,7 @@ CCellValue.prototype =
var oValueArray = null;
var xfs = cell.getCompiledStyle();
if(cell.sFormula)
oValueText = "="+cell.formulaParsed.assembleLocale(cFormulaFunctionToLocale); // ToDo если будет притормаживать, то завести переменную и не рассчитывать каждый раз!
oValueText = "="+cell.formulaParsed.assembleLocale(cFormulaFunctionToLocale,true); // ToDo если будет притормаживать, то завести переменную и не рассчитывать каждый раз!
else
{
if(null != this.text || null != this.number)
......
......@@ -1951,8 +1951,13 @@
WorkbookView.prototype.editDefinedNames = function (oldName, newName) {
//ToDo проверка defName.ref на знак "=" в начале ссылки. знака нет тогда это либо число либо строка, так делает Excel.
this.handlers.trigger("asc_onEditDefName", this.model.editDefinesNames(oldName, newName));
var res = this.model.editDefinesNames(oldName, newName);
if( oldName ){
this.handlers.trigger("asc_onEditDefName", res);
}
else{
this.handlers.trigger("asc_onDefName", res);
}
};
......
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