Google apps script 如何使用Google应用程序脚本在Google电子表格中合并多个选项卡?
如何使用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
例如,我在谷歌电子表格中有“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,我已经做了您的更改。请注意,每次插入一个新工作表可能不是您想要的行为,尤其是使用相同的名称(将只返回最左边的工作表和给定的名称…)。您可能只需要在图纸不存在的情况下插入它