从多个选项卡创建单独的电子表格时复制和应用条件格式
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);
};
}
}
我正在使用以下 post (
这个比较成功,但是我没能复制格式,无论是单元格的宽度和高度,还是单元格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);
};
}
}