Browse Source

fix(sheet name contains squotes bug): formla can not execute, when sheet name contains squotes

input formula controller
master
wbfsa 5 years ago
parent
commit
fc1dd837d4
  1. 9
      src/controllers/handler.js
  2. 12
      src/controllers/keyboard.js
  3. 5
      src/controllers/sheetBar.js
  4. 4
      src/function/func.js
  5. 21
      src/global/formula.js
  6. 1
      src/locale/en.js
  7. 1
      src/locale/es.js
  8. 2
      src/locale/zh.js

9
src/controllers/handler.js

@ -469,7 +469,14 @@ export default function luckysheetHandler() {
}
else if (event.ctrlKey && $("#luckysheet-rich-text-editor").find("span").last().text() != ",") {
//按住ctrl 选择选区时 先处理上一个选区
let vText = $("#luckysheet-rich-text-editor").text() + ",";
let vText = $("#luckysheet-rich-text-editor").text();
if(vText.length > 0){
let lastWord = vText.substr(vText.length-1,1);
if(lastWord!="," && lastWord!="=" && lastWord!="("){
vText += ",";
}
}
if (vText.length > 0 && vText.substr(0, 1) == "=") {
vText = formula.functionHTMLGenerate(vText);

12
src/controllers/keyboard.js

@ -92,7 +92,7 @@ function formulaMoveEvent(dir, ctrlKey, shiftKey, event){
}
else if(formula.israngeseleciton()){
let anchor = $(window.getSelection().anchorNode);
// console.log(anchor.parent().next().text());
if(anchor.parent().next().text() == null || anchor.parent().next().text() == ""){
let vText = $("#luckysheet-input-box #luckysheet-input-box-index").text();
let range = formula.getcellrange(vText);
@ -162,8 +162,10 @@ function formulaMoveEvent(dir, ctrlKey, shiftKey, event){
luckysheetMoveHighlightCell(dir_n, step, "rangeOfFormula");
}
event.preventDefault();
}
event.preventDefault();
}
else if(!ctrlKey && !shiftKey){
let anchor = $(window.getSelection().anchorNode);
@ -228,6 +230,9 @@ function formulaMoveEvent(dir, ctrlKey, shiftKey, event){
event.preventDefault();
}
else{
formula.rangeHightlightselected($("#luckysheet-rich-text-editor"));
}
}
else if(dir == 'right'){
if(anchor.parent().is("span") && anchor.parent().next().length == 0 && anchorOffset > 0){
@ -248,6 +253,9 @@ function formulaMoveEvent(dir, ctrlKey, shiftKey, event){
event.preventDefault();
}
else{
formula.rangeHightlightselected($("#luckysheet-rich-text-editor"));
}
}
}
}

5
src/controllers/sheetBar.js

@ -222,6 +222,11 @@ export function initialSheetBar(){
}
let $t = $(this);
let txt = $t.text(), oldtxt = $t.data("oldtxt");
var reg1 = new RegExp("[\\[\\]:\\?*\/'\"]");
if(reg1.test(txt)){
alert(locale_sheetconfig.sheetNameSpecCharError);
return;
}
let index = getSheetIndex(Store.currentSheetIndex);
for (let i = 0; i < Store.luckysheetfile.length; i++) {

4
src/function/func.js

@ -1608,6 +1608,10 @@ function luckysheet_getcelldata(txt) {
sheettxt = val[0];
rangetxt = val[1];
if(sheettxt.substr(0,1)=="'" && sheettxt.substr(sheettxt.length-1,1)=="'"){
sheettxt = sheettxt.substring(1,sheettxt.length-1);
}
for (let i in luckysheetfile) {
if (sheettxt == luckysheetfile[i].name) {
sheetIndex = luckysheetfile[i].index;

21
src/global/formula.js

@ -705,7 +705,9 @@ const luckysheetformula = {
rangetxt = val[1];
if(sheettxt.substr(0,1)=="'" && sheettxt.substr(sheettxt.length-1,1)=="'"){
sheettxt = sheettxt.substring(1,sheettxt.length-1);
}
for (let i in luckysheetfile) {
if (sheettxt == luckysheetfile[i].name) {
sheetIndex = luckysheetfile[i].index;
@ -1210,6 +1212,7 @@ const luckysheetformula = {
$("#luckysheet-formula-search-c, #luckysheet-formula-help-c").hide();
_this.helpFunctionExe($editer, currSelection);
console.log(currSelection, $(currSelection).closest(".luckysheet-formula-functionrange-cell").length);
if ($(currSelection).closest(".luckysheet-formula-functionrange-cell").length == 0) {
_this.searchFunction($editer);
return;
@ -3877,6 +3880,16 @@ const luckysheetformula = {
matchConfig.dquote += 1;
}
}
else if (s == "'") {
str += "'";
if (matchConfig.squote > 0) {
matchConfig.squote -= 1;
}
else {
matchConfig.squote += 1;
}
}
else if (s == ',' && matchConfig.dquote == 0 && matchConfig.braces == 0) {
if(bracket.length <= 1){
function_str += _this.functionParser(str,cellRangeFunction) + ",";
@ -3958,7 +3971,7 @@ const luckysheetformula = {
}
}
else {
if (matchConfig.dquote == 0) {
if (matchConfig.dquote == 0 && matchConfig.squote==0) {
str += $.trim(s);
}
else {
@ -3971,7 +3984,7 @@ const luckysheetformula = {
if (_this.iscelldata($.trim(str))) {
let str_nb = $.trim(str);
endstr = "luckysheet_getcelldata('" +str_nb + "')";
endstr = "luckysheet_getcelldata('" +str_nb.replace(/'/g, "\\'") + "')";
if(typeof(cellRangeFunction)=="function"){
cellRangeFunction(str_nb);
}
@ -4025,7 +4038,7 @@ const luckysheetformula = {
i++;
}
// console.log(function_str);
console.log(function_str);
return function_str;
},
insertUpdateDynamicArray: function(dynamicArrayItem) {

1
src/locale/en.js

@ -9509,6 +9509,7 @@ export default {
redoDelete:"Can be undo by Ctrl+Z",
noHide:"Can't hide, at least keep one sheet tag",
chartEditNoOpt:"This operation is not allowed in chart editing mode!",
sheetNameSpecCharError:"The name cannot contain:[ ] : \ ? * / ' \"",
},
conditionformat: {
conditionformat_greaterThan: 'Conditionformat-GreaterThan',

1
src/locale/es.js

@ -9508,6 +9508,7 @@ export default {
redoDelete:"Se puede deshacer con Ctrl+Z",
noHide:"No se puede ocultar, al menos conserva una etiqueta de hoja",
chartEditNoOpt:"¡Esta operación no está permitida en el modo de edición de gráficos!",
sheetNameSpecCharError:"El nombre no puede contener:[ ] : \ ? * / ' \"",
},
conditionformat: {
conditionformat_greaterThan: 'Conditionformat-GreaterThan',

2
src/locale/zh.js

@ -9752,7 +9752,7 @@ export default {
redoDelete:"可以通过Ctrl+Z撤销删除",
noHide:"不能隐藏, 至少保留一个sheet标签",
chartEditNoOpt:"图表编辑模式下不允许该操作!",
sheetNameSpecCharError:"名称不能包含:[ ] : \ ? * / ' \"",
},
conditionformat: {
conditionformat_greaterThan: '条件格式——大于',

Loading…
Cancel
Save