1. Чтобы скопировать только значения, вы можете изменить
ss.copyTo(newSheet);
на
ss.copyTo(newSheet, SpreadsheetApp.CopyPasteType.PASTE_VALUES)
Документация здесь
Чтобы переименовать окончательную электронную таблицу в строковое значение в ячейке исходного листа, вам необходимо:
I. Получите название из оригинального листа, используя следующую строку:
var newFileName = ss.getRange("B7").getValue(); // if the name is in B7
II. Установите для имени нового файла это значение, изменив
os.setName(tabName);
на
os.setName(newFileName);
Редактировать
Танаике-сан прав. Попробуйте вместо этого скопировать только отображаемые значения и вставить их в новую вкладку:
function tabToSheet(gDrive, tabName, fileName, destination){
var sh = SpreadsheetApp.openById(gDrive);
var ss = sh.getSheetByName(tabName);
// Get values to be copied and the name of the new tab to be created.
var valuesOnly = ss.getDataRange().getDisplayValues();
var newFileName = ss.getRange("B7").getValue(); // if the name is in B7
// Create a new document in the location given
var newSheet = SpreadsheetApp.create("TEMPDELETEME");
var newTab = newSheet.getSheets()[0];
// Post values and rename tab
newTab.getRange(1, 1, valuesOnly.length, valuesOnly[0].length).setValues(valuesOnly);
newTab.setName(newFileName);
var id = newSheet.getId();
var file = DriveApp.getFileById(id);
var folder = DriveApp.getFolderById(destination);
var finalId = file.makeCopy(fileName, folder).getId();
file.setTrashed(true);
return finalId;
}
Создание временной копии и ее удаление не являются строго необходимыми. Это может быть более эффективным, чтобы сделать это:
function tabToSheet(gDrive, tabName, fileName, destination){
var sh = SpreadsheetApp.openById(gDrive);
var ss = sh.getSheetByName(tabName);
// Get values to be copied and the name of the new tab to be created.
var valuesOnly = ss.getDataRange().getDisplayValues();
var newFileName = ss.getRange("B7").getValue(); // if the name is in B7
//create a new document in the location given
var newSheet = SpreadsheetApp.create(fileName);
var newTab = newSheet.getSheets()[0];
// Post values and tab name
newTab.getRange(1, 1, valuesOnly.length, valuesOnly[0].length).setValues(valuesOnly);
newTab.setName(newFileName);
var id = newSheet.getId();
var file = DriveApp.getFileById(id);
var folder = DriveApp.getFolderById(destination).addFile(file);
DriveApp.removeFile(file); // to remove it from the root folder
return id;
}