diff --git a/src/controllers/freezen.js b/src/controllers/freezen.js index 2f2ce7a..049c6ae 100644 --- a/src/controllers/freezen.js +++ b/src/controllers/freezen.js @@ -9,6 +9,8 @@ import luckysheetDropCell from './dropCell'; import { rowLocationByIndex, colLocationByIndex } from '../global/location'; import Store from '../store'; import locale from '../locale/locale'; +import { luckysheetrefreshgrid } from '../global/refresh'; + const luckysheetFreezen = { freezenHorizontalHTML: '
 
', @@ -23,6 +25,10 @@ const luckysheetFreezen = { windowWidth: null, freezenhorizontaldata: null, freezenverticaldata: null, + // 定义冻结首行、首列是实际的第一行第一列还是当前视图的第一行第一列 + // excel 为视图的第一行第一列,但此处实现有问题,如滚动到15行冻结首行,当前冻结了15行,保存再进去实际冻结了第一行 + // 冻结真实的第一行、第一列更符合直觉 + freezenRealFirstRowColumn: true, cutVolumn: function (arr, cutindex) { if(cutindex <= 0){ return arr; @@ -43,6 +49,26 @@ const luckysheetFreezen = { const _locale = locale(); const locale_freezen = _locale.freezen; + // 解决freeze 不垂直居中的问题 + const freezeHTML = ` +
+
+
+ +
+
+ ${locale_freezen.default} +
+
+
+ ` + + $("#luckysheet-freezen-btn-horizontal").html(freezeHTML); $("#luckysheet-freezen-btn-vertical").html(' '+locale_freezen.freezenColumn); _this.freezenverticaldata = null; @@ -100,20 +126,33 @@ const luckysheetFreezen = { } if (freezenverticaldata == null) { - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let dataset_col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); - if (dataset_col_st == -1) { - dataset_col_st = 0; + if (_this.freezenRealFirstRowColumn) { + let dataset_col_st = 0; + left = Store.visibledatacolumn[dataset_col_st] - 2 + Store.rowHeaderWidth; + freezenverticaldata = [ + Store.visibledatacolumn[dataset_col_st], + dataset_col_st + 1, + 0, + _this.cutVolumn(Store.visibledatacolumn, dataset_col_st + 1), + left + ]; + } else { + let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); + let dataset_col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); + if (dataset_col_st == -1) { + dataset_col_st = 0; + } + + left = Store.visibledatacolumn[dataset_col_st] - 2 - scrollLeft + Store.rowHeaderWidth; + freezenverticaldata = [ + Store.visibledatacolumn[dataset_col_st], + dataset_col_st + 1, + scrollLeft, + _this.cutVolumn(Store.visibledatacolumn, dataset_col_st + 1), + left + ]; } - left = Store.visibledatacolumn[dataset_col_st] - 2 - scrollLeft + Store.rowHeaderWidth; - freezenverticaldata = [ - Store.visibledatacolumn[dataset_col_st], - dataset_col_st + 1, - scrollLeft, - _this.cutVolumn(Store.visibledatacolumn, dataset_col_st + 1), - left - ]; _this.saveFreezen(null, null, freezenverticaldata, left); } @@ -370,21 +409,41 @@ const luckysheetFreezen = { } if (freezenhorizontaldata == null) { - let scrollTop = $("#luckysheet-cell-main").scrollTop(); - let dataset_row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); - if (dataset_row_st == -1) { + let dataset_row_st; + if (_this.freezenRealFirstRowColumn) { dataset_row_st = 0; + top = Store.visibledatarow[dataset_row_st] - 2 + Store.columnHeaderHeight; + freezenhorizontaldata = [ + Store.visibledatarow[dataset_row_st], + dataset_row_st + 1, + 0, + _this.cutVolumn(Store.visibledatarow, dataset_row_st + 1), + top + ]; + _this.saveFreezen(freezenhorizontaldata, top, null, null); + // todo: 没有下面代码 如果有滚动,冻结之后首行的行号仍显示的之前滚动的行号 + // todo: 不 setTimeout 这里直接刷新的话,冻结的首行显示有问题,没有列的分割线 + setTimeout(() => { + luckysheetFreezen.createAssistCanvas(); + luckysheetrefreshgrid(); + }); + } else { + let scrollTop = $("#luckysheet-cell-main").scrollTop(); + dataset_row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); + if (dataset_row_st == -1) { + dataset_row_st = 0; + } + + top = Store.visibledatarow[dataset_row_st] - 2 - scrollTop + Store.columnHeaderHeight; + freezenhorizontaldata = [ + Store.visibledatarow[dataset_row_st], + dataset_row_st + 1, + scrollTop, + _this.cutVolumn(Store.visibledatarow, dataset_row_st + 1), + top + ]; + _this.saveFreezen(freezenhorizontaldata, top, null, null); } - - top = Store.visibledatarow[dataset_row_st] - 2 - scrollTop + Store.columnHeaderHeight; - freezenhorizontaldata = [ - Store.visibledatarow[dataset_row_st], - dataset_row_st + 1, - scrollTop, - _this.cutVolumn(Store.visibledatarow, dataset_row_st + 1), - top - ]; - _this.saveFreezen(freezenhorizontaldata, top, null, null); } _this.freezenhorizontaldata = freezenhorizontaldata; @@ -414,6 +473,7 @@ const luckysheetFreezen = { $("#luckysheet-freezen-btn-horizontal").html(freezeHTML); $("#luckysheet-freezebar-horizontal").show().find(".luckysheet-freezebar-horizontal-handle").css({ "top": top }).end().find(".luckysheet-freezebar-horizontal-drop").css({ "top": top }); + }, createAssistCanvas: function(){ let _this = this; diff --git a/src/controllers/handler.js b/src/controllers/handler.js index 73c011d..770df04 100644 --- a/src/controllers/handler.js +++ b/src/controllers/handler.js @@ -4946,6 +4946,8 @@ export default function luckysheetHandler() { } luckysheetFreezen.scrollAdapt(); + // cancel 之后 勾勾取消 + $('#luckysheet-icon-freezen-menu-menuButton').find('.fa.fa-check').remove(); } else { diff --git a/src/controllers/menuButton.js b/src/controllers/menuButton.js index b5d8e8c..06566f3 100644 --- a/src/controllers/menuButton.js +++ b/src/controllers/menuButton.js @@ -37,7 +37,7 @@ import { replaceHtml, getObjType, rgbTohex, mouseclickposition, luckysheetfontfo import {openProtectionModal,checkProtectionFormatCells,checkProtectionNotEnable} from './protection'; import Store from '../store'; import locale from '../locale/locale'; -import {checkTheStatusOfTheSelectedCells} from '../global/api'; +import { checkTheStatusOfTheSelectedCells, frozenFirstRow, frozenFirstColumn } from '../global/api'; const menuButton = { "menu": '
${item}
', @@ -1619,77 +1619,98 @@ const menuButton = { let $t = $(this), itemvalue = $t.attr("itemvalue"); _this.focus($menuButton, itemvalue); + if (itemvalue === 'freezenCancel') { + $menuButton.find('.fa.fa-check').remove(); + } // store frozen luckysheetFreezen.saveFrozen(itemvalue); if(itemvalue == "freezenRow"){ //首行冻结 - let scrollTop = $("#luckysheet-cell-main").scrollTop(); - let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); - if(row_st == -1){ - row_st = 0; - } - let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; - let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; - luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); - - if (luckysheetFreezen.freezenverticaldata != null) { - luckysheetFreezen.cancelFreezenVertical(); - luckysheetFreezen.createAssistCanvas(); - luckysheetrefreshgrid(); - } + frozenFirstRow(); + // let scrollTop = $("#luckysheet-cell-main").scrollTop(); + // let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); + // if(row_st == -1){ + // row_st = 0; + // } + // let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; + // let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; + // luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); + + // if (luckysheetFreezen.freezenverticaldata != null) { + // luckysheetFreezen.cancelFreezenVertical(); + // luckysheetFreezen.createAssistCanvas(); + // luckysheetrefreshgrid(); + // } - luckysheetFreezen.createFreezenHorizontal(freezenhorizontaldata, top); - luckysheetFreezen.createAssistCanvas(); - luckysheetrefreshgrid(); + // luckysheetFreezen.createFreezenHorizontal(freezenhorizontaldata, top); + // luckysheetFreezen.createAssistCanvas(); + // luckysheetrefreshgrid(); } else if(itemvalue == "freezenColumn"){ //首列冻结 - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); - if(col_st == -1){ - col_st = 0; - } - let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; - let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; - luckysheetFreezen.saveFreezen(null, null, freezenverticaldata, left); - - if (luckysheetFreezen.freezenhorizontaldata != null) { - luckysheetFreezen.cancelFreezenHorizontal(); - luckysheetFreezen.createAssistCanvas(); - luckysheetrefreshgrid(); - } + frozenFirstColumn(); + // let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); + // let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); + // if(col_st == -1){ + // col_st = 0; + // } + // let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; + // let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; + // luckysheetFreezen.saveFreezen(null, null, freezenverticaldata, left); + + // if (luckysheetFreezen.freezenhorizontaldata != null) { + // luckysheetFreezen.cancelFreezenHorizontal(); + // luckysheetFreezen.createAssistCanvas(); + // luckysheetrefreshgrid(); + // } - luckysheetFreezen.createFreezenVertical(freezenverticaldata, left); - luckysheetFreezen.createAssistCanvas(); - luckysheetrefreshgrid(); + // luckysheetFreezen.createFreezenVertical(freezenverticaldata, left); + // luckysheetFreezen.createAssistCanvas(); + // luckysheetrefreshgrid(); } else if(itemvalue == "freezenRC"){ //首行列冻结 - let scrollTop = $("#luckysheet-cell-main").scrollTop(); - let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); - if(row_st == -1){ - row_st = 0; - } - let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; - let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; - luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); - - luckysheetFreezen.createFreezenHorizontal(freezenhorizontaldata, top); + if (luckysheetFreezen.freezenRealFirstRowColumn) { + let row_st = 0; + let top = Store.visibledatarow[row_st] - 2 + Store.columnHeaderHeight; + let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, 0, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; + luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); + + luckysheetFreezen.createFreezenHorizontal(freezenhorizontaldata, top); + + let col_st = 0; + let left = Store.visibledatacolumn[col_st] - 2 + Store.rowHeaderWidth; + let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, 0, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; + luckysheetFreezen.saveFreezen(null, null, freezenverticaldata, left); + + luckysheetFreezen.createFreezenVertical(freezenverticaldata, left); + } else { + let scrollTop = $("#luckysheet-cell-main").scrollTop(); + let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); + if(row_st == -1){ + row_st = 0; + } + let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; + let freezenhorizontaldata = [Store.visibledatarow[row_st], row_st + 1, scrollTop, luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), top]; + luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); - if(col_st == -1){ - col_st = 0; - } - let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; - let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; - luckysheetFreezen.saveFreezen(null, null, freezenverticaldata, left); + luckysheetFreezen.createFreezenHorizontal(freezenhorizontaldata, top); - luckysheetFreezen.createFreezenVertical(freezenverticaldata, left); + let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); + let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); + if(col_st == -1){ + col_st = 0; + } + let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; + let freezenverticaldata = [Store.visibledatacolumn[col_st], col_st + 1, scrollLeft, luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), left]; + luckysheetFreezen.saveFreezen(null, null, freezenverticaldata, left); + luckysheetFreezen.createFreezenVertical(freezenverticaldata, left); + } luckysheetFreezen.createAssistCanvas(); luckysheetrefreshgrid(); } else if(itemvalue == "freezenRowRange"){ //选区行冻结 + if(Store.luckysheet_select_save == null || Store.luckysheet_select_save.length == 0){ if(isEditMode()){ alert(locale_freezen.noSeletionError); @@ -1700,7 +1721,11 @@ const menuButton = { return; } - + // 固定超出屏幕范围 + let rangeTop = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1].top; + if (luckysheetFreezen.freezenRealFirstRowColumn && rangeTop > $("#luckysheet-cell-main").height()) { + return tooltip.info(locale_freezen.rangeRCOverErrorTitle, locale_freezen.rangeRCOverError); + } let scrollTop = $("#luckysheet-cell-main").scrollTop(); let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); @@ -1740,7 +1765,11 @@ const menuButton = { return; } - + // 固定超出屏幕范围 + let rangeLeft = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1].left; + if (luckysheetFreezen.freezenRealFirstRowColumn && rangeLeft > $("#luckysheet-cell-main").width()) { + return tooltip.info(locale_freezen.rangeRCOverErrorTitle, locale_freezen.rangeRCOverError); + } let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); @@ -1780,6 +1809,13 @@ const menuButton = { return; } + + // 固定超出屏幕范围 + let rangeTop = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1].top; + let rangeLeft = Store.luckysheet_select_save[Store.luckysheet_select_save.length - 1].left; + if (luckysheetFreezen.freezenRealFirstRowColumn && (rangeTop > $("#luckysheet-cell-main").height() || rangeLeft > $("#luckysheet-cell-main").width())) { + return tooltip.info(locale_freezen.rangeRCOverErrorTitle, locale_freezen.rangeRCOverError); + } let scrollTop = $("#luckysheet-cell-main").scrollTop(); let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); diff --git a/src/global/api.js b/src/global/api.js index 2bd633c..dc858cc 100644 --- a/src/global/api.js +++ b/src/global/api.js @@ -609,21 +609,34 @@ export function frozenFirstRow(order) { // 冻结为当前sheet页 if (!order || order == getSheetIndex(Store.currentSheetIndex)) { - let scrollTop = $("#luckysheet-cell-main").scrollTop(); + let freezenhorizontaldata, row_st, top; + if (luckysheetFreezen.freezenRealFirstRowColumn) { + let row_st = 0; + top = Store.visibledatarow[row_st] - 2 + Store.columnHeaderHeight; + freezenhorizontaldata = [ + Store.visibledatarow[row_st], + row_st + 1, + 0, + luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), + top + ]; + } else { + let scrollTop = $("#luckysheet-cell-main").scrollTop(); + row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); + if(row_st == -1){ + row_st = 0; + } - let row_st = luckysheet_searcharray(Store.visibledatarow, scrollTop); - if(row_st == -1){ - row_st = 0; + top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; + freezenhorizontaldata = [ + Store.visibledatarow[row_st], + row_st + 1, + scrollTop, + luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), + top + ]; } - - let top = Store.visibledatarow[row_st] - 2 - scrollTop + Store.columnHeaderHeight; - let freezenhorizontaldata = [ - Store.visibledatarow[row_st], - row_st + 1, - scrollTop, - luckysheetFreezen.cutVolumn(Store.visibledatarow, row_st + 1), - top - ]; + luckysheetFreezen.saveFreezen(freezenhorizontaldata, top, null, null); if (luckysheetFreezen.freezenverticaldata != null) { @@ -649,21 +662,35 @@ export function frozenFirstColumn(order) { // 冻结为当前sheet页 if (!order || order == getSheetIndex(Store.currentSheetIndex)) { - let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); - - let col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); - if(col_st == -1){ + let freezenverticaldata, col_st, left; + if (luckysheetFreezen.freezenRealFirstRowColumn) { col_st = 0; + left = Store.visibledatacolumn[col_st] - 2 + Store.rowHeaderWidth; + freezenverticaldata = [ + Store.visibledatacolumn[col_st], + col_st + 1, + 0, + luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), + left + ]; + } else { + let scrollLeft = $("#luckysheet-cell-main").scrollLeft(); + + col_st = luckysheet_searcharray(Store.visibledatacolumn, scrollLeft); + if(col_st == -1){ + col_st = 0; + } + + left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; + freezenverticaldata = [ + Store.visibledatacolumn[col_st], + col_st + 1, + scrollLeft, + luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), + left + ]; } - let left = Store.visibledatacolumn[col_st] - 2 - scrollLeft + Store.rowHeaderWidth; - let freezenverticaldata = [ - Store.visibledatacolumn[col_st], - col_st + 1, - scrollLeft, - luckysheetFreezen.cutVolumn(Store.visibledatacolumn, col_st + 1), - left - ]; luckysheetFreezen.saveFreezen(null, null, freezenverticaldata, left); if (luckysheetFreezen.freezenhorizontaldata != null) { diff --git a/src/locale/en.js b/src/locale/en.js index 6744a1e..6770889 100644 --- a/src/locale/en.js +++ b/src/locale/en.js @@ -8878,7 +8878,7 @@ export default { textWrapMode: 'Text wrap mode', textRotate: 'Text rotate', textRotateMode: 'Text rotate mode', - freezeTopRow: 'Freeze top row', + freezeTopRow: 'Freeze first row', sortAndFilter: 'Sort and filter', findAndReplace: 'Find and replace', sum: 'SUM', @@ -9265,7 +9265,8 @@ export default { freezenRCRange:"Freezen both range", freezenCancel:"Cancel", - noSeletionError:"No Range to be selected", + noSeletionError:"No Range to be selected", rangeRCOverErrorTitle: "Freeze reminder", + rangeRCOverError: "The frozen pane is beyond the visible range, which will lead to abnormal operation. Please reset the frozen area." }, sort:{ "asc":"Ascending ", diff --git a/src/locale/es.js b/src/locale/es.js index 9074f30..93149fd 100644 --- a/src/locale/es.js +++ b/src/locale/es.js @@ -9250,6 +9250,8 @@ export default { freezenCancel:"Cancelar", noSeletionError:"No hay rango para seleccionar", + rangeRCOverErrorTitle: "Recordatorio de congelación", + rangeRCOverError: "El panel de congelación excede el rango visible y puede causar que no funcione correctamente. Reinicie el área de congelación." }, sort:{ "asc":"Ascendente ", diff --git a/src/locale/zh.js b/src/locale/zh.js index a811804..11bb434 100644 --- a/src/locale/zh.js +++ b/src/locale/zh.js @@ -9088,7 +9088,7 @@ export default { textWrapMode: '换行方式', textRotate: '文本旋转', textRotateMode: '旋转方式', - freezeTopRow: '冻结首行', + freezeTopRow: '冻结第一行', sortAndFilter: '排序和筛选', findAndReplace: '查找替换', sum: '求和', @@ -9483,16 +9483,18 @@ export default { "rotationDown":"向下90°" }, freezen:{ - default:"冻结首行", - freezenRow:"冻结首行", - freezenColumn:"冻结首列", - freezenRC:"冻结行列", + default:"冻结第一行", + freezenRow:"冻结第一行", + freezenColumn:"冻结第A列", + freezenRC:"冻结第一行第A列", freezenRowRange:"冻结行到选区", freezenColumnRange:"冻结列到选区", freezenRCRange:"冻结行列到选区", freezenCancel:"取消冻结", noSeletionError:"没有选区", + rangeRCOverErrorTitle: "冻结提醒", + rangeRCOverError: "冻结窗格超过可见范围,会导致无法正常操作,请重新设置冻结区域。" }, sort:{ "asc":"升序", diff --git a/src/locale/zh_tw.js b/src/locale/zh_tw.js index 27637ae..bca42d5 100644 --- a/src/locale/zh_tw.js +++ b/src/locale/zh_tw.js @@ -9089,7 +9089,7 @@ export default { textWrapMode : '換行管道', textRotate : '文字旋轉', textRotateMode : '旋轉管道', - freezeTopRow : '凍結首行', + freezeTopRow : '凍結第一行', sortAndFilter : '排序和篩選', findAndReplace : '查找替換', sum : '求和', @@ -9476,9 +9476,9 @@ export default { "rotationDown": "向下90°" }, freezen: { - default : "凍結首行", - freezenRow : "凍結首行", - freezenColumn : "凍結首列", + default : "凍結第一行", + freezenRow : "凍結第一行", + freezenColumn : "凍結第A列", freezenRC : "凍結行列", freezenRowRange : "凍結行到選區", freezenColumnRange: "凍結列到選區", @@ -9486,6 +9486,8 @@ export default { freezenCancel : "取消凍結", noSeletionError: "没有選區", + rangeRCOverErrorTitle: "凍結提醒", + rangeRCOverError: "凍結窗格超過可見範圍,會導致無法正常操作,請重新設定凍結區域。" }, sort: { "asc" : "昇冪",