2016-06-09 43 views
3

如何使用Google App脚本合并Google Spreadsheet中的多个标签?所有选项卡中的数据不断变化。如何使用Google App脚本合并Google Spreadsheet中的多个标签?

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

+0

例如,我在Google电子表格中有'Sheet1','Sheet2'和'Sheet3'。所有这些表中的数据都有3列 - 姓名和电子邮件地址。现在,我想将这3张/标签中存在的数据合并/组合成第四张,即具有相同列(姓名,电子邮件地址和地区)的“工作表4”。第四张纸应该有数据 - Sheet1的数据,然后Sheet2和Sheet3。所有3张中的行数不断变化。 – aks

回答

5
= 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); 
} 
+0

该公式返回错误。 –

+0

我修复了代码,因此它实际上是使用我创建的通用电子表格运行的,三张表单中只是填充了随机数字,还有一张空白表格。您需要修改它以适合您自己的用例。 – HardScale

+0

@soyp有正确的想法,只需检查每行的第一列。我使用一个过滤器来扫描组合数组中的空白A1值,汤姆使用len()函数来查找每个工作表中的行数,然后将它们合并。哪种方式更好或更快取决于你的上下文。 – HardScale

2

您不需要为此的脚本。在第四片材,在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中的条目不为空,并堆叠在它们一个阵列的内容。

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列,你能不能轻松整合到一个页面?

相关问题