首页 > 解决方案 > 谷歌表格将多张表格与脚本合并为一张表格

问题描述

我需要将几张纸与脚本组合成一张纸。此外,在组合工作表时,我需要通过将它们的名称检查到两列来将它们分开。例如,包含单词“cat”的工作表应位于左列,包含单词“dog”的工作表应位于右列。目前,我有一个脚本,可以将具有特定单词的所有工作表过滤到一个数组中。我是谷歌表格的新手,任何帮助将不胜感激。

这是我当前的脚本:

function myFunction() 
 {
 var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var newSheet = activeSpreadsheet.getSheetByName("AllSheets");

if (newSheet != null) {
    activeSpreadsheet.deleteSheet(newSheet);
}

newSheet = activeSpreadsheet.insertSheet();
newSheet.setName("AllSheets");
   const ss = SpreadsheetApp.getActiveSpreadsheet();
   const allSheets = ss.getSheets();
   const allSheets_names=allSheets.map(sheet=>sheet.getSheetName())  

   const neededSheets= ["Cat", "Dog"];
   
   const filteredListOfSheetsNames = []   
   neededSheets.forEach(ns =>allSheets_names.forEach( (as,index) =>
       {if (as.indexOf(ns)>-1){filteredListOfSheetsNames.push(as)}}))                   
       const filteredListOfSheets =  filteredListOfSheetsNames.map(name =>ss.getSheetByName(name))  
           
}

标签: google-apps-scriptgoogle-sheets

解决方案


最好是创建两个数组 - 用于汇总表的两个不同范围

  • 一个你附加“猫床单”,另一个“狗床单”
  • 由于您已经正确地找到并排序了您感兴趣的工作表,因此您可以在内部循环中定义一个辅助数组(每种类型的工作表都有一个单独的数组),您可以将来自一种类型的所有工作表的数据附加到该数组中
  • 将此数组设置为目标工作表的所需范围(边)
  • 了解原始表格的(最大)尺寸以正确划分目标表格的最小/右侧非常重要。

样本:

function myFunction() 
{
  var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var newSheet = activeSpreadsheet.getSheetByName("AllSheets");  
  if (newSheet != null) {
    activeSpreadsheet.deleteSheet(newSheet);
  }  
  newSheet = activeSpreadsheet.insertSheet();
  newSheet.setName("AllSheets");
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const allSheets = ss.getSheets();
  const allSheets_names=allSheets.map(sheet=>sheet.getSheetName())    
  const neededSheets= ["Cat", "Dog"];  
  const filteredListOfSheetsNames = [];       
  neededSheets.forEach(function(ns){  
    var i = neededSheets.indexOf(ns);
    filteredListOfSheetsNames[i]=[];
    allSheets_names.forEach( (as,index) => {                            
      if (as.indexOf(ns)>-1){
        filteredListOfSheetsNames[i].push(as);
        }
      }
    )
    const filteredListOfSheets  =  filteredListOfSheetsNames[i].map(name =>ss.getSheetByName(name));  
    var array = [];
    filteredListOfSheets.forEach(function(sheet){var values = sheet.getRange(1,1,sheet.getLastRow(),13).getValues(); array.push(values);});
    array = [].concat.apply([],array);
    if(array.length > 0){
      newSheet.getRange(1,i*13+1, array.length, array[0].length).setValues(array);
      }
    }
  )
}


推荐阅读