javascript - 谷歌表格在将表格合并到另一个表格时保存表格样式
问题描述
当我将它们组合成一个主工作表时,我需要保存工作表的样式。这是代码:
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);
}
}
)
}
目前,我正确获取了所有信息。在主表的一侧,我得到包含单词“狗”的表,在主表的另一侧,我得到包含单词“猫”的表。问题是我合并所有表格后字体和颜色消失了。组合床单时应该如何保持样式?
解决方案
您可以使用copyTo
将格式从一张纸复制到另一张纸。请参阅此处的文档。
这是一个基于脚本的最小示例,它将格式复制到工作mainSheet
表Cats
和Dogs
. 此脚本假定该脚本将附加到它要操作的电子表格中,您可能已经在这样做了。
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
}
}
推荐阅读
- javascript - 团队主动消息和图形 API 令牌
- r - R中的ggplot2:为什么箱形图填充颜色很苍白?
- spring - Spring Kafka bean 配置 - 为什么调用 bean 方法而不是 autowire?
- javascript - 限制 Javascript 执行数量 +/-
- discord - discord.py 上的意外缩进
- r - dplyr 可以从 as.character 字符串中删除所有点吗?
- java - 如何将同义词添加到 Java 中的 switch 语句?
- package - 当 nuget.config 中的自定义包文件夹时,repositoryPath 不起作用
- javascript - Animate.css 承诺有时不会在动画结束后清理类
- node.js - 使用 Mongoose 在 MongoDB 上避免重复