Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何使用Google应用程序脚本在Google电子表格中合并多个选项卡?_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 如何使用Google应用程序脚本在Google电子表格中合并多个选项卡?

Google apps script 如何使用Google应用程序脚本在Google电子表格中合并多个选项卡?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,如何使用Google应用程序脚本在Google电子表格中合并多个选项卡?所有选项卡中的数据都在不断变化 例如,我在谷歌电子表格中有“Sheet1”、“Sheet2”和“Sheet3”。所有这些表格中的数据有3列-名称、电子邮件ID和地区。现在,我想将这3张表/选项卡中的数据合并/组合到第4张表中,即“第4张”具有相同的列(名称、电子邮件Id和区域)。第4页的数据应为表1的数据,然后是表2,然后是表3。所有3张图纸中的行数不断变化 这不需要脚本。在第四页中,在A2中输入以下公式: ={filter

如何使用Google应用程序脚本在Google电子表格中合并多个选项卡?所有选项卡中的数据都在不断变化


例如,我在谷歌电子表格中有“Sheet1”、“Sheet2”和“Sheet3”。所有这些表格中的数据有3列-名称、电子邮件ID和地区。现在,我想将这3张表/选项卡中的数据合并/组合到第4张表中,即“第4张”具有相同的列(名称、电子邮件Id和区域)。第4页的数据应为表1的数据,然后是表2,然后是表3。所有3张图纸中的行数不断变化

这不需要脚本。在第四页中,在A2中输入以下公式:

={filter(Sheet1!A2:C, len(Sheet1!A2:A)); filter(Sheet2!A2:C, len(Sheet2!A2:A)); filter(Sheet3!A2:C, len(Sheet3!A2:A))}
它返回A-C列的内容,其中A列中的条目为非空,并将它们堆叠在一个数组中

=query({Sheet1!A1:C;Sheet2!A1:C;Sheet3!A1:C},“其中Col1不为null”,0)

我不会用脚本来做这个;工作表公式要快得多,至少在大多数情况下是如此。 确保使用分号分隔范围。分号是数组文字的行运算符的结尾

如果你真的想使用脚本

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);
}

我做了一个可以合并九个标签页,包含更多的行和列

=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}}<>"")
[代码><代码><代码><<代码>=过滤器({{{Sheet1!A1:A1:Q500},{{{{Sheet1!A1!A1:Q500};{{{{{{{{{She撒1!A1:A1:Q500};{{{{{{{Sheet1!A1:A1:A1:Q500};{{{{{{Sheet3!A1:A1:Q500};;{{{{{{{{Sheet3!3!A1!A1:A1:A1:Q500};{{{{{{{{{{{{{{{{{{{{{{{{{{{{{Sheet5!A1!A1!A1!A1!A1!A1:Q500!A1:Q500}}};{{{{{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}};A1!A1};{Sheet7!A1:A500};{Sheet8!A1:A500};{Sheet9!A1:A500}}}')
我想知道这是否是一种概括初始筛选公式的方法,以便您可以剪切和粘贴更多的页码,因此,例如,如果有20或30个选项卡,有25列,您可以轻松地将其合并到一个页面中吗?

您可以使用谷歌应用程序脚本进行此操作

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]);
  } 
}
var ss=SpreadsheetApp.getActiveSpreadsheet();
函数TotalsSheet(){
var totaldata=[];
var sheets=ss.getSheets();
var=2;
对于(变量i=0;i
//此脚本必须更快

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);  




}

例如,我在谷歌电子表格中有“Sheet1”、“Sheet2”和“Sheet3”。所有这些表格中的数据都有3列-名称、电子邮件ID和地区。现在,我想将这3张表/选项卡中的数据合并/组合到第4张表中,即“第4张”具有相同的列(名称、电子邮件Id和区域)。第4页的数据应为表1的数据,然后是表2,然后是表3。所有3张工作表中的行数都在不断变化。我修复了代码,因此它实际上与我创建的通用电子表格一起运行,三张工作表只是用随机数填充,一张空白工作表。您需要根据自己的用例修改它。@soyp的想法是正确的,只需检查每行的第一列即可。我使用一个过滤器扫描组合数组中的空白A1值,然后使用len()函数查找每张表中的行数,然后组合它们。我认为公式应该是:=filter({Sheet1!A1:C500};{Sheet2!A1:C500};{Sheet3!A1:C500};{{Sheet1!A1:A500};{Sheet2!A1:A500};{Sheet3!A1:A500}}),它有一个,而不是一个;安德烈·吉尔说,逗号是过滤函数参数的分隔符。这两种数组结构中都没有。谢谢@tehhowch,我已经做了您的更改。请注意,每次插入一个新工作表可能不是您想要的行为,尤其是使用相同的名称(将只返回最左边的工作表和给定的名称…)。您可能只需要在图纸不存在的情况下插入它