You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
737 lines
28 KiB
737 lines
28 KiB
import { replaceHtml, chatatABC } from '../utils/util';
|
|
import { getSheetIndex } from '../methods/get';
|
|
import { modelHTML, keycode } from './constant';
|
|
import { selectHightlightShow } from './select';
|
|
import sheetmanage from './sheetmanage';
|
|
import { isEditMode } from '../global/validate';
|
|
import { valueShowEs } from '../global/format';
|
|
import { setcellvalue } from '../global/setdata';
|
|
import { jfrefreshgrid } from '../global/refresh';
|
|
import editor from '../global/editor';
|
|
import tooltip from '../global/tooltip';
|
|
import func_methods from '../global/func_methods';
|
|
import Store from '../store';
|
|
import locale from '../locale/locale';
|
|
import {checkProtectionLocked} from './protection';
|
|
import escapeHtml from "escape-html";
|
|
|
|
//查找替换
|
|
const luckysheetSearchReplace = {
|
|
createDialog: function(source){
|
|
$("#luckysheet-modal-dialog-mask").hide();
|
|
$("#luckysheet-search-replace").remove();
|
|
|
|
const _locale = locale();
|
|
const locale_findAndReplace = _locale.findAndReplace;
|
|
const locale_button = _locale.button;
|
|
|
|
let content = '<div class="tabBox">' +
|
|
'<span id="searchTab">'+ locale_findAndReplace.find +'</span>' +
|
|
'<span id="replaceTab">'+ locale_findAndReplace.replace +'</span>' +
|
|
'</div>' +
|
|
'<div class="ctBox">' +
|
|
'<div class="inputBox">' +
|
|
'<div class="textboxs" id="searchInput">'+ locale_findAndReplace.findTextbox +':<input class="formulaInputFocus" spellcheck="false" value=""/></div>' +
|
|
'<div class="textboxs" id="replaceInput">'+ locale_findAndReplace.replaceTextbox +':<input class="formulaInputFocus" spellcheck="false" value=""/></div>' +
|
|
'<div class="checkboxs">' +
|
|
'<div id="regCheck">' +
|
|
'<input type="checkbox"/>' +
|
|
'<span>'+ locale_findAndReplace.regexTextbox +'</span>' +
|
|
'</div>' +
|
|
'<div id="wordCheck">' +
|
|
'<input type="checkbox"/>' +
|
|
'<span>'+ locale_findAndReplace.wholeTextbox +'</span>' +
|
|
'</div>' +
|
|
'<div id="caseCheck">' +
|
|
'<input type="checkbox"/>' +
|
|
'<span>'+ locale_findAndReplace.distinguishTextbox +'</span>' +
|
|
'</div>' +
|
|
'</div>' +
|
|
'</div>' +
|
|
'<div class="btnBox">' +
|
|
'<button id="replaceAllBtn" class="btn btn-default">'+ locale_findAndReplace.allReplaceBtn +'</button>' +
|
|
'<button id="replaceBtn" class="btn btn-default">'+ locale_findAndReplace.replaceBtn +'</button>' +
|
|
'<button id="searchAllBtn" class="btn btn-default">'+ locale_findAndReplace.allFindBtn +'</button>' +
|
|
'<button id="searchNextBtn" class="btn btn-default">'+ locale_findAndReplace.findBtn +'</button>' +
|
|
'</div>' +
|
|
'</div>';
|
|
|
|
$("body").first().append(replaceHtml(modelHTML, {
|
|
"id": "luckysheet-search-replace",
|
|
"addclass": "luckysheet-search-replace",
|
|
"title": "",
|
|
"content": content,
|
|
"botton": '<button class="btn btn-default luckysheet-model-close-btn">'+locale_button.close+'</button>',
|
|
"style": "z-index:100003",
|
|
"close":locale_button.close
|
|
}));
|
|
let $t = $("#luckysheet-search-replace").find(".luckysheet-modal-dialog-content").css("min-width", 500).end(),
|
|
myh = $t.outerHeight(),
|
|
myw = $t.outerWidth();
|
|
let winw = $(window).width(), winh = $(window).height();
|
|
let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop();
|
|
$("#luckysheet-search-replace").css({ "left": (winw + scrollLeft - myw) / 2, "top": (winh + scrollTop - myh) / 3 }).show();
|
|
|
|
if(source == "0"){
|
|
$("#luckysheet-search-replace #searchTab").addClass("on").siblings().removeClass("on");
|
|
$("#luckysheet-search-replace #replaceInput").hide();
|
|
$("#luckysheet-search-replace #replaceAllBtn").hide();
|
|
$("#luckysheet-search-replace #replaceBtn").hide();
|
|
}
|
|
else if(source == "1"){
|
|
$("#luckysheet-search-replace #replaceTab").addClass("on").siblings().removeClass("on");
|
|
$("#luckysheet-search-replace #replaceInput").show();
|
|
$("#luckysheet-search-replace #replaceAllBtn").show();
|
|
$("#luckysheet-search-replace #replaceBtn").show();
|
|
}
|
|
},
|
|
init: function(){
|
|
let _this = this;
|
|
|
|
//查找替换 切换
|
|
$(document).off("click.SRtabBoxspan").on("click.SRtabBoxspan", "#luckysheet-search-replace .tabBox span", function(){
|
|
$(this).addClass("on").siblings().removeClass("on");
|
|
|
|
let $id = $(this).attr("id");
|
|
if($id == "searchTab"){
|
|
$("#luckysheet-search-replace #replaceInput").hide();
|
|
$("#luckysheet-search-replace #replaceAllBtn").hide();
|
|
$("#luckysheet-search-replace #replaceBtn").hide();
|
|
|
|
$("#luckysheet-search-replace #searchInput input").focus();
|
|
}
|
|
else if($id == "replaceTab"){
|
|
$("#luckysheet-search-replace #replaceInput").show();
|
|
$("#luckysheet-search-replace #replaceAllBtn").show();
|
|
$("#luckysheet-search-replace #replaceBtn").show();
|
|
|
|
$("#luckysheet-search-replace #replaceInput input").focus();
|
|
}
|
|
});
|
|
|
|
//查找下一个
|
|
$(document).off("keyup.SRsearchInput").on("keyup.SRsearchInput", "#luckysheet-search-replace #searchInput input", function(event){
|
|
let kcode = event.keyCode;
|
|
if(kcode == keycode.ENTER){
|
|
_this.searchNext();
|
|
}
|
|
});
|
|
$(document).off("click.SRsearchNextBtn").on("click.SRsearchNextBtn", "#luckysheet-search-replace #searchNextBtn", function(){
|
|
_this.searchNext();
|
|
});
|
|
|
|
//查找全部
|
|
$(document).off("click.SRsearchAllBtn").on("click.SRsearchAllBtn", "#luckysheet-search-replace #searchAllBtn", function(){
|
|
_this.searchAll();
|
|
});
|
|
$(document).off("click.SRsearchAllboxItem").on("click.SRsearchAllboxItem", "#luckysheet-search-replace #searchAllbox .boxItem", function(){
|
|
$(this).addClass("on").siblings().removeClass("on");
|
|
|
|
let r = $(this).attr("data-row");
|
|
let c = $(this).attr("data-col");
|
|
let sheetIndex = $(this).attr("data-sheetIndex");
|
|
|
|
if(sheetIndex != Store.currentSheetIndex){
|
|
sheetmanage.changeSheetExec(sheetIndex);
|
|
}
|
|
|
|
Store.luckysheet_select_save = [
|
|
{ "row": [r, r], "column": [c, c] }
|
|
];
|
|
|
|
selectHightlightShow();
|
|
|
|
let scrollLeft = $("#luckysheet-cell-main").scrollLeft(),
|
|
scrollTop = $("#luckysheet-cell-main").scrollTop();
|
|
let winH = $("#luckysheet-cell-main").height(),
|
|
winW = $("#luckysheet-cell-main").width();
|
|
|
|
let row = Store.visibledatarow[r],
|
|
row_pre = r - 1 == -1 ? 0 : Store.visibledatarow[r - 1];
|
|
let col = Store.visibledatacolumn[c],
|
|
col_pre = c - 1 == -1 ? 0 : Store.visibledatacolumn[c - 1];
|
|
|
|
if (col - scrollLeft - winW + 20 > 0) {
|
|
$("#luckysheet-scrollbar-x").scrollLeft(col - winW + 20);
|
|
}
|
|
else if (col_pre - scrollLeft - 20 < 0) {
|
|
$("#luckysheet-scrollbar-x").scrollLeft(col_pre - 20);
|
|
}
|
|
|
|
if (row - scrollTop - winH + 20 > 0) {
|
|
$("#luckysheet-scrollbar-y").scrollTop(row - winH + 20);
|
|
}
|
|
else if (row_pre - scrollTop - 20 < 0) {
|
|
$("#luckysheet-scrollbar-y").scrollTop(row_pre - 20);
|
|
}
|
|
});
|
|
|
|
//替换
|
|
$(document).off("click.SRreplaceBtn").on("click.SRreplaceBtn", "#luckysheet-search-replace #replaceBtn", function(){
|
|
_this.replace();
|
|
});
|
|
|
|
//全部替换
|
|
$(document).off("click.SRreplaceAllBtn").on("click.SRreplaceAllBtn", "#luckysheet-search-replace #replaceAllBtn", function(){
|
|
_this.replaceAll();
|
|
});
|
|
},
|
|
searchNext: function(){
|
|
let _this = this;
|
|
|
|
let searchText = $("#luckysheet-search-replace #searchInput input").val();
|
|
if(searchText == "" || searchText == null){
|
|
return;
|
|
}
|
|
const _locale = locale();
|
|
const locale_findAndReplace = _locale.findAndReplace;
|
|
let range;
|
|
if(Store.luckysheet_select_save.length == 0 || (Store.luckysheet_select_save.length == 1 && Store.luckysheet_select_save[0].row[0] == Store.luckysheet_select_save[0].row[1] && Store.luckysheet_select_save[0].column[0] == Store.luckysheet_select_save[0].column[1])){
|
|
range = [{
|
|
"row": [0, Store.flowdata.length - 1],
|
|
"column": [0, Store.flowdata[0].length - 1]
|
|
}];
|
|
}
|
|
else{
|
|
range = $.extend(true, [], Store.luckysheet_select_save);
|
|
}
|
|
|
|
let searchIndexArr = _this.getSearchIndexArr(searchText, range);
|
|
|
|
if(searchIndexArr.length == 0){
|
|
if(isEditMode()){
|
|
alert(locale_findAndReplace.noFindTip);
|
|
}
|
|
else{
|
|
tooltip.info(locale_findAndReplace.noFindTip, "");
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
let count = 0;
|
|
|
|
if(Store.luckysheet_select_save.length == 0 || (Store.luckysheet_select_save.length == 1 && Store.luckysheet_select_save[0].row[0] == Store.luckysheet_select_save[0].row[1] && Store.luckysheet_select_save[0].column[0] == Store.luckysheet_select_save[0].column[1])){
|
|
if(Store.luckysheet_select_save.length == 0){
|
|
count = 0;
|
|
}
|
|
else{
|
|
for(let i = 0; i < searchIndexArr.length; i++){
|
|
if(searchIndexArr[i].r == Store.luckysheet_select_save[0].row[0] && searchIndexArr[i].c == Store.luckysheet_select_save[0].column[0]){
|
|
if(i == searchIndexArr.length - 1){
|
|
count = 0;
|
|
}
|
|
else{
|
|
count = i + 1;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
Store.luckysheet_select_save = [{
|
|
"row": [searchIndexArr[count].r, searchIndexArr[count].r],
|
|
"column": [searchIndexArr[count].c, searchIndexArr[count].c]
|
|
}];
|
|
}
|
|
else{
|
|
let rf = range[range.length - 1].row_focus;
|
|
let cf = range[range.length - 1].column_focus;
|
|
|
|
for(let i = 0; i < searchIndexArr.length; i++){
|
|
if(searchIndexArr[i].r == rf && searchIndexArr[i].c == cf){
|
|
if(i == searchIndexArr.length - 1){
|
|
count = 0;
|
|
}
|
|
else{
|
|
count = i + 1;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
for(let s = 0; s < range.length; s++){
|
|
let r1 = range[s].row[0], r2 = range[s].row[1];
|
|
let c1 = range[s].column[0], c2 = range[s].column[1];
|
|
|
|
if(searchIndexArr[count].r >= r1 && searchIndexArr[count].r <= r2 && searchIndexArr[count].c >= c1 && searchIndexArr[count].c <= c2){
|
|
let obj = range[s];
|
|
obj["row_focus"] = searchIndexArr[count].r;
|
|
obj["column_focus"] = searchIndexArr[count].c;
|
|
range.splice(s, 1);
|
|
range.push(obj);
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
Store.luckysheet_select_save = range;
|
|
}
|
|
|
|
selectHightlightShow();
|
|
|
|
let scrollLeft = $("#luckysheet-cell-main").scrollLeft(),
|
|
scrollTop = $("#luckysheet-cell-main").scrollTop();
|
|
let winH = $("#luckysheet-cell-main").height(),
|
|
winW = $("#luckysheet-cell-main").width();
|
|
|
|
let row = Store.visibledatarow[searchIndexArr[count].r],
|
|
row_pre = searchIndexArr[count].r - 1 == -1 ? 0 : Store.visibledatarow[searchIndexArr[count].r - 1];
|
|
let col = Store.visibledatacolumn[searchIndexArr[count].c],
|
|
col_pre = searchIndexArr[count].c - 1 == -1 ? 0 : Store.visibledatacolumn[searchIndexArr[count].c - 1];
|
|
|
|
if (col - scrollLeft - winW + 20 > 0) {
|
|
$("#luckysheet-scrollbar-x").scrollLeft(col - winW + 20);
|
|
}
|
|
else if (col_pre - scrollLeft - 20 < 0) {
|
|
$("#luckysheet-scrollbar-x").scrollLeft(col_pre - 20);
|
|
}
|
|
|
|
if (row - scrollTop - winH + 20 > 0) {
|
|
$("#luckysheet-scrollbar-y").scrollTop(row - winH + 20);
|
|
}
|
|
else if (row_pre - scrollTop - 20 < 0) {
|
|
$("#luckysheet-scrollbar-y").scrollTop(row_pre - 20);
|
|
}
|
|
|
|
if($("#searchAllbox").is(":visible")){
|
|
$("#luckysheet-search-replace #searchAllbox .boxItem").removeClass("on");
|
|
}
|
|
},
|
|
searchAll: function(){
|
|
let _this = this;
|
|
|
|
const _locale = locale();
|
|
const locale_findAndReplace = _locale.findAndReplace;
|
|
|
|
$("#luckysheet-search-replace #searchAllbox").remove();
|
|
|
|
let searchText = $("#luckysheet-search-replace #searchInput input").val();
|
|
if(searchText == "" || searchText == null){
|
|
return;
|
|
}
|
|
|
|
let range;
|
|
if(Store.luckysheet_select_save.length == 0 || (Store.luckysheet_select_save.length == 1 && Store.luckysheet_select_save[0].row[0] == Store.luckysheet_select_save[0].row[1] && Store.luckysheet_select_save[0].column[0] == Store.luckysheet_select_save[0].column[1])){
|
|
range = [{
|
|
"row": [0, Store.flowdata.length - 1],
|
|
"column": [0, Store.flowdata[0].length - 1]
|
|
}];
|
|
}
|
|
else{
|
|
range = $.extend(true, [], Store.luckysheet_select_save);
|
|
}
|
|
|
|
let searchIndexArr = _this.getSearchIndexArr(searchText, range);
|
|
|
|
if(searchIndexArr.length == 0){
|
|
if(isEditMode()){
|
|
alert(locale_findAndReplace.noFindTip);
|
|
}
|
|
else{
|
|
tooltip.info(locale_findAndReplace.noFindTip, "");
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
let searchAllHtml = '';
|
|
|
|
for(let i = 0; i < searchIndexArr.length; i++){
|
|
let value_ShowEs = valueShowEs(searchIndexArr[i].r, searchIndexArr[i].c, Store.flowdata).toString();
|
|
|
|
if(value_ShowEs.indexOf("</") > -1 && value_ShowEs.indexOf(">") > -1){
|
|
searchAllHtml += '<div class="boxItem" data-row="' + searchIndexArr[i].r + '" data-col="' + searchIndexArr[i].c + '" data-sheetIndex="' + Store.currentSheetIndex + '">' +
|
|
'<span>' + escapeHtml(Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].name) + '</span>' +
|
|
'<span>' + chatatABC(searchIndexArr[i].c) + (searchIndexArr[i].r + 1) + '</span>' +
|
|
'<span>' + escapeHtml(value_ShowEs) + '</span>' +
|
|
'</div>';
|
|
}
|
|
else{
|
|
searchAllHtml += '<div class="boxItem" data-row="' + searchIndexArr[i].r + '" data-col="' + searchIndexArr[i].c + '" data-sheetIndex="' + Store.currentSheetIndex + '">' +
|
|
'<span>' + Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)].name + '</span>' +
|
|
'<span>' + chatatABC(searchIndexArr[i].c) + (searchIndexArr[i].r + 1) + '</span>' +
|
|
'<span title="' + escapeHtml(value_ShowEs) + '">' + escapeHtml(value_ShowEs) + '</span>' +
|
|
'</div>';
|
|
}
|
|
}
|
|
|
|
$(`<div id="searchAllbox"><div class="boxTitle"><span>${locale_findAndReplace.searchTargetSheet}</span><span>${locale_findAndReplace.searchTargetCell}</span><span>${locale_findAndReplace.searchTargetValue}</span></div><div class="boxMain">${searchAllHtml}</div></div>`).appendTo($("#luckysheet-search-replace"));
|
|
|
|
$("#luckysheet-search-replace #searchAllbox .boxItem").eq(0).addClass("on").siblings().removeClass("on");
|
|
|
|
Store.luckysheet_select_save = [{
|
|
"row": [searchIndexArr[0].r, searchIndexArr[0].r],
|
|
"column": [searchIndexArr[0].c, searchIndexArr[0].c]
|
|
}];
|
|
|
|
selectHightlightShow();
|
|
},
|
|
getSearchIndexArr: function(searchText, range){
|
|
const arr = [];
|
|
const obj = {};
|
|
|
|
const $container = $("#luckysheet-search-replace");
|
|
const isChecked = (inputId) => $container.find(`#${inputId} input[type='checkbox']`).is(":checked");
|
|
|
|
//正则表达式匹配
|
|
const regCheck = isChecked("regCheck");
|
|
//整词匹配
|
|
const wordCheck = isChecked("wordCheck");
|
|
//区分大小写匹配
|
|
const caseCheck = isChecked("caseCheck");
|
|
|
|
let regExpFlags = "g";
|
|
if (!caseCheck) {
|
|
searchText = searchText.toLowerCase();
|
|
regExpFlags += "i";
|
|
}
|
|
|
|
const addResult = (r, c) => {
|
|
if(!((r + "_" + c) in obj)){
|
|
obj[r + "_" + c] = 0;
|
|
arr.push({"r": r, "c": c});
|
|
}
|
|
}
|
|
|
|
for(let s = 0; s < range.length; s++){
|
|
const r1 = range[s].row[0], r2 = range[s].row[1];
|
|
const c1 = range[s].column[0], c2 = range[s].column[1];
|
|
|
|
for(let r = r1; r <= r2; r++){
|
|
for(let c = c1; c <= c2; c++){
|
|
const cell = Store.flowdata[r][c];
|
|
|
|
if(cell != null){
|
|
let value = valueShowEs(r, c, Store.flowdata);
|
|
|
|
if(value == 0){
|
|
value = value.toString();
|
|
}
|
|
|
|
if(value != null && value != ""){
|
|
let wasFound = false;
|
|
value = value.toString();
|
|
value = caseCheck ? value : value.toLowerCase();
|
|
|
|
if(wordCheck){ //整词
|
|
wasFound = searchText == value;
|
|
}
|
|
else if(regCheck){ //正则表达式
|
|
let reg = new RegExp(func_methods.getRegExpStr(searchText), regExpFlags);
|
|
wasFound = reg.test(value);
|
|
}
|
|
else {
|
|
wasFound = ~value.indexOf(searchText);
|
|
}
|
|
|
|
wasFound && addResult(r, c);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return arr;
|
|
},
|
|
replace: function(){
|
|
let _this = this;
|
|
|
|
const _locale = locale();
|
|
const locale_findAndReplace = _locale.findAndReplace;
|
|
|
|
if(!Store.allowEdit){
|
|
tooltip.info(locale_findAndReplace.modeTip, "");
|
|
return;
|
|
}
|
|
|
|
let searchText = $("#luckysheet-search-replace #searchInput input").val();
|
|
if(searchText == "" || searchText == null){
|
|
if(isEditMode()){
|
|
alert(locale_findAndReplace.searchInputTip);
|
|
}
|
|
else{
|
|
tooltip.info(locale_findAndReplace.searchInputTip, "");
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
let range;
|
|
if(Store.luckysheet_select_save.length == 0 || (Store.luckysheet_select_save.length == 1 && Store.luckysheet_select_save[0].row[0] == Store.luckysheet_select_save[0].row[1] && Store.luckysheet_select_save[0].column[0] == Store.luckysheet_select_save[0].column[1])){
|
|
range = [{
|
|
"row": [0, Store.flowdata.length - 1],
|
|
"column": [0, Store.flowdata[0].length - 1]
|
|
}];
|
|
}
|
|
else{
|
|
range = $.extend(true, [], Store.luckysheet_select_save);
|
|
}
|
|
|
|
let searchIndexArr = _this.getSearchIndexArr(searchText, range);
|
|
|
|
if(searchIndexArr.length == 0){
|
|
if(isEditMode()){
|
|
alert(locale_findAndReplace.noReplceTip);
|
|
}
|
|
else{
|
|
tooltip.info(locale_findAndReplace.noReplceTip, "");
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
let count = null;
|
|
|
|
let last = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1];
|
|
let rf = last.row_focus;
|
|
let cf = last.column_focus;
|
|
|
|
for(let i = 0; i < searchIndexArr.length; i++){
|
|
if(searchIndexArr[i].r == rf && searchIndexArr[i].c == cf){
|
|
count = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(count == null){
|
|
if(searchIndexArr.length == 0){
|
|
if(isEditMode()){
|
|
alert(locale_findAndReplace.noMatchTip);
|
|
}
|
|
else{
|
|
tooltip.info(locale_findAndReplace.noMatchTip, "");
|
|
}
|
|
|
|
return;
|
|
}
|
|
else{
|
|
count = 0;
|
|
}
|
|
}
|
|
|
|
//正则表达式匹配
|
|
let regCheck = false;
|
|
if($("#luckysheet-search-replace #regCheck input[type='checkbox']").is(":checked")){
|
|
regCheck = true;
|
|
}
|
|
|
|
//整词匹配
|
|
let wordCheck = false;
|
|
if($("#luckysheet-search-replace #wordCheck input[type='checkbox']").is(":checked")){
|
|
wordCheck = true;
|
|
}
|
|
|
|
//区分大小写匹配
|
|
let caseCheck = false;
|
|
if($("#luckysheet-search-replace #caseCheck input[type='checkbox']").is(":checked")){
|
|
caseCheck = true;
|
|
}
|
|
|
|
let replaceText = $("#luckysheet-search-replace #replaceInput input").val();
|
|
|
|
let d = editor.deepCopyFlowData(Store.flowdata);
|
|
|
|
let r, c;
|
|
if(wordCheck){
|
|
r = searchIndexArr[count].r;
|
|
c = searchIndexArr[count].c;
|
|
|
|
let v = replaceText;
|
|
|
|
if(!checkProtectionLocked(r, c, Store.currentSheetIndex)){
|
|
return;
|
|
}
|
|
|
|
setcellvalue(r, c, d, v);
|
|
}
|
|
else{
|
|
let reg;
|
|
if(caseCheck){
|
|
reg = new RegExp(func_methods.getRegExpStr(searchText), "g");
|
|
}
|
|
else{
|
|
reg = new RegExp(func_methods.getRegExpStr(searchText), "ig");
|
|
}
|
|
|
|
r = searchIndexArr[count].r;
|
|
c = searchIndexArr[count].c;
|
|
|
|
if(!checkProtectionLocked(r, c, Store.currentSheetIndex)){
|
|
return;
|
|
}
|
|
|
|
let v = valueShowEs(r, c, d).toString().replace(reg, replaceText);
|
|
|
|
setcellvalue(r, c, d, v);
|
|
}
|
|
|
|
Store.luckysheet_select_save = [{ "row": [r, r], "column": [c, c] }];
|
|
|
|
if($("#luckysheet-search-replace #searchAllbox").is(":visible")){
|
|
$("#luckysheet-search-replace #searchAllbox").hide();
|
|
}
|
|
|
|
jfrefreshgrid(d, Store.luckysheet_select_save);
|
|
selectHightlightShow();
|
|
|
|
let scrollLeft = $("#luckysheet-cell-main").scrollLeft(),
|
|
scrollTop = $("#luckysheet-cell-main").scrollTop();
|
|
let winH = $("#luckysheet-cell-main").height(),
|
|
winW = $("#luckysheet-cell-main").width();
|
|
|
|
let row = Store.visibledatarow[r],
|
|
row_pre = r - 1 == -1 ? 0 : Store.visibledatarow[r - 1];
|
|
let col = Store.visibledatacolumn[c],
|
|
col_pre = c - 1 == -1 ? 0 : Store.visibledatacolumn[c - 1];
|
|
|
|
if (col - scrollLeft - winW + 20 > 0) {
|
|
$("#luckysheet-scrollbar-x").scrollLeft(col - winW + 20);
|
|
}
|
|
else if (col_pre - scrollLeft - 20 < 0) {
|
|
$("#luckysheet-scrollbar-x").scrollLeft(col_pre - 20);
|
|
}
|
|
|
|
if (row - scrollTop - winH + 20 > 0) {
|
|
$("#luckysheet-scrollbar-y").scrollTop(row - winH + 20);
|
|
}
|
|
else if (row_pre - scrollTop - 20 < 0) {
|
|
$("#luckysheet-scrollbar-y").scrollTop(row_pre - 20);
|
|
}
|
|
},
|
|
replaceAll: function(){
|
|
let _this = this;
|
|
|
|
const _locale = locale();
|
|
const locale_findAndReplace = _locale.findAndReplace;
|
|
|
|
if(!Store.allowEdit){
|
|
tooltip.info(locale_findAndReplace.modeTip, "");
|
|
return;
|
|
}
|
|
|
|
let searchText = $("#luckysheet-search-replace #searchInput input").val();
|
|
if(searchText == "" || searchText == null){
|
|
if(isEditMode()){
|
|
alert(locale_findAndReplace.searchInputTip);
|
|
}
|
|
else{
|
|
tooltip.info(locale_findAndReplace.searchInputTip, "");
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
let range;
|
|
if(Store.luckysheet_select_save.length == 0 || (Store.luckysheet_select_save.length == 1 && Store.luckysheet_select_save[0].row[0] == Store.luckysheet_select_save[0].row[1] && Store.luckysheet_select_save[0].column[0] == Store.luckysheet_select_save[0].column[1])){
|
|
range = [{
|
|
"row": [0, Store.flowdata.length - 1],
|
|
"column": [0, Store.flowdata[0].length - 1]
|
|
}];
|
|
}
|
|
else{
|
|
range = $.extend(true, [], Store.luckysheet_select_save);
|
|
}
|
|
|
|
let searchIndexArr = _this.getSearchIndexArr(searchText, range);
|
|
|
|
if(searchIndexArr.length == 0){
|
|
if(isEditMode()){
|
|
alert(locale_findAndReplace.noReplceTip);
|
|
}
|
|
else{
|
|
tooltip.info(locale_findAndReplace.noReplceTip, "");
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
//正则表达式匹配
|
|
let regCheck = false;
|
|
if($("#luckysheet-search-replace #regCheck input[type='checkbox']").is(":checked")){
|
|
regCheck = true;
|
|
}
|
|
|
|
//整词匹配
|
|
let wordCheck = false;
|
|
if($("#luckysheet-search-replace #wordCheck input[type='checkbox']").is(":checked")){
|
|
wordCheck = true;
|
|
}
|
|
|
|
//区分大小写匹配
|
|
let caseCheck = false;
|
|
if($("#luckysheet-search-replace #caseCheck input[type='checkbox']").is(":checked")){
|
|
caseCheck = true;
|
|
}
|
|
|
|
let replaceText = $("#luckysheet-search-replace #replaceInput input").val();
|
|
|
|
let d = editor.deepCopyFlowData(Store.flowdata);
|
|
let replaceCount = 0;
|
|
if(wordCheck){
|
|
for(let i = 0; i < searchIndexArr.length; i++){
|
|
let r = searchIndexArr[i].r;
|
|
let c = searchIndexArr[i].c;
|
|
|
|
if(!checkProtectionLocked(r, c, Store.currentSheetIndex, false)){
|
|
continue;
|
|
}
|
|
|
|
let v = replaceText;
|
|
|
|
setcellvalue(r, c, d, v);
|
|
|
|
range.push({ "row": [r, r], "column": [c, c] });
|
|
replaceCount++;
|
|
}
|
|
}
|
|
else{
|
|
let reg;
|
|
if(caseCheck){
|
|
reg = new RegExp(func_methods.getRegExpStr(searchText), "g");
|
|
}
|
|
else{
|
|
reg = new RegExp(func_methods.getRegExpStr(searchText), "ig");
|
|
}
|
|
|
|
for(let i = 0; i < searchIndexArr.length; i++){
|
|
let r = searchIndexArr[i].r;
|
|
let c = searchIndexArr[i].c;
|
|
|
|
if(!checkProtectionLocked(r, c, Store.currentSheetIndex, false)){
|
|
continue;
|
|
}
|
|
|
|
let v = valueShowEs(r, c, d).toString().replace(reg, replaceText);
|
|
|
|
setcellvalue(r, c, d, v);
|
|
|
|
range.push({ "row": [r, r], "column": [c, c] });
|
|
replaceCount++;
|
|
}
|
|
}
|
|
|
|
if($("#luckysheet-search-replace #searchAllbox").is(":visible")){
|
|
$("#luckysheet-search-replace #searchAllbox").hide();
|
|
}
|
|
|
|
jfrefreshgrid(d, range);
|
|
|
|
Store.luckysheet_select_save = $.extend(true, [], range);
|
|
selectHightlightShow();
|
|
|
|
let succeedInfo = replaceHtml(locale_findAndReplace.successTip, {
|
|
"xlength": replaceCount
|
|
});
|
|
if(isEditMode()){
|
|
alert(succeedInfo);
|
|
}
|
|
else{
|
|
tooltip.info(succeedInfo, "");
|
|
}
|
|
}
|
|
}
|
|
|
|
export default luckysheetSearchReplace;
|
|
|