首页 > 解决方案 > 在从多个选项卡创建单独的电子表格时复制和应用条件格式

问题描述

我正在使用以下帖子中的代码(如何将具有 20 个选项卡的单个电子表格拆分为单独的工作表(不同的文件)</a>)从具有多个选项卡/工作表的单个电子表格创建单独的文档。

这已经比较成功了,但是我一直无法复制格式,既不是单元格的宽度和高度,也不是单元格C2中的两个条件格式规则。为此,我在这篇文章中使用了代码:

Google脚本将电子表格中的工作表复制到新电子表格并在特定单元格后命名新电子表格

不幸的是,该代码只复制值而不是公式。

我尝试使用此端口的代码,但无济于事:

脚本:如何将条件格式规则复制并重新应用到编辑范围?

是否可以在从多个选项卡创建单独的电子表格时复制和应用条件格式?

这是 mu 当前代码:

function migrateSheetsToFiles() {
  var mySheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var toFolderName = 'ScreenerUserFolder';
  var i;
  for(i in mySheets){
    var currentSheet = mySheets[i];
    var oldData = currentSheet.getDataRange().getValues();
    var oldDataFormula = currentSheet.getRange("A2").getFormula();
    var oldDataFormatting = currentSheet.getRange("C2").getFormula();    
    var newFile = SpreadsheetApp.create(currentSheet.getName());
    var newId = newFile.getId();
    var newSheet = newFile.getSheets()[0]
    newSheet.getRange(1,1,oldData.length,oldData[0].length).setValues(oldData);
    newSheet.getRange(2,1,oldData.length,oldData[0].length).setFormula(oldDataFormula);
    newSheet.deleteRow(4).deleteColumn(3).deleteRow(3).deleteColumn(2);
    newSheet.setName(newFile.getName());
    if(toFolderName != ''){
      var fileInDrive = DriveApp.getFileById(newId);
      fileInDrive.makeCopy(fileInDrive.getName(),DriveApp.getFoldersByName(toFolderName).next());
      fileInDrive.setTrashed(true);
    };

  };
}

标签: google-apps-scriptformatconditional-formatting

解决方案


如果要复制包含所有公式和格式的工作表 - 使用copyTo()

样本:

function migrateSheetsToFiles() {
  var mySheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
//  var toFolderName = 'ScreenerUserFolder';
  var i;
  for(i in mySheets){
    var currentSheet = mySheets[i];
    var newFile = SpreadsheetApp.create(currentSheet.getName());
    currentSheet.copyTo(newFile);
    var newId = newFile.getId();    
    if(toFolderName != ''){
      ...
    }
  };
}

注意力

您的源文件在同一个 Apps 脚本项目中包含多个代码文件,其函数名为migrateSheetsToFiles().

请注意,您不能在一个 Apps 脚本项目中拥有多个同名函数 - 即使这些函数位于不同的 .gs 文件中。

我认为这就是您在代码中执行的修改没有通过的原因。


推荐阅读