0

我有一個提交給Google電子表格的Google表單。在電子表格中,我有一個Google Apps腳本,用於加密提交的密碼。但無論出於何種原因,它都會將一個空字符串寫入加密密碼的位置。這真的開始強調我了。這裏是我的代碼:Google電子表格腳本會寫空字符串

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)函數被設置爲當表單提交到電子表格時運行。另外請注意,我已經修改了字符數組的內容,試圖讓我的加密保密。這應該不會有所作爲,因爲其餘代碼保持不變。

如何修復我的腳本,使其實際上將加密密碼寫入電子表格而不是空字符串?

回答

1

你有兩個用於/在循環:

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」的第九索引位置。

+0

謝謝!我的密碼加密腳本現在可用。 –

相關問題