Commit 8477f079 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Добавил замену во всей книге

Поправил поиск во всей книге, если на листе не нашлось значение

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@55541 954022d7-b5bf-4e40-9824-e11837661b57
parent 2606e183
...@@ -1263,6 +1263,9 @@ ...@@ -1263,6 +1263,9 @@
this.indexInArray = 0; this.indexInArray = 0;
this.countFind = 0; this.countFind = 0;
this.countReplace = 0; this.countReplace = 0;
this.countFindAll = 0;
this.countReplaceAll = 0;
this.sheetIndex = -1;
} }
asc_CFindOptions.prototype.clone = function () { asc_CFindOptions.prototype.clone = function () {
var result = new asc_CFindOptions(); var result = new asc_CFindOptions();
...@@ -1281,6 +1284,9 @@ ...@@ -1281,6 +1284,9 @@
result.indexInArray = this.indexInArray; result.indexInArray = this.indexInArray;
result.countFind = this.countFind; result.countFind = this.countFind;
result.countReplace = this.countReplace; result.countReplace = this.countReplace;
result.countFindAll = this.countFindAll;
result.countReplaceAll = this.countReplaceAll;
result.sheetIndex = this.sheetIndex;
return result; return result;
}; };
asc_CFindOptions.prototype.isEqual = function (obj) { asc_CFindOptions.prototype.isEqual = function (obj) {
...@@ -1289,6 +1295,10 @@ ...@@ -1289,6 +1295,10 @@
this.isWholeCell === obj.isWholeCell && this.scanOnOnlySheet === obj.scanOnOnlySheet && this.isWholeCell === obj.isWholeCell && this.scanOnOnlySheet === obj.scanOnOnlySheet &&
this.lookIn === obj.lookIn; this.lookIn === obj.lookIn;
}; };
asc_CFindOptions.prototype.updateFindAll = function () {
this.countFindAll += this.countFind;
this.countReplaceAll += this.countReplace;
};
/* /*
* Export * Export
......
...@@ -103,6 +103,7 @@ ...@@ -103,6 +103,7 @@
this.lastFindOptions = null; // Последний поиск (параметры) this.lastFindOptions = null; // Последний поиск (параметры)
this.lastFindResults = {}; // Результаты поиска (для поиска по всей книге, чтобы перейти на другой лист) this.lastFindResults = {}; // Результаты поиска (для поиска по всей книге, чтобы перейти на другой лист)
this.fReplaceCallback = null; // Callback для замены текста
this._lockDraw = false; this._lockDraw = false;
...@@ -464,6 +465,8 @@ ...@@ -464,6 +465,8 @@
this.formulasList = getFormulasInfo(); this.formulasList = getFormulasInfo();
this.fReplaceCallback = function () {self._replaceCellTextCallback.apply(self, arguments);};
if (this.Api.isMobileVersion){ if (this.Api.isMobileVersion){
this.MobileTouchManager = new CMobileTouchManager(); this.MobileTouchManager = new CMobileTouchManager();
this.MobileTouchManager.Init(this); this.MobileTouchManager.Init(this);
...@@ -1627,56 +1630,59 @@ ...@@ -1627,56 +1630,59 @@
if (ws.getCellEditMode()) if (ws.getCellEditMode())
this._onStopCellEditing(); this._onStopCellEditing();
var result = ws.findCellText(options); var result = ws.findCellText(options);
if (result) { if (false === options.scanOnOnlySheet) {
if (false === options.scanOnOnlySheet) { // Поиск по всей книге
// Поиск по всей книге var key = result ? (result.c1 + "-" + result.r1) : null;
var key = result.c1 + "-" + result.r1; if (null === key || options.isEqual(this.lastFindOptions)) {
if (options.isEqual(this.lastFindOptions)) { if (null === key || this.lastFindResults[key]) {
if (this.lastFindResults[key]) { // Мы уже находили данную ячейку, попробуем на другом листе
// Мы уже находили данную ячейку, попробуем на другом листе var i, active = this.model.getActive(), start = 0, end = this.model.getWorksheetCount();
var i, active = this.model.getActive(), start = 0, end = this.model.getWorksheetCount(); var inc = options.scanForward ? +1 : -1;
var inc = options.scanForward ? +1 : -1; var tmpWs, tmpResult = null;
var tmpWs, tmpResult = null; for (i = active + inc; i < end && i >= start; i += inc) {
for (i = active + inc; i < end && i >= start; i += inc) { tmpWs = this.getWorksheet(i);
tmpResult = tmpWs.findCellText(options);
if (tmpResult)
break;
}
if (!tmpResult) {
// Мы дошли до конца или начала (в зависимости от направления, теперь пойдем до активного)
if (options.scanForward) {
i = 0; end = active;
} else {
i = end - 1;
start = active + 1;
}
inc *= -1;
for (; i < end && i >= start; i += inc) {
tmpWs = this.getWorksheet(i); tmpWs = this.getWorksheet(i);
tmpResult = tmpWs.findCellText(options); tmpResult = tmpWs.findCellText(options);
if (tmpResult) if (tmpResult)
break; break;
} }
if (!tmpResult) { }
// Мы дошли до конца или начала (в зависимости от направления, теперь пойдем до активного)
if (options.scanForward) {
i = 0; end = active;
} else {
i = end - 1;
start = active + 1;
}
inc *= -1;
for (; i < end && i >= start; i += inc) {
tmpWs = this.getWorksheet(i);
tmpResult = tmpWs.findCellText(options);
if (tmpResult)
break;
}
}
if (tmpResult) {
ws = tmpWs;
result = tmpResult;
this.showWorksheet(i);
key = result.c1 + "-" + result.r1;
}
this.lastFindResults = {}; if (tmpResult) {
ws = tmpWs;
result = tmpResult;
this.showWorksheet(i);
// Посылаем эвент о смене активного листа
this.handlers.trigger ("asc_onActiveSheetChanged", i);
key = result.c1 + "-" + result.r1;
} }
this.lastFindResults = {};
} }
}
if (null !== key) {
this.lastFindOptions = options.clone(); this.lastFindOptions = options.clone();
this.lastFindResults[key] = true; this.lastFindResults[key] = true;
} else }
this._cleanFindResults(); }
if (result)
return ws._setActiveCell(result.c1, result.r1); return ws._setActiveCell(result.c1, result.r1);
} else this._cleanFindResults();
this._cleanFindResults();
return null; return null;
}; };
...@@ -1686,7 +1692,41 @@ ...@@ -1686,7 +1692,41 @@
// Останавливаем ввод данных в редакторе ввода // Останавливаем ввод данных в редакторе ввода
if (ws.getCellEditMode()) if (ws.getCellEditMode())
this._onStopCellEditing(); this._onStopCellEditing();
ws.replaceCellText(options);
History.Create_NewPoint();
History.StartTransaction();
if (options.isReplaceAll) {
// На ReplaceAll ставим медленную операцию
this.handlers.trigger("asc_onStartAction", c_oAscAsyncActionType.BlockInteraction,
c_oAscAsyncAction.SlowOperation);
}
ws.replaceCellText(options, false, this.fReplaceCallback);
};
WorkbookView.prototype._replaceCellTextCallback = function (options) {
options.updateFindAll();
if (!options.scanOnOnlySheet && options.isReplaceAll) {
// Замена на всей книге
var i = ++options.sheetIndex;
if (this.model.getActive() === i)
i = ++options.sheetIndex;
if (i < this.model.getWorksheetCount()) {
var ws = this.getWorksheet(i);
ws.replaceCellText(options, true, this.fReplaceCallback);
return;
}
}
this.handlers.trigger("asc_onRenameCellTextEnd", options.countFindAll, options.countReplaceAll);
History.EndTransaction();
if (options.isReplaceAll) {
// Заканчиваем медленную операцию
this.handlers.trigger("asc_onEndAction", c_oAscAsyncActionType.BlockInteraction,
c_oAscAsyncAction.SlowOperation);
}
}; };
// Поиск ячейки по ссылке // Поиск ячейки по ссылке
......
...@@ -9768,19 +9768,20 @@ ...@@ -9768,19 +9768,20 @@
return null; return null;
}; };
WorksheetView.prototype.replaceCellText = function (options) { WorksheetView.prototype.replaceCellText = function (options, lockDraw, callback) {
// Очищаем результаты
options.countFind = 0;
options.countReplace = 0;
var t = this; var t = this;
var ar = this.activeRange.clone(); var ar = this.activeRange.clone();
var aReplaceCells = []; var aReplaceCells = [];
if (options.isReplaceAll) { if (options.isReplaceAll) {
// На ReplaceAll ставим медленную операцию
t.handlers.trigger("slowOperation", true);
var aReplaceCellsIndex = {}; var aReplaceCellsIndex = {};
var optionsFind = options.clone(); options.activeRange = ar;
optionsFind.activeRange = ar;
var findResult, index; var findResult, index;
while (true) { while (true) {
findResult = t.findCellText(optionsFind); findResult = t.findCellText(options);
if (null === findResult) if (null === findResult)
break; break;
index = findResult.c1 + '-' + findResult.r1; index = findResult.c1 + '-' + findResult.r1;
...@@ -9794,22 +9795,19 @@ ...@@ -9794,22 +9795,19 @@
} else { } else {
// Попробуем сначала найти // Попробуем сначала найти
var isEqual = this._isCellEqual(ar.startCol, ar.startRow, options); var isEqual = this._isCellEqual(ar.startCol, ar.startRow, options);
if (false !== isEqual) { if (null === isEqual)
t.handlers.trigger("onRenameCellTextEnd", 0, 0); return callback(options);
return;
}
aReplaceCells.push(isEqual); aReplaceCells.push(isEqual);
} }
if (0 > aReplaceCells.length) { if (0 > aReplaceCells.length)
t.handlers.trigger("onRenameCellTextEnd", 0, 0); return callback(options);
return;
} return this._replaceCellsText(aReplaceCells, options, lockDraw, callback);
this._replaceCellsText(aReplaceCells, options);
}; };
WorksheetView.prototype._replaceCellsText = function (aReplaceCells, options) { WorksheetView.prototype._replaceCellsText = function (aReplaceCells, options, lockDraw, callback) {
var findFlags = "g"; // Заменяем все вхождения var findFlags = "g"; // Заменяем все вхождения
if (true !== options.isMatchCase) if (true !== options.isMatchCase)
findFlags += "i"; // Не чувствителен к регистру findFlags += "i"; // Не чувствителен к регистру
...@@ -9825,27 +9823,17 @@ ...@@ -9825,27 +9823,17 @@
.replace( /(~\*)/g, "\\*" ).replace( /(~\?)/g, "\\?" ); .replace( /(~\*)/g, "\\*" ).replace( /(~\?)/g, "\\?" );
valueForSearching = new RegExp(valueForSearching, findFlags); valueForSearching = new RegExp(valueForSearching, findFlags);
History.Create_NewPoint();
History.StartTransaction();
options.indexInArray = 0; options.indexInArray = 0;
options.countFind = aReplaceCells.length; options.countFind = aReplaceCells.length;
options.countReplace = 0; options.countReplace = 0;
this._replaceCellText(aReplaceCells, valueForSearching, options); this._replaceCellText(aReplaceCells, valueForSearching, options, lockDraw, callback);
}; };
WorksheetView.prototype._replaceCellText = function (aReplaceCells, valueForSearching, options) { WorksheetView.prototype._replaceCellText = function (aReplaceCells, valueForSearching, options,
lockDraw, callback) {
var t = this; var t = this;
if (options.indexInArray >= aReplaceCells.length) { if (options.indexInArray >= aReplaceCells.length)
History.EndTransaction(); return callback(options);
if (options.isReplaceAll) {
// Завершаем медленную операцию
t.handlers.trigger("slowOperation", false);
}
t.handlers.trigger("onRenameCellTextEnd", options.countFind, options.countReplace);
return;
}
var onReplaceCallback = function (isSuccess) { var onReplaceCallback = function (isSuccess) {
var cell = aReplaceCells[options.indexInArray]; var cell = aReplaceCells[options.indexInArray];
...@@ -9869,15 +9857,18 @@ ...@@ -9869,15 +9857,18 @@
newValue = []; newValue = [];
newValue[0] = new Fragment({text: cellValue, format: v[0].format.clone()}); newValue[0] = new Fragment({text: cellValue, format: v[0].format.clone()});
// ToDo для неактивных листов не делать отрисовку
t._saveCellValueAfterEdit(oCellEdit, c, newValue, /*flags*/undefined, /*skipNLCheck*/false, t._saveCellValueAfterEdit(oCellEdit, c, newValue, /*flags*/undefined, /*skipNLCheck*/false,
/*isNotHistory*/true); /*isNotHistory*/true, lockDraw);
} }
} }
window.setTimeout(function () {t._replaceCellText(aReplaceCells, valueForSearching, options)}, 1); window.setTimeout(function () {
t._replaceCellText(aReplaceCells, valueForSearching, options, lockDraw, callback);
}, 1);
}; };
this._isLockedCells (aReplaceCells[options.indexInArray], /*subType*/null, onReplaceCallback); return this._isLockedCells (aReplaceCells[options.indexInArray], /*subType*/null, onReplaceCallback);
}; };
WorksheetView.prototype.findCell = function (reference) { WorksheetView.prototype.findCell = function (reference) {
...@@ -10056,7 +10047,8 @@ ...@@ -10056,7 +10047,8 @@
return mergedRange ? mergedRange : asc_Range(col, row, col, row); return mergedRange ? mergedRange : asc_Range(col, row, col, row);
}; };
WorksheetView.prototype._saveCellValueAfterEdit = function (oCellEdit, c, val, flags, skipNLCheck, isNotHistory) { WorksheetView.prototype._saveCellValueAfterEdit = function (oCellEdit, c, val, flags, skipNLCheck,
isNotHistory, lockDraw) {
var t = this; var t = this;
var oldMode = t.isFormulaEditMode; var oldMode = t.isFormulaEditMode;
t.isFormulaEditMode = false; t.isFormulaEditMode = false;
...@@ -10100,7 +10092,7 @@ ...@@ -10100,7 +10092,7 @@
c.setWrap(true); c.setWrap(true);
// Для формулы обновление будет в коде рассчета формулы // Для формулы обновление будет в коде рассчета формулы
t._updateCellsRange(oCellEdit, /*canChangeColWidth*/c_oAscCanChangeColWidth.numbers); t._updateCellsRange(oCellEdit, /*canChangeColWidth*/c_oAscCanChangeColWidth.numbers, lockDraw);
} }
if (!isNotHistory) { if (!isNotHistory) {
...@@ -10280,7 +10272,8 @@ ...@@ -10280,7 +10272,8 @@
autoCompleteLC: arrAutoCompleteLC, autoCompleteLC: arrAutoCompleteLC,
saveValueCallback: function (val, flags, skipNLCheck) { saveValueCallback: function (val, flags, skipNLCheck) {
var oCellEdit = isMerged ? new asc_Range(mc.c1, mc.r1, mc.c1, mc.r1) : new asc_Range(col, row, col, row); var oCellEdit = isMerged ? new asc_Range(mc.c1, mc.r1, mc.c1, mc.r1) : new asc_Range(col, row, col, row);
return t._saveCellValueAfterEdit(oCellEdit, c, val, flags, skipNLCheck, /*isNotHistory*/false); return t._saveCellValueAfterEdit(oCellEdit, c, val, flags,
skipNLCheck, /*isNotHistory*/false, /*lockDraw*/false);
} }
}); });
return true; return true;
......
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