【问题标题】:Increment Alphabet characters to next character using JavaScript使用 JavaScript 将字母字符递增到下一个字符
【发布时间】:2015-11-16 09:54:18
【问题描述】:

我是脚本编程的初学者,我想编写一个脚本以获得自动 ID(日期+大写字符)。

没有函数 IF 脚本是可以的。但是,我的脚本仍然存在一些问题。我没有成功以函数 IF 的条件递增字符。

function onFormSubmit(e) {

//Déclaration des variables
var SheetResponse = SpreadsheetApp.getActiveSheet();
var DerniereLigne =  SpreadsheetApp.getActiveSheet().getLastRow();
var DateToday = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'ddMMYY');

//Intégration du suffixe alphabétqiue pour l'ID
// If cells value (A.n)=(A.n-1) then character of cells "N.n" is incremented until "Z" (with n is number of LastRow)
if (SheetResponse.getRange(DerniereLigne,2).getValue() == SheetResponse.getRange(DerniereLigne-1,2).getValue()) {
        var AlphaNumber = SheetResponse.getRange(DerniereLigne-1,15).getValue().charCodeAt(0);
        var NextCode = AlphaNumber + 1;
        // Si Code (Z) alors restart to "A"
        if (NextCode > 90) {nextCode = 65;}
        var NextAlpha = String.fromCharCode( NextCode );
        }
// If not cells (N.n) is set to "A"
else {NextAlpha = "A";}

//Création de l'ID dans la derniére ligne et colonne "N"
SheetResponse.getRange(DerniereLigne,14).setValue(DateToday + NextAlpha);
SheetResponse.getRange(DerniereLigne,15).setValue(NextAlpha);

}

请,有人可以帮助我。 提前谢谢你。

【问题讨论】:

  • 在这一行中:if (NextCode > 90) {nextCode = 65;} 第二个变量nextCode 没有大写字母n
  • 如果要递增到“Z”,请检查 NextCode > 89 而不是 NextCode > 90。 “Z”是 90,所以 90 大于 89。
  • 亲爱的@Sandy Good,感谢您的回复。但是我仍然遇到 IF 条件的问题。没有函数 IF 的字符增量脚本是可以的。根据你的说法,IF 语句可以吗?
  • 在底部查看更新的答案。

标签: javascript google-apps-script char conditional-statements auto-increment


【解决方案1】:

这是一个按字典顺序返回下一个字符串的函数: 'A' -> 'B' -> ... 'Z' -> 'AA' -> 'AB' -> 'AC' -> ... 'AZ' -> 'BA' -> 'BB' - > ... 'ZZ' -> 'AAA' 等

function nextString(str) {
    if (! str)
        return 'A'  // return 'A' if str is empty or null

    let tail = ''
    let i = str.length -1
    let char = str[i]
    // find the index of the first character from the right that is not a 'Z'
    while (char === 'Z' && i > 0) {
        i--
        char = str[i]
        tail = 'A' + tail   // tail contains a string of 'A'
    }
    if (char === 'Z')   // the string was made only of 'Z'
        return 'AA' + tail
    // increment the character that was not a 'Z'
    return str.slice(0, i) + String.fromCharCode(char.charCodeAt(0) + 1) + tail

}

【讨论】:

    【解决方案2】:

    下面是一个函数示例,该函数循环遍历字母表中的所有大写字母,然后递增一个字符:

    function incrementAlpha() {
      var stringOfLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
      var thisLoopAlpha = "",
          AlphaNumber = 1,
          NextCode = 0,
          NextAlpha = 0,
          thisCode = 0;
    
      for (var i=0;i<stringOfLetters.length;i+=1) {
        thisLoopAlpha = stringOfLetters[i];
        thisCode = thisLoopAlpha.charCodeAt(0);
        NextCode = thisCode + 1;
        // if Code (Z) then restart at "A"
        if (thisCode > 89) {
          NextCode = 65;
          NextAlpha = String.fromCharCode( NextCode );
        } else {
          //NextAlpha = "A";
          NextAlpha = String.fromCharCode( NextCode );
        };
    
        Logger.log('thisCode: ' + thisCode);
        Logger.log('NextCode: ' + NextCode);
        Logger.log('NextAlpha: ' + NextAlpha + "\n");
      };
    };
    

    我认为你的代码应该是这样的结构:

    function onFormSubmit(e) {
    
      //Déclaration des variables
      var SheetResponse = SpreadsheetApp.getActiveSheet();
      var DerniereLigne =  SpreadsheetApp.getActiveSheet().getLastRow();
      var DateToday = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'ddMMYY');
    
      //Intégration du suffixe alphabétqiue pour l'ID
      // If cells value (A.n)=(A.n-1) then character of cells "N.n" is incremented until "Z" (with n is number of LastRow)
      if (SheetResponse.getRange(DerniereLigne,2).getValue() == SheetResponse.getRange(DerniereLigne-1,2).getValue()) {
        var AlphaNumber = SheetResponse.getRange(DerniereLigne-1,15).getValue().charCodeAt(0);
        var NextCode = AlphaNumber + 1;
    
        // Si Code (Z) alors restart to "A"
        if (NextCode > 89) {
          nextCode = 65;
          var NextAlpha = String.fromCharCode( NextCode );
        } else {
          // If not cells (N.n) is set to "A"
          NextAlpha = "A";
        }; 
      }
      //Création de l'ID dans la derniére ligne et colonne "N"
      SheetResponse.getRange(DerniereLigne,14).setValue(DateToday + NextAlpha);
      SheetResponse.getRange(DerniereLigne,15).setValue(NextAlpha);
    }
    

    【讨论】:

    • 亲爱的@Sandy Good,感谢您对字符增量的回答。
    • 感谢您的反馈。
    • 您好桑迪,您提出的脚本不起作用。没有 IF,我的初始脚本没问题。 IF 语句似乎不好。基本上,我已经测试了条件 if(1 ==1),并且脚本功能正确(“A”->“B”->“C”--> ....->“Z”- -> "A" --> ...)。问题是我的 IF 条件不起作用。
    • 尝试使用三等号代替双等号。此外,出于调试目的,将SheetResponse.getRange(DerniereLigne,2).getValue() 分配给变量,并检查值是什么。在没有电子表格的情况下,唯一可以确定SheetResponse.getRange(DerniereLigne,2).getValue() 的值的人是。没有这些值,这里没有人可以调试您的代码。我们无法神奇地知道这些值是什么。添加Logger.log() 语句,然后查看日志。
    • 亲爱的桑迪,我找到了解决办法。当我将 String() 放入 IF 条件 if (String(LastCell) == String(PrevCell)) 时,IF 语句运行良好。感谢您的支持
    猜你喜欢
    • 2017-08-23
    • 2014-10-08
    • 2017-11-03
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2018-09-11
    • 2017-04-30
    • 2015-08-21
    相关资源
    最近更新 更多