Как прочитать несколько выбранных строк и скопировать их в отдельные документы? - PullRequest
0 голосов
/ 24 мая 2019

Я создаю сценарий, который читает строки выбранных ячеек и копирует данные в несколько документов. Когда я тестирую код с одной ячейкой, скрипт возвращает копию шаблона.

Я создал функцию скрипта Google, которая, когда пользователь выбирает ячейку:

  • Считывает каждую ячейку строки, в которой находится выбранная ячейка
  • Создать копию шаблона документа
  • Прокрутите строку и вставьте их в скопированный документ соответственно
  • Отправить сообщение пользователю, когда закончите

Процесс обычно занимает 3 секунды на сценарий, и пользователь обычно использует его 50 раз в день (а также открывает каждый документ по отдельности, чтобы распечатать их).

Я хотел бы улучшить процесс, создав новую функцию, которая позволяет пользователю выбирать несколько ячеек строк, в которых скрипт создает несколько документов (как только я это сделаю, я улучшу функцию, объединив документы в один файл. поэтому пользователю нужно будет открыть только один файл для печати). Я написал следующий код, который использует getActiveRangeList().getRanges() для чтения выбранных строк, однако всякий раз, когда я отлаживаю код, activeRows содержит только Range.

var activeSheet = SpreadsheetApp.getActiveSheet();
var activeRows = activeSheet.getActiveRangeList().getRanges();
// header row is used to select the fillable areas of the doc and replace them
var headerRow = activeSheet.getRange(1, 1, 1, 13).getValues();
// reads number of columns, ie 13
var numberOfColumns = activeSheet.getMaxColumns();
// reads number of rows, selected by user only
var numberOfRows = activeRows[0].length;

for (var rowIndex = 0; rowIndex < activeRows.length; rowIndex++) 
{    
    var copyFile = DriveApp.getFileById(VOUCHER_ID).makeCopy(),
        copyId = copyFile.getId(), 
        copyDoc = DocumentApp.openById(copyId), 
        copyBody = copyDoc.getActiveSection()

    for (var columnIndex = 0; columnIndex < activeRows[rowIndex].length; columnIndex++)
    {
        copyBody.replaceText('%' + headerRow[0][1] + '%', Utilities.formatDate(new Date (activeRows[rowIndex][1]), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), 'dd/MM/yy \nHH:mm'))
        .
        .
        .
    }       
    copyDoc.setName('Voucher ' + activeRows[0][0] + " - " + activeRows[0][2])  
    copyDoc.saveAndClose()  
  }

Я попытался протестировать, выделив одну ячейку и запустив функцию, в результате чего был создан один шаблон без замены текста.

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