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"; ...@@ -2113,7 +2113,8 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
}; };
spreadsheet_api.prototype.asc_setDefinedNames = function (defName) { 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) { spreadsheet_api.prototype.asc_editDefinedNames = function (oldName, newName) {
......
This diff is collapsed.
...@@ -2856,11 +2856,16 @@ UndoRedoWorkbook.prototype = { ...@@ -2856,11 +2856,16 @@ UndoRedoWorkbook.prototype = {
} }
else if(historyitem_Workbook_DefinedNamesAdd === Type ){ else if(historyitem_Workbook_DefinedNamesAdd === Type ){
if(bUndo){ if(bUndo){
this.wb.delDefinesNames( Data ); this.wb.delDefinesNames( Data.newName );
} }
else{ else{
this.wb.setDefinesNames( Data ); this.wb.setDefinesNames( Data.newName );
} }
/*TODO
* Ввели формулу в которой есть именованный диапазон, но ИД нет в списке ИД. Результат формулы #NAME!.
* Создаем ИД с таким же именем, что и в функции. Необходимо пересчитать функцию. Предварительно перестроив
* граф зависимостей.
* */
} }
else if(historyitem_Workbook_DefinedNamesChange === Type ){ else if(historyitem_Workbook_DefinedNamesChange === Type ){
var oldName, newName; var oldName, newName;
......
...@@ -2176,16 +2176,16 @@ Workbook.prototype.delDefinesNames = function ( defName ) { ...@@ -2176,16 +2176,16 @@ Workbook.prototype.delDefinesNames = function ( defName ) {
} }
Workbook.prototype.editDefinesNames = function ( oldName, newName ) { Workbook.prototype.editDefinesNames = function ( oldName, newName ) {
var oldN = oldName.Name.toLowerCase(), var oldN, newN = newName.Name.toLowerCase(), retRes = null, _tmp,
newN = newName.Name.toLowerCase(), dN = this.DefinedNames || {};
retRes = null, _tmp;
var rxTest = rx_defName.test( newN ); if ( !rx_defName.test( newN ) ) {
if ( !rxTest ) {
return retRes; return retRes;
} }
var dN = this.DefinedNames || {}; if(oldName){
oldN = oldName.Name.toLowerCase();
if ( null != oldName.Scope ) { if ( null != oldName.Scope ) {
var ws = this.getWorksheetByName( oldName.Scope ); var ws = this.getWorksheetByName( oldName.Scope );
if ( ws ) { if ( ws ) {
...@@ -2229,10 +2229,41 @@ Workbook.prototype.editDefinesNames = function ( oldName, newName ) { ...@@ -2229,10 +2229,41 @@ Workbook.prototype.editDefinesNames = function ( oldName, newName ) {
} }
} }
}
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 ){ if( retRes ){
History.Create_NewPoint(); 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. поменяли название - перестроили формулу. нужно вызвать пересборку формул в ячейках, в которыйх есть эта именованная ссылка. * #1. поменяли название - перестроили формулу. нужно вызвать пересборку формул в ячейках, в которыйх есть эта именованная ссылка.
...@@ -2240,6 +2271,8 @@ Workbook.prototype.editDefinesNames = function ( oldName, newName ) { ...@@ -2240,6 +2271,8 @@ Workbook.prototype.editDefinesNames = function ( oldName, newName ) {
* #2. поменяли диапазон. нужно перестроить граф зависимосте и пересчитать формулу. находим диапазон; меняем в нем ссылку; разбираем ссылку; * #2. поменяли диапазон. нужно перестроить граф зависимосте и пересчитать формулу. находим диапазон; меняем в нем ссылку; разбираем ссылку;
* удаляем старые master и добавляем новые, которые получились в результате разбора новой ссылки; пересчитываем формулу. * удаляем старые master и добавляем новые, которые получились в результате разбора новой ссылки; пересчитываем формулу.
* */ * */
if(_tmp){
var defNameID = getDefNameVertexId(_tmp[0], _tmp[1]); var defNameID = getDefNameVertexId(_tmp[0], _tmp[1]);
var n = this.dependencyFormulas.getDefNameNode( defNameID ); var n = this.dependencyFormulas.getDefNameNode( defNameID );
var nSE = n.getSlaveEdges(), se; var nSE = n.getSlaveEdges(), se;
...@@ -2263,6 +2296,7 @@ Workbook.prototype.editDefinesNames = function ( oldName, newName ) { ...@@ -2263,6 +2296,7 @@ Workbook.prototype.editDefinesNames = function ( oldName, newName ) {
sortDependency(this); sortDependency(this);
} }
}
return retRes; return retRes;
...@@ -4739,7 +4773,7 @@ Cell.prototype.setValue=function(val,callback, isCopyPaste){ ...@@ -4739,7 +4773,7 @@ Cell.prototype.setValue=function(val,callback, isCopyPaste){
oldFP = this.formulaParsed; oldFP = this.formulaParsed;
var cellId = g_oCellAddressUtils.getCellId(this.nRow, this.nCol); var cellId = g_oCellAddressUtils.getCellId(this.nRow, this.nCol);
this.formulaParsed = new parserFormula(val.substring(1),cellId,this.ws); 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] ){ switch( this.formulaParsed.error[this.formulaParsed.error.length-1] ){
case c_oAscError.ID.FrmlWrongFunctionName: case c_oAscError.ID.FrmlWrongFunctionName:
break; break;
......
...@@ -3018,7 +3018,7 @@ CCellValue.prototype = ...@@ -3018,7 +3018,7 @@ CCellValue.prototype =
var oValueArray = null; var oValueArray = null;
var xfs = cell.getCompiledStyle(); var xfs = cell.getCompiledStyle();
if(cell.sFormula) if(cell.sFormula)
oValueText = "="+cell.formulaParsed.assembleLocale(cFormulaFunctionToLocale); // ToDo если будет притормаживать, то завести переменную и не рассчитывать каждый раз! oValueText = "="+cell.formulaParsed.assembleLocale(cFormulaFunctionToLocale,true); // ToDo если будет притормаживать, то завести переменную и не рассчитывать каждый раз!
else else
{ {
if(null != this.text || null != this.number) if(null != this.text || null != this.number)
......
...@@ -1951,8 +1951,13 @@ ...@@ -1951,8 +1951,13 @@
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);
this.handlers.trigger("asc_onEditDefName", 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