首页 > 解决方案 > 谷歌表格在将表格合并到另一个表格时保存表格样式

问题描述

当我将它们组合成一个主工作表时,我需要保存工作表的样式。这是代码:

function myFunction() 
 {
   var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
   var newSheet = activeSpreadsheet.getSheetByName("MainSheet");
   
   if (newSheet != null) {
        activeSpreadsheet.deleteSheet(newSheet);
    }

   newSheet = activeSpreadsheet.insertSheet();
   newSheet.setName("MainSheet");
   const ss = SpreadsheetApp.getActiveSpreadsheet();
   const allSheets = ss.getSheets();
   const allSheets_names=allSheets.map(sheet=>sheet.getSheetName())  
   const dataRange = "A1:M";
   const checkRange = "A1:A";
   const neededSheets = ["Cats", "Dogs"];
   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);
      }
    }
  )
}

目前,我正确获取了所有信息。在主表的一侧,我得到包含单词“狗”的表,在主表的另一侧,我得到包含单词“猫”的表。问题是我合并所有表格后字体和颜色消失了。组合床单时应该如何保持样式?

这是 MainSheet 的示例,说明它的外观,但它也应该采用工作表中的所有样式。 MainSheet 示例

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


您可以使用copyTo将格式从一张纸复制到另一张纸。请参阅此处的文档。

这是一个基于脚本的最小示例,它将格式复制到工作mainSheetCatsDogs. 此脚本假定该脚本将附加到它要操作的电子表格中,您可能已经在这样做了。

function myFunction() {
   const ss = SpreadsheetApp.getActiveSpreadsheet();
   const mainSheet = ss.getSheetByName("MainSheet");
   const neededSheets = ["Cats", "Dogs"];  
  
   mainSheet.clearFormats().clear() // clear formatting and values on main sheet
   
   
  for(var i=0; i<neededSheets.length; i++) 
     {
      var sheet = ss.getSheetByName(neededSheets[i]) ;
      var values = sheet.getRange(1,1,sheet.getLastRow(),13).getValues(); 
      mainSheet.getRange(1,i*13+1, values.length, values[0].length).setValues(values);
       
      var sourceRange = sheet.getRange(1,1,sheet.getLastRow(),13) // define the range that has the formatting you want to copy
      var targetRange = mainSheet.getRange(1,i*13+1, values.length, values[0].length) // define the range that you want to copy the formatting to
      sourceRange.copyTo(targetRange, {formatOnly:true}) // copy the format
      
     }
}


推荐阅读