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

Copy and apply conditional formatting while creating separate spreadsheets from multiple tabs

我正在使用以下 post () 中的代码从具有多个 tabs/sheets.

的单个电子表格创建单独的文档

这个比较成功,但是我没能复制格式,无论是单元格的宽度和高度,还是单元格C2中的两个条件格式规则。为此,我使用了 post 中的代码:

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

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

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

这是 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);
    };

  };
}

如果要复制包含所有公式和格式的工作表 - 使用 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 文件中。

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

感谢您的贡献。多亏了这个,我提出了代码并进行了相应的修改。

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());
        var newId = newFile.getId();
           currentSheet.copyTo(newFile);
    var source = newFile.getSheetByName("Sheet1");
        newFile.deleteSheet(source);
    if(toFolderName != ''){
    var files = DriveApp.getFolderById("1rooBctI9qRbcpQSIR79S76xMSJchSmK4");
        files.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT);
      files.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.VIEW);
      var oldData = currentSheet.getRange('a1').getValues();
        newFile.getRange('a1').setValues(oldData);
  var targetFolder = DriveApp.getFolderById("1rooBctI9qRbcpQSIR79S76xMSJchSmK4");
    var file = DriveApp.getFileById(newId);
        file.moveTo(targetFolder);  
};
}
}