亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在二維數組上運行 .map() 后用數據填充列

如何在二維數組上運行 .map() 后用數據填充列

慕勒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 的新手,歡迎任何提示。
查看完整描述

1 回答

?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

我相信你的目標如下。


當“數據”表中的單元格 BF2:BQ 中有值時,您想從同一行的“F”列中檢索值,并將值放入“過敏”表中。

您希望使用 Google Apps 腳本實現此目的。

在這種情況下,我想建議在“更新:”部分修改您的底部腳本。


修改腳本:

function newNames(){

  var ss = SpreadsheetApp.getActiveSpreadsheet();

  var data = ss.getSheetByName("result");

  var cdata = ss.getSheetByName("result");

  var valuesOfFormData = data.getRange("F2:BQ" + data.getLastRow()).getValues();  // Modified

  var valuesForOrderChanges = valuesOfFormData.reduce((ar, [c,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ...d]) =>{

    if (d.some(e => e.toString() != "")) ar.push([c]);  // Modified

    return ar;

  }, []);

  if (valuesForOrderChanges.length > 0) {

    cdata.getRange(2, 1, valuesForOrderChanges.length, valuesForOrderChanges[0].length).setValues(valuesForOrderChanges);  // Modified

  }

}


查看完整回答
反對 回復 2023-06-15
  • 1 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號