慕勒3428872
2023-06-15 17:11:29
嘗試使用執行此代碼時出現以下錯誤。異常:數據中的列數與范圍中的列數不匹配。數據為 0,但范圍為 1。(第 15 行,文件“代碼”)function getName(){ const srcSheetName = "result"; const dstSheetName = "Allergy"; const ss = SpreadsheetApp.getActiveSpreadsheet(); const srcSheet = ss.getSheetByName(srcSheetName); const allergyRange = srcSheet.getRange('F1:BQ' + srcSheet.getLastRow()).getValues(); const dstSheet = ss.getSheetByName(dstSheetName); const lr = dstSheet.getRange("A2:A").getLastRow(); var names = allergyRange.map(row => row.slice(row.length-12)).forEach((row, i) => { if(!row.every(val => val == 0)) return allergyRange[i][0]}); const dstRange = dstSheet.getRange(2, 1, dstSheet.getLastRow(), 1); const dstValues = dstRange.getValues(); const putValues = [names]; dstRange.setValues(putValues);}我認為這是因為名稱變量“名稱”的列太多或所需范圍沒有值。我曾嘗試將“名稱”直接放入 setValues 函數中,但這不起作用,并且我收到另一條錯誤消息“Bad Value”。更新:發生這種情況是因為 [names] 為空。dstRange.setValues(names);我認為潛在的問題是我使用 .map() 方法而不是 Object.assign() 來操作原始二維數組,但是當我在這里查看文獻時它指出 .map() 創建了一個新數組和 JavaScript 視圖數組作為對象。為了診斷問題,我在循環內外都使用 Logger.log 來了解數據集發生了什么。內循環:var names = allergyRange.map(row => row.slice(row.length-12)).forEach((row, i) => { if(!row.every(val => val == 0)) Logger.log(allergyRange[i][0])});外循環: var names = allergyRange.map(row => row.slice(row.length-12)).forEach((row, i) => { if(!row.every(val => val == 0)) return allergyRange[i][0]}); Logger.log(names)在循環內使用時,我得到所需的名稱列表,但在循環外使用時,我在檢查日志時得到“null”。我必須缺少一個關鍵步驟。如何從“名稱”中獲取輸出并使用 setValues() 或其他方法將每個輸出放在 Google 表格中工作表的第一列中?有沒有辦法用循環的輸出創建一個新的二維數組,或者我應該完全使用另一種方法來操縱數據集?我是 JavaScript 的新手,歡迎任何提示。
添加回答
舉報
0/150
提交
取消