Я сделал формат счета на g листе, как показано ниже:
В ячейке B8: C8 (ниже Invoice To) есть раскрывающийся список, который получает данные излист клиента.
Что требуется?
- Для создания PDF выбранных ячеек. Позже я хочу добавить некоторые кнопки и назначить им макросы / сценарии, и действие g g print напечатает все на листе. Поэтому нужно печатать только раздел счета (диапазон-A1: G46). Имя листа будет именем клиента + Дата счета-фактуры (F8).
Я использовал некоторый скрипт из стека над потоком, но они добавляют поля. То, что я хочу, - это полный PDF-файл, который я могу получить, если использую кнопку печати (ctrl + p).
Сохранение данных счета-фактуры на листе «Счет-фактура» для отслеживания счета-фактуры и платежей по ним. Это также достигается.
Я могу добиться этого, записав макрос с использованием относительных ссылок.
function Untitledmacro1() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
spreadsheet.getRange('A1').activate();
spreadsheet.getCurrentCell().getNextDataCell(SpreadsheetApp.Direction.DOWN).activate();
spreadsheet.getCurrentCell().offset(1, 0).activate();
spreadsheet.getCurrentCell().setFormulaR1C1('=R[-1]C[0]+1');
spreadsheet.getCurrentCell().offset(0, 1).activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
spreadsheet.getRange('Invoice!E8').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
spreadsheet.getCurrentCell().offset(0, 1).activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
spreadsheet.getRange('Invoice!F8').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
spreadsheet.getCurrentCell().offset(0, 1).activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
spreadsheet.getRange('Invoice!B8:C8').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
spreadsheet.getCurrentCell().offset(0, 2).activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Invoice Register'), true);
spreadsheet.getRange('Invoice!F16').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
После сохранения данных счета-фактуры и создания файла PDF с определенным диапазоном ячеек я хочу очистить данные в определенных полях. Это также достигается.
function clearRange() {
//replace 'Sheet1' with your actual sheet name
var sheet = SpreadsheetApp.getActive().getSheetByName('Invoice');
sheet.getRange('B8:C8').clearContent(); // client name
sheet.getRange('C12:F15').clearContent(); // Invoice items - description, date/period, amount
}
Добавьте 1 номер к номеру счета. Формат номера счета-фактуры соответствует сегодняшней дате + текущий месяц + номер счета-фактуры / год (например, 06111/1920). Поэтому нам нужно добавить от 1 до 5 символа для следующего счета.
Я использовал приведенную ниже формулу и добился этого:
=CONCATENATE(0, DAY(F8),MONTH(F8), COUNTA('Invoice Register'!B2:B99)+1,"/",21920)
Но хотел бы сделать сценарийдля этого также.
По сути, я создал инструмент выставления счетов-фактур в Excel, используя VBA, и теперь самая большая проблема заключается в том, что всякий раз, когда я экспортирую PDF из Excel, он показывает белые поля справа, независимо от устранения неполадок.
Полагаю, кнопки очевидны, и всякий раз, когда я нажимаю «Новый счет», номер счета увеличивается на 1.
Извините за длинный постЯ должен был сделать это как можно более понятным, и я совершенно новичок в скриптах приложений Google. Любая помощь очень ценится и спасибо.