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

fix bug 32665

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