如何使用Google App Script合并Google电子表格中的多个标签?

时间:2016-06-09 13:20:30

标签: google-apps-script google-sheets

如何使用Google App Script合并Google电子表格中的多个标签?所有标签中的数据都在不断变化。

例如,我有' Sheet1',' Sheet2'和' Sheet3'在Google电子表格中。所有这些表格中的数据都有3列 - 姓名和电子邮件ID&区域。现在,我想将这3张/标签中的数据合并/合并到第4张表格中,即表格4'具有相同的列(名称,电子邮件ID和区域)。第四张表应该有数据 - Sheet1的数据,然后是Sheet2,然后是Sheet3。所有3张纸中的行数不断变化。

5 个答案:

答案 0 :(得分:6)

= filter({{Sheet1!A1:C500};{Sheet2!A1:C500};{Sheet3!A1:C500}},{{Sheet1!A1:A500};{Sheet2!A1:A500};{Sheet3!A1:A500}}<>"")

我没有测试过这个。它只是作为一种可能的解决方案突然出现在我脑海中。我不会为此使用脚本; YMMV的工作表公式要快得多,至少在大多数情况下都是如此。 确保使用分号分隔页面部分,否则它将不起作用。分号是数组文字的End_Of_Row运算符。

如果你真的想使用脚本......

function combineSheets() {
  var sApp = SpreadsheetApp.getActiveSpreadsheet();
  var s1= sApp.getSheetByName("Sheet1");
  var s2= sApp.getSheetByName("Sheet2");
  var s3= sApp.getSheetByName("Sheet3");
  var s4= sApp.getSheetByName("Sheet4");
  //  If Sheet4 doesn't exist you'll need to create it here.

  var s1values = s1.getRange(1,1,s1.getLastRow(),3).getValues();
  var s2values = s2.getRange(1,1,s2.getLastRow(),3).getValues();
  var s3values = s3.getRange(1,1,s3.getLastRow(),3).getValues();

  //  Now, we can put out all together and stuff it in Sheet4
  var s4values = [];
  s4values =  s1values.concat(s2values,s3values);
  s4.getRange(1,1,s4values.length,3).setValues(s4values);
}

答案 1 :(得分:4)

您不需要脚本。在第四张表格中,在A2中输入以下公式:

<a href="https://www.facebook.com/dialog/feed?app_id=1111111111111111&display=popup&message=test&summary=test2&link=http%3A%2F%2Fwww.google.com%2F&description=Lorem ipsum dolor sit amet&picture=https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97150&w=350&h=150&name=myName&caption=my%20fancy%20caption&redirect_uri=google.de&mood=reading" target="_blank" title="Share on Facebook">Share on Facebook</a>

返回列A-C的内容,其中A列中的条目为非空,并将它们堆叠在一个数组中。

答案 2 :(得分:1)

您可以使用Google Apps脚本。

var ss = SpreadsheetApp.getActiveSpreadsheet();
function TotalsSheet() {
  var totaldata = [];
  var sheets = ss.getSheets();
  var totalSheets = 2;

  for (var i=0; i < totalSheets; i++) {
    var sheet = sheets[i];
    var range = sheet.getDataRange();
    var values = range.getValues();

    for (var row in values) {
      totaldata.push(values[row]);
    }
  }
  return totaldata; 
}

function Start() {
  var All = ss.insertSheet("All-Values");
  var totaldata = TotalsSheet();
  for (var i = 0; i < totaldata.length; i++) {
    All.appendRow(totaldata[i]);
  } 
}

答案 3 :(得分:0)

我做了一个会做九个标签的选项。合并,包含更多行和列。

=filter({{Sheet1!A1:Q500};{Sheet2!A1:Q500};{Sheet3!A1:Q500};{Sheet4!A1:Q500};{Sheet5!A1:Q500};{Sheet6!A1:Q500};{Sheet7!A1:Q500};{Sheet8!A1:Q500};{Sheet9!A1:Q500}},{{Sheet1!A1:A500};{Sheet2!A1:A500};{Sheet3!A1:A500};{Sheet4!A1:A500};{Sheet5!A1:A500};{Sheet6!A1:A500};{Sheet7!A1:A500};{Sheet8!A1:A500};{Sheet9!A1:A500}}<>"")

我想知道这是否是一种概括初始过滤器公式的方法,以便您可以剪切和粘贴更多的工作表编号,例如,如果有20个或30个选项卡包含25个列,您是否可以合并轻松进入一个页面?

答案 4 :(得分:0)

//此脚本必须更快

function consolidateData(){

  // defined all variables
  var sheetNames = [];
  var dataSheet = [];
  var dataValues = [];
  var conso=[];
  var header = [["Name","email ID","Region"]];
  var ws = SpreadsheetApp.getActiveSpreadsheet();

  // get all sheets
  var allsheets = ws.getSheets();

  for(var s in allsheets){
    var sheet = allsheets[s];    
    sheetNames[s] = sheet.getName();
    dataSheet[s] = ws.getSheetByName(sheetNames[s]);

    // adding all sheet's data to a single variable
    conso = conso.concat(dataSheet[s].getRange("A2:C"+dataSheet[s].getLastRow()).getValues());  
  }

  // writing data into new sheet
  var newSheet = ws.insertSheet().setName("Consolidated_Data");
      newSheet.getRange("A1:C1").setValues(header);
      newSheet.getRange("A2:C"+(conso.length+1)).setValues(conso);  




}