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



我正在使用下面文章中的代码(如何将具有20个选项卡的单个电子表格拆分为单独的表格(不同的文件((,从具有多个选项卡/表格的单个电子数据表中创建单独的文档。

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

谷歌脚本,将电子表格中的表格复制到新的电子表格中,并以特定单元格命名新电子表格

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

我曾尝试使用此端口的代码,但没有成功:

脚本:如何在编辑时将条件格式规则复制并重新应用于区域?

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

这是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 Script项目中包含多个具有migrateSheetsToFiles()函数的代码文件。

请注意,在一个Apps Script项目中,不能有多个同名函数,即使这些函数位于不同的.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);  
};
}
}

最新更新