Есть ли способ сделать много копий файла электронной таблицы и выбрать имя для каждого файла в Google Apps Script

#javascript #google-apps-script #google-sheets #google-drive-api

#javascript #google-apps-script #google-sheets #google-drive-api

Вопрос:

Итак, на данный момент у меня есть приведенная ниже функция, которая определенно работает, чтобы сделать как можно больше копий Google Sheets. Например, ниже будет сделано 3 копии Google Sheets (на самом деле я хочу сделать более 40 копий).

У меня возникли проблемы с поиском способа автоматического изменения имен файлов, чтобы это было имя каждого пользователя, а затем «- System» для каждой копии.

Это то, что у меня сейчас есть:

     function copyDocs() {
        for(i=0; i<3; i  ){
        var drive=DriveApp.getFileById('SheetsID');
        drive.makeCopy();
  }
}
  

Я бы хотел сделать что-то вроде этого:

 var people = Array("Johnson Henry", "Person Last", "Tierra Smith")

function copyDocs() {
    for(i=0; i<3; i  ){ 
    var drive=DriveApp.getFileById('SheetsID');
    drive.makeCopy(people[i] amp; " - System");
  }
}
  

Кто-нибудь из вас знает способ изменить мой код, чтобы сделать это? Обратите внимание, что я новичок в Apps Script, поэтому, пожалуйста, простите мне недостаток знаний здесь.

Комментарии:

1. Была ли ошибка при вашей попытке?

2. Я думал, что у него ошибка, но проблема в следующем: below will make 3 copies of a Google Sheets (in reality, I'll want to make 40 copies). я считаю, что он просто хочет использовать длину массива вместо печатной 3 копии. @TheMaster

Ответ №1:

Вы можете сделать это более эффективным способом.

Вы можете использовать forEach() для перебора элементов people массива, а затем использовать литералы шаблонов для присвоения файлам соответствующих имен:

 function copyDocs() { 
  
  const drive=DriveApp.getFileById('SpreadsheetID');
  const people = ["Johnson Henry", "Person Last", "Tierra Smith"];
 
  people.forEach(person=>{
    var copy = drive.makeCopy( `${person} - System`)
    var copySpreadsheet = SpreadsheetApp.openById(copy.getId());
    var copySheet = copySpreadsheet.getSheets()[0];
    copySheet.getRange('B2').setValue(person);
});
}
  

Комментарии:

1. Спасибо, Мариос! Вы также знаете, есть ли у меня способ изменить конкретную ячейку на имя каждого человека (например, я бы хотел, чтобы ячейка B2 = имя каждого человека)? Я думал, что смогу разобраться в этом самостоятельно.

2. @vvquiuno Я отредактировал свой ответ. Но, пожалуйста, любые дополнительные вопросы следует задавать в отдельном сообщении. Пожалуйста, отправьте новый вопрос, если у вас возникнут дополнительные проблемы.

3. @vvquiuno в моем обновленном решении getSheets()[0] указывает, что только на первом листе будет указано имя пользователя в ячейке B2. Если вам нужен второй лист, тогда скажите getSheets()[1] . Если вам нужны все из них, вам нужно снова перебрать их все с помощью цикла forEach. Но все эти изменения следует задать в другом сообщении.

4. Большое вам спасибо, Мариос! Это решение работает для меня, но я обязательно опубликую в другом комментарии, если появится что-нибудь еще.