将 3 google 个电子表格同时导入另一个

Import 3 google spreadsheet at same time into another

使用此脚本,我可以将一个跨页sheet导入到选项卡中的另一个跨页sheet。

function importA() {
var values1 = SpreadsheetApp.openById('xxxurl').
  getSheetByName('xxxname').getRange('A1:DE300').getValues(); 
SpreadsheetApp.getActive().getSheetByName('TAB').
  getRange(1,1,values1.length,values1[0].length).setValues(values1)
  }

现在,我想依次导入 3 个 spreadsheet(在同一个选项卡中),同时保留每个 sheet 行的任何增加。

我该如何继续?

我使用的是 getSheetByName 而不是 openByID,但您可以理解。

function test() {
  try {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheets = ["Sheet1","Sheet2","Sheet3"];
    for( var i=0; i<sheets.length; i++ ) {
      importA(sheets[i]);
    }
  }
  catch(err) {
    console.log(err);
  }
}

function importA(name) {
  try {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sh1 = ss.getSheetByName("TAB");
    sh1.clear() // if you want to erase old data in TAB
    var sh2 = ss.getSheetByName(name);
    var r1 = sh1.getDataRange();
    var r2 = sh2.getDataRange();
    // to prevent a blank line at the top
    var i = r1.getNumRows() === 1 ? 0 : 1;
    sh1.getRange(r1.getNumRows()+i,1,r2.getNumRows(),r2.getNumColumns()).setValues(r2.getValues());
  }
  catch(err) {
    console.log(err);
  }
}

将所有传播sheets sheets合并为一个sheet

function mergeSpreadsheetsAllIntoOneSheet() {
  const ss = SpreadsheetApp.getActive();
  ['id1', 'id2', 'id3'].forEach((id, i) => {
    let sss = SpreadsheetApp.openById(id);
    sss.getSheets().forEach(sh => {
      let vs = sh.getDataRange().getValues();
      let a = [...Array.from(new Array(vs[0].length).keys(), x => (x == 0)?sss.getName():sh.getName())];
      vs.unshift(a);
      let ash = ss.getSheets()[0];
      if (vs && vs.length > 0) {
        ash.getRange(ash.getLastRow() + 1, 1, vs.length, vs[0].length).setValues(vs);
      }
    });
  });
}

您可以试试这个代码,看看它是否适合您:

    function collectAll() {

    createNew(); //this can be removed for instances that you would need to run the two functions separately.
    SpreadsheetApp.flush();

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheets = ["TAB1","TAB2","TAB3"];
    for( var i=0; i<sheets.length; i++ ) {
     if (sheets[i] == "TAB1"){
       var sh = ss.getSheetByName('TAB1');
       var range1 = sh.getRange(1,1, sh.getLastRow(), sh.getLastColumn()).getValues();
       Logger.log(range1);
     }
     else if (sheets[i] == "TAB2"){
       var sh = ss.getSheetByName('TAB2');
       var range2 = sh.getRange(1,1, sh.getLastRow(), sh.getLastColumn()).getValues();
       Logger.log(range2);
     }
     else if (sheets[i] = "TAB3"){
     var sh = ss.getSheetByName('TAB3');
     var range3 = sh.getRange(1,1, sh.getLastRow(), sh.getLastColumn()).getValues();
       Logger.log(range3);
     }
    }
    var range = range1.concat(range2,range3);
    Logger.log(range);
    ss.getSheetByName('TAB').getRange(1,1, range.length, sh.getLastColumn()).setValues(range);
}

function createNew() { //This function creates the Tabs from 3 different sheets using Sheet ID
  var sheets = ["ID1","ID2","ID3"]; //Spreadsheet ID goes here
  for (i=0; i<sheets.length; i++ ) {
  var ssh = SpreadsheetApp.openById(sheets[i]);
  var values = ssh.getSheetValues(1,1, ssh.getLastRow(), ssh.getLastColumn());
  var create = SpreadsheetApp.getActive().insertSheet('TAB'+(1+i));
  create.getRange(1,1, ssh.getLastRow(), ssh.getLastColumn()).setValues(values);
  Logger.log(create);
  }
}

它所做的是将每个选项卡的所有值分配给它自己的变量 range1range2range3,然后将所有值连接到一个 range,然后将值设置为名为“TAB”的 sheet。