簡體   English   中英

將多張工作表中的數據合並到一張工作表上

[英]Merge Data From Multiple Sheets Onto 1 Sheet

我正在創建一個腳本,將多個 Google 工作表中的數據合並到一個。

由於我是新手,所以我無法找出我不斷遇到的錯誤。 它在腳本的第 26 行指出“異常:未找到范圍”。

我假設,也許錯誤地認為我在變量中使用的范圍有問題,關於哪些數據要合並到主表上。 但改變它似乎並沒有幫助。

非常感謝任何提示、建議或嘗試。

這是工作表的鏈接。 https://docs.google.com/spreadsheets/d/1hv9zANMWzDBpKDWQ3hbDjX4nezEtOoptFbY0PYn_c5Y/edit?usp=sharing

這是腳本的代碼。

function

    myFunction() {
    //FILTER({'Workout1'}) !E15:AA26,"DATA TAB 1 - ROW             "&ROW('Workout1'!E15:E26)},'Workout1'!E15:E26<>"");
//FILTER({'Workout2'}) !E15:AA26,"DATA TAB 2 - ROW "&ROW('Workout2'!E15:E26)},'Workout2'!E15:E26<>"");
//FILTER({'Workout3'}) !E15:AA26,"DATA TAB 3 - ROW "&ROW('Workout3'!E15:E26)},'Workout3'!E15:E26"");
//FILTER({'Workout1'}) !E15:AA26,"DATA TAB 1 - ROW "&ROW('Workout1'!E15:E26)},'Workout1'!E15:E26<>"");
//setvariables
const masterSheet = "Data";
const ignoreSheets = ["Dashboard"];
const dataRange = "E15:AA26";
const checkRange = "E15:E26";
//end set variables
const ss = SpreadsheetApp.getActiveSpreadsheet(); 
const allsheets = ss.getSheets();
const filteredlistofsheets = allsheets.filter(s => ignoreSheets.indexOf(s.getSheetName()) == -1);

let formulaArray = filteredlistofsheets.map(s => `FILTER({'${s.getSheetName()}'$!{datarange},"${s.getSheetName()} - ROW "&ROW('${s.getSheetName()}!${checkRange},ROW "&ROW('${s.getSheetName()}'!${checkRange}<>"")`);
let formulaText = "={" + formulaArray.join(";") + "}";

ss.getSheetByName(masterSheet).getRange("masterSheetFormulaCell").setformula(formulaText);
}

非常感謝。

您可以使用REDUCE在沒有腳本的情況下執行此操作。

=QUERY(
  REDUCE({0,0,0,0}, 
         {"Workout1",
          "Workout2",
          "Workout3"},
          LAMBDA(acc,cur, 
                {acc;
                 INDIRECT(cur&"!E15:E26"),
                 BYROW(INDIRECT(cur&"!K15:O26"),LAMBDA(row,IFERROR(AVERAGE(row)))),
                 BYROW(INDIRECT(cur&"!Q15:U26"),LAMBDA(row,IFERROR(AVERAGE(row)))),
                 BYROW(INDIRECT(cur&"!W15:AA26"),LAMBDA(row,IFERROR(AVERAGE(row))))})
  ),
  "select Col1, 
   sum(Col2), 
   sum(Col3), 
   avg(Col4)
   where Col1 is not null
   group by Col1 
   label Col1 'Exercise', 
         sum(Col2) 'Reps For Each Set',
         sum(Col3) 'Weight Per Set (lbs.)',
         avg(Col4) 'Rest Between Sets (sec.)'",1)
function mergeAllToFirst() {
  const ss = SpreadsheetApp.openById("Spreadsheet ID");
  let sht;
  ss.getSheets().forEach((sh, i) => {
    if (i == 0) {
      sh.clearContents()
      sht = sh;
    } else {
      let vs = sh.getDataRange().getValues();
      sht.getRange(sht.getLastRow() + 1, 1).setValue(sh.getName());
      sht.getRange(sht.getLastRow() + 1,1,vs.length,vs[0].length).setValues(vs);
    }
  })
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM