Скрипт для копирования листа как новой таблицы не работает хорошо - PullRequest
0 голосов
/ 18 марта 2020

У меня есть этот сценарий для копирования фактического листа в виде новой электронной таблицы со значением из ячейки I2:

function CopySheet(){
var sheet = SpreadsheetApp.getActiveSheet(); // Get current active sheet.
var sheet_name = sheet.getRange("i2").getValue(); // Get the value of cell B1, used to name the new spreadsheet.

var folder = DriveApp.getFolderById("xxxxxxxxxxxxx"); // Get the ID of the folder where you will place a copy of the spreadsheet.

var newSS = SpreadsheetApp.create(sheet_name); // create new blank spreadsheet in a root folder
var asFile = DriveApp.getFileById(newSS.getId()); // get new spreadsheet as a file

folder.addFile(asFile); // add this file to destination folder
DriveApp.getRootFolder().removeFile(asFile); // remove a file from root folder

var copiedSheet = sheet.copyTo(newSS); // copy active sheet to new spreadsheet
copiedSheet.setName(sheet_name); // rename copied sheet
newSS.deleteSheet(newSS.getSheetByName('Sheet1')); // remove "Sheet1" sheet which was created by default in new spreadsheet
}

Сценарий прекрасно копирует лист как новую электронную таблицу, но уродливый "Лист1". Когда сценарий приходит к строке 15: newSS.deleteSheet(newSS.getSheetByName('Sheet1')); я получаю ошибку: Исключение: Аргумент n ie mo bye być zerowy: sheet (wiersz 15, plik „Kod”) - Аргумент не может быть нулевым: sheet (строка 15, файл «Kod») ).

Пожалуйста, за помощью.

1 Ответ

0 голосов
/ 18 марта 2020

Как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Проблема и обходное решение:

Я подумал, что в вашем случае имя листа по умолчанию может быть не "Лист1". Как обходной путь, как насчет удаления листа по умолчанию без использования имени листа?

Модифицированный скрипт выглядит следующим образом. Пожалуйста, измените ваш скрипт следующим образом.

Модифицированный скрипт:

С:
newSS.deleteSheet(newSS.getSheetByName('Sheet1'));
Кому:
newSS.deleteSheet(newSS.getSheets()[0]);

или

newSS.deleteSheet(newSS.getSheets().filter(function(s) {return s.getSheetId() == 0})[0]);

Ссылка:

Если я неправильно понял ваш вопрос и это не то направление, в котором вы хотите, я приношу свои извинения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...