Что у вас есть:
- Каждый лист представляет собой счет-фактуру с номером
Что вы хотите:
- Инициируйте новый бланк Счет для выставления
- Этот новый счет должен иметь уникальный номер =
previous number
+ 1
Для выполнения sh вам потребуется:
- Получить текущий лист (текущий счет)
- Скопировать лист
- Я бы предложил переименовать его в номер счета для более легкого поиска
- Обновление номера текущего счета.
- Удаление старого содержимого счета на исходном листе (ранее называемый текущим листом)
Пошаговое руководство
Предварительная настройка
Я сделал копию на основе предоставленного вами листа. Я сделал несколько модификаций, таких как удаление лишних столбцов и строк, чтобы упростить жизнь.
На основе этой копии давайте сохраним некоторую информацию о нашем листе в переменной.
В коде скрипта Apps для этот лист, давайте напишем:
const fieldsA1 = {
invoiceNumber : "F5",
salesperson : "A14" //As an example of a field we want to clear later
};
function generateNewInvoice() {
}
Получить текущий лист
var spreadsheet = SpreadsheetApp.getActive(); //Gets the current spreadsheet file
var currentInvoice = SpreadsheetApp.getActiveSheet(); //Get the open Sheet (the current invoice)
Скопируйте лист
var copyInvoice = spreadsheet.duplicateActiveSheet(); //Creates a copy of currentInvoice and assign it to copyInvoice
Переименуйте и стилизуйте новый лист
В этом случае я выбрал стиль нового листа в следующем формате:
![Example output](https://i.stack.imgur.com/Frg7C.png)
copyInvoice.setName("Invoice " + currentInvoice.getRange(fieldsA1.invoiceNumber).getValue());
copyInvoice.setTabColor("red"); //For example, to highlight the tab
Обновление номера текущего счета
var newInvoiceNumber = Number(currentInvoice.getRange(fieldsA1.invoiceNumber).getValue())+1; //Gets a new invoice number by adding 1 to the current Invoice Number
currentInvoice.getRange(fieldsA1.invoiceNumber).setValue(newInvoiceNumber);
Удалите старое содержимое из исходного листа
//Other operations that might be interesting for your invoice
currentInvoice.getRange(fieldsA1.salesperson).clear(); //Reset salesperson
Окончательный результат
const fieldsA1 = {
invoiceNumber : "F5",
salesperson : "A14" //As an example of a field we want to clear later
};
function generateNewInvoice() {
var spreadsheet = SpreadsheetApp.getActive(); //Gets the current spreadsheet file
var currentInvoice = SpreadsheetApp.getActiveSheet(); //Get the open Sheet (the current invoice)
var copyInvoice = spreadsheet.duplicateActiveSheet(); //Creates a copy of currentInvoice and assign it to copyInvoice
copyInvoice.setName("Invoice " + currentInvoice.getRange(fieldsA1.invoiceNumber).getValue());
copyInvoice.setTabColor("red"); //For example, to highlight the tab
var newInvoiceNumber = Number(currentInvoice.getRange(fieldsA1.invoiceNumber).getValue())+1; //Gets a new invoice number by adding 1 to the current Invoice Number
currentInvoice.getRange(fieldsA1.invoiceNumber).setValue(newInvoiceNumber);
//Other operations that might be interesting for your invoice
currentInvoice.getRange(fieldsA1.salesperson).clear(); //Reset salesperson
}
Теперь нужно просто запустить функцию generatedNewInvoice
с листа. Вы можете сделать это с помощью действия на панели инструментов , например.