Commit a69b562c authored by Alexander.Trofimov's avatar Alexander.Trofimov

fix bug 32665

parent 50e00852
...@@ -1994,12 +1994,15 @@ var editor; ...@@ -1994,12 +1994,15 @@ var editor;
* Делает активной указанную ячейку * Делает активной указанную ячейку
* @param {String} reference Ссылка на ячейку вида A1 или R1C1 * @param {String} reference Ссылка на ячейку вида A1 или R1C1
*/ */
spreadsheet_api.prototype.asc_findCell = function(reference) { spreadsheet_api.prototype.asc_findCell = function (reference) {
if(this.wb.cellEditor.isOpened) return; if (this.wb.cellEditor.isOpened) {
return;
}
var d = this.wb.findCell(reference); var d = this.wb.findCell(reference);
if (!d) { if (!d) {
this.handlers.trigger("asc_onError", c_oAscError.ID.InvalidReferenceOrName, c_oAscError.Level.NoCritical); if (!this.isViewMode) {
this.handlers.trigger("asc_onError", c_oAscError.ID.InvalidReferenceOrName, c_oAscError.Level.NoCritical);
}
return; return;
} }
......
...@@ -2247,14 +2247,13 @@ ...@@ -2247,14 +2247,13 @@
// Поиск ячейки по ссылке // Поиск ячейки по ссылке
WorkbookView.prototype.findCell = function(reference) { WorkbookView.prototype.findCell = function(reference) {
var ws = this.getWorksheet(), retRange; var ws = this.getWorksheet();
// Останавливаем ввод данных в редакторе ввода // Останавливаем ввод данных в редакторе ввода
if (ws.getCellEditMode()) { if (ws.getCellEditMode()) {
this._onStopCellEditing(); this._onStopCellEditing();
} }
return ws.findCell(reference, this.controller.settings.isViewerMode);
return ws.findCell(reference);
}; };
WorkbookView.prototype.getDefinedNames = function(defNameListId) { WorkbookView.prototype.getDefinedNames = function(defNameListId) {
......
...@@ -11074,65 +11074,74 @@ ...@@ -11074,65 +11074,74 @@
return oneUser ? onReplaceCallback( true ) : this._isLockedCells( aReplaceCells[options.indexInArray], /*subType*/null, onReplaceCallback ); return oneUser ? onReplaceCallback( true ) : this._isLockedCells( aReplaceCells[options.indexInArray], /*subType*/null, onReplaceCallback );
}; };
WorksheetView.prototype.findCell = function ( reference ) { WorksheetView.prototype.findCell = function (reference, isViewerMode) {
var range = AscCommonExcel.g_oRangeCache.getRange3D(reference) || AscCommonExcel.g_oRangeCache.getAscRange(reference); var range = AscCommonExcel.g_oRangeCache.getRange3D(reference) ||
if ( !range ) { AscCommonExcel.g_oRangeCache.getAscRange(reference);
/*TODO: сделать поиск по названиям автофигур, должен искать до того как вызвать поиск по именованным диапазонам*/ if (!range) {
if (isViewerMode) {
return range;
}
var defName = this.model.workbook.getDefinesNames( reference, this.model.workbook.getActiveWs().getId() ), sheetName, ref; /*TODO: сделать поиск по названиям автофигур, должен искать до того как вызвать поиск по именованным диапазонам*/
if ( !defName ) { var defName = this.model.workbook.getDefinesNames(reference,
if ( this.collaborativeEditing.getGlobalLock() || !this.handlers.trigger( "getLockDefNameManagerStatus" ) ) { this.model.workbook.getActiveWs().getId()), sheetName, ref;
this.handlers.trigger( "onErrorEvent", c_oAscError.ID.LockCreateDefName, c_oAscError.Level.NoCritical ); if (!defName) {
if (this.collaborativeEditing.getGlobalLock() ||
!this.handlers.trigger("getLockDefNameManagerStatus")) {
this.handlers.trigger("onErrorEvent", c_oAscError.ID.LockCreateDefName,
c_oAscError.Level.NoCritical);
this._updateSelectionNameAndInfo(); this._updateSelectionNameAndInfo();
return true; return true;
} }
var actRange = this.getActiveRangeObj(), ascRange, mc = this.model.getMergedByCell( actRange.startRow, actRange.startCol ), c1 = mc ? mc.c1 : actRange.c1, r1 = mc ? mc.r1 : actRange.r1, ar_norm = actRange.normalize(), mc_norm = mc ? mc.normalize() : null, c2 = mc_norm ? ( mc_norm.isEqual( ar_norm ) ? mc_norm.c1 : ar_norm.c2 ) : ar_norm.c2, r2 = mc_norm ? ( mc_norm.isEqual( ar_norm ) ? mc_norm.r1 : ar_norm.r2 ) : ar_norm.r2; var actRange = this.getActiveRangeObj(), ascRange, mc = this.model.getMergedByCell(actRange.startRow,
actRange.startCol), c1 = mc ? mc.c1 : actRange.c1, r1 = mc ? mc.r1 :
actRange.r1, ar_norm = actRange.normalize(), mc_norm = mc ? mc.normalize() : null, c2 = mc_norm ?
( mc_norm.isEqual(ar_norm) ? mc_norm.c1 : ar_norm.c2 ) : ar_norm.c2, r2 = mc_norm ?
( mc_norm.isEqual(ar_norm) ? mc_norm.r1 : ar_norm.r2 ) : ar_norm.r2;
ascRange = new asc_Range( c1, r1, c2, r2 ); ascRange = new asc_Range(c1, r1, c2, r2);
defName = this.model.workbook.editDefinesNames( null, new Asc.asc_CDefName( reference, this.model.getName() + "!" + ascRange.getAbsName() ) ); defName = this.model.workbook.editDefinesNames(null,
new Asc.asc_CDefName(reference, this.model.getName() + "!" + ascRange.getAbsName()));
} }
if ( defName ) { if (defName) {
range = true; range = true;
this._isLockedDefNames( null, defName.nodeId ); this._isLockedDefNames(null, defName.nodeId);
if ( defName.isTable ) { if (defName.isTable) {
sheetName = defName.Ref.split( "!" ); sheetName = defName.Ref.split("!");
ref = sheetName[1]; ref = sheetName[1];
sheetName = sheetName[0]; sheetName = sheetName[0];
if ( sheetName[0] == "'" && sheetName[sheetName.length - 1] == "'" ) { if (sheetName[0] == "'" && sheetName[sheetName.length - 1] == "'") {
sheetName = sheetName.substring( 1, sheetName.length - 1 ); sheetName = sheetName.substring(1, sheetName.length - 1);
} }
range = AscCommonExcel.g_oRangeCache.getAscRange( ref ); range = AscCommonExcel.g_oRangeCache.getAscRange(ref);
sheetName = this.model.workbook.getWorksheetByName( sheetName ); sheetName = this.model.workbook.getWorksheetByName(sheetName);
} } else if (defName.parsedRef.RefPos.length == 1 && defName.parsedRef.outStack.length == 1) {
else if ( defName.parsedRef.RefPos.length == 1 && defName.parsedRef.outStack.length == 1 ) {
ref = defName.parsedRef.outStack[0]; ref = defName.parsedRef.outStack[0];
if ( ref.type == AscCommonExcel.cElementType.cell3D ) { if (ref.type == AscCommonExcel.cElementType.cell3D) {
range = ref.range.getBBox0().clone( true ); range = ref.range.getBBox0().clone(true);
sheetName = ref.getWS(); sheetName = ref.getWS();
} } else if (ref.type == AscCommonExcel.cElementType.cellsRange3D && ref.wsFrom == ref.wsTo) {
else if ( ref.type == AscCommonExcel.cElementType.cellsRange3D && ref.wsFrom == ref.wsTo ) { range = ref.getRange()[0].getBBox0().clone(true);
range = ref.getRange()[0].getBBox0().clone( true ); sheetName = this.model.workbook.getWorksheetById(ref.wsFrom);
sheetName = this.model.workbook.getWorksheetById( ref.wsFrom );
} }
} }
if ( range && sheetName ) { if (range && sheetName) {
ar_norm = range.normalize(); ar_norm = range.normalize();
mc = sheetName.getMergedByCell( ar_norm.r1, ar_norm.c1 ); mc = sheetName.getMergedByCell(ar_norm.r1, ar_norm.c1);
range = {range: mc ? mc : range, sheet: sheetName.getName()}; range = {range: mc ? mc : range, sheet: sheetName.getName()};
} }
} }
} } else {
else { var ar_norm = range.normalize(), mc = this.model.getMergedByCell(ar_norm.r1, ar_norm.c1);
var ar_norm = range.normalize(), mc = this.model.getMergedByCell( ar_norm.r1, ar_norm.c1 );
range = {range: mc ? mc : range, sheet: this.model.getName()}; range = {range: mc ? mc : range, sheet: this.model.getName()};
} }
return range;// ? this.setSelection(range, true) : null; return range;
}; };
/* Ищет дополнение для ячейки */ /* Ищет дополнение для ячейки */
......
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