Мне нужен код для автоматического сохранения копий в листах Google при закрытии шаблона счета, который я сделал - - PullRequest
0 голосов
/ 06 марта 2020

Мне нужен код для автоматического сохранения копий на листах Google при закрытии созданного мной шаблона счета-фактуры - чтобы сохранить его на основе номера счета-фактуры и открыть заново для нового счета-фактуры с номером счета, увеличенным на 1

я включаю ссылку на лист https://docs.google.com/spreadsheets/d/1b4saYo1ruVfpUbUsGVd0Vf3NmjwQo78riuMyWi0OFcg/edit?usp=sharing

на листе есть формулы, которые не должны быть изменены.

мне просто нужно иметь возможность код кнопки, на которую я могу нажать, и он закрывает текущий лист, сохраняя его в формате PDF в онлайн-хранилище, и при повторном открытии номер счета увеличивается на 1

1 Ответ

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

Что у вас есть:

  • Каждый лист представляет собой счет-фактуру с номером

Что вы хотите:

  • Инициируйте новый бланк Счет для выставления
    • Этот новый счет должен иметь уникальный номер = 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

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 с листа. Вы можете сделать это с помощью действия на панели инструментов , например.

...