Google Spreadsheets脚本继续编写空字符串

时间:2015-05-13 00:11:02

标签: javascript encryption google-apps-script google-sheets google-form

我有一个Google表单,可以提交到Google电子表格。在电子表格方面,我有一个Google Apps脚本,可以加密提交的密码。但无论出于何种原因,它会将空字符串写入加密密码所在的位置。这真的开始强调我了。这是我的代码:

function encryptPassword(e) {
  var password = e.values[6];
  var split = password.split("");
  password = "";
  var char;

  for(char in split) {
    password = password.concat(getBinary(split[char]));
  }
  var spreadsheet = SpreadsheetApp.openById("1CywforbyBmPDHt2Uw9lJtyhqeklAAJp0IG7GfVV6U5U");
  spreadsheet.getRange("G" + spreadsheet.getLastRow().toString()).setValue(password);
  spreadsheet.getRange("H" + spreadsheet.getLastRow().toString()).setValue(password);
}

function getBinary(char) {
  var binary = "";
  var numValue;
  var range;
  var value;
  var chars = [
    ["#", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P"],
    ["@", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"],
    ["&", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p"],
    ["%", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"],
    ["$", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
  ];

  for(range in chars) {
    for(value in range) {
      if(value > 0) {
        if(char == chars[range][value]) {
          numValue = value - 1;
          binary = binary + chars[range][0];
          if(numValue / 8 >= 1) {
            numValue = numValue - 8;
            binary = binary.concat("1");
          } else {
            binary = binary.concat("0");
          }
          if(numValue / 4 >= 1) {
            numValue = numValue - 4;
            binary = binary.concat("1");
          } else {
            binary = binary.concat("0");
          }
          if(numValue / 2 >= 1) {
            numValue = numValue - 2;
            binary = binary.concat("1");
          } else {
            binary = binary.concat("0");
          }
          if(numValue / 1 >= 1) {
            binary = binary.concat("1");
          } else {
            binary = binary.concat("0");
          }
        }
      }
    }
  }
  return binary;
}

只要表单提交到电子表格,encryptPassword(e)函数就会设置为运行。另请注意,我已修改了chars数组的内容,试图将加密保密。这应该没有区别,因为其余代码保持不变。

如何修复我的脚本,以便它实际上将加密的密码写入电子表格而不是空字符串?

1 个答案:

答案 0 :(得分:1)

你有两个For / In循环:

for(range in chars) {
  for(value in range) {

For / In循环用于循环访问对象的属性。当你使用它循环遍历数组时,就像你正在做的那样,"属性"是数组的索引号。

所以这一行:

for(range in chars) {

导致变量range成为每个循环的数字值。在第一个循环中,range的值为零。

第二个循环:

for(value in range) {

永远不会循环。没有什么可以循环的。变量range的值只是一个数字。您无法遍历单个数字。如果你使用调试器,你可以看到每一行正在做什么,并一次执行一行代码。

如果要获取密码中某个字符的索引位置,可以使用indexOf()。例如,如果密码中的字符是字母" i"。

var indexPosition = chars[2].indexOf(char);

indexPosition的值为9.外部数组chars中的第三个数组有一个元素" i"在第9个指数位置。