Я нахожусь в том состоянии от начального до среднего в программировании, где я знаю достаточно, чтобы собрать воедино что-то, что может быть довольно сложным, но, возможно, я не делаю этого наилучшим образом, получаю тупик, и это определенно не оптимизировано.
Я создал генератор счетов-фактур, который берет данные, введенные с листа, и переводит их в тот же шаблон в документах Google. Я хочу иметь скрипт, который берет информацию о кавычках и копирует строки в шаблон в документах, если строка не пуста, и в этом случае она переходит к следующему.
Пока я достигэто путем указания каждой ячейки в качестве независимой переменной и копирования их по отдельности, независимо от того, заполнены они или нет.
Это работает, но это не кажется наиболее эффективным решением, и довольно быстро становится болью, так какнам все еще нужно исправить форматирование в сгенерированном документе с цитатами.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sinput = ss.getSheetByName("QUOTE TEMPLATE");
//TO GENERATE DOCUMENT
var templateId = '1jIxHUZAoVd00a9eTZM-ORL0H7qMLfEmyat04l89GNwE';
//devis
var item1 = sinput.getRange("B18").getValues();
var item2 = sinput.getRange("B19").getValues();
var item3 = sinput.getRange("B20").getValues();
var qty1 = sinput.getRange("C18").getValues();
var qty2 = sinput.getRange("C19").getValues();
var qty3 = sinput.getRange("C20").getValues();
var unitprice1 = sinput.getRange("D18").getValues();
var unitprice2 = sinput.getRange("D19").getValues();
var unitprice3 = sinput.getRange("D20").getValues();
var total1 = sinput.getRange("E18:G18").getValues();
var total2 = sinput.getRange("E19:G19").getValues();
var total3 = sinput.getRange("E20:G20").getValues();
//Make a copy of the template file
var documentId = DriveApp.getFileById(templateId).makeCopy().getId();
//Get the document body as a variable
var body = DocumentApp.openById(documentId).getBody();
//All the text to be replaced
body.replaceText('%DESCRIPTION_STRING1%', item1 );
body.replaceText('%DESCRIPTION_STRING2%', item2 );
body.replaceText('%DESCRIPTION_STRING3%', item3 );;
body.replaceText('%Q1%', qty1 );
body.replaceText('%Q2%', qty2 );
body.replaceText('%Q3%', qty3 );
body.replaceText('%PRIC1%', unitprice1 );
body.replaceText('%PRIC2%', unitprice2 );
body.replaceText('%PRIC3%', unitprice3);;
body.replaceText('%TOTAL_1%', total1 );
body.replaceText('%TOTAL_2%', total2);
body.replaceText('%TOTAL_3%', total3 );;
}
Это сокращенная версия, поскольку исходный код учитывает 20 различных строк ввода, может быть, больше. В настоящее время любые пустые ячейки приводят к экспорту запятой (,) в документ Google.
Я бы хотел:
- уменьшить длину кода
- сделать код быстрее
- создать код для пропуска пустых строк
- используйте что-то, что не
body.replaceText
, но я не могу понять, как правильно выразить "если строка пуста, просто перейти к следующему биту" в коде.
У меня за плечами около 6 месяцев опыта, поэтому я считаю себя все еще очень большим учеником. Любая помощь или понимание приветствуется!