Рубрики
Без рубрики

Автоматизируйте обработку листов Excel с помощью Java

Пример использования обработки листов, мой коллега Пенни из отдела кадров должна выполнить обычную проверку… Помеченный как веб, электронная таблица, java, excel.

кейкай (Серия из 5 Частей)

Моя коллега Пенни из отдела кадров каждый месяц должна выполнять рутинную задачу: составлять ведомости заработной платы для всех сотрудников компании. Существует лист, содержащий таблицу всех сотрудников с информацией о зарплате:

И она должна создать ведомости расчета заработной платы для каждого человека в списке на основе шаблона листа:

Чтобы избежать копирования ячейки за ячейкой вручную, я создаю веб-приложение с помощью Keikai для чтения данных о зарплате строка за строкой и создания ведомостей расчета заработной платы. Весь процесс заключается в:

Я создаю электронную таблицу Kekkai, записывая теги и атрибуты в формате ZK framework , который представляет собой платформу пользовательского интерфейса, основанную на Java EE. Я создаю электронную таблицу Kekkai, записывая теги и атрибуты в формате ZK framework , который представляет собой платформу пользовательского интерфейса, основанную на Java EE. Указав в атрибуте src путь к файлу, Kekkai может импортировать мой

    

Я создаю электронную таблицу Kekkai, записывая теги и атрибуты в формате || ZK framework ||, который представляет собой платформу пользовательского интерфейса, основанную на Java EE. Указав в атрибуте || src|| путь к файлу, Kekkai может импортировать мой || Payroll.xlsx || . Когда я захожу на зулу с помощью браузера, Keikai отображает файл:

Я создаю электронную таблицу Kekkai, записывая теги и атрибуты в формате ZK framework , который представляет собой платформу пользовательского интерфейса, основанную на Java EE. Указав в атрибуте

Я создаю электронную таблицу Kekkai, записывая теги и атрибуты в формате ZK framework , который представляет собой платформу пользовательского интерфейса, основанную на Java EE. Указав в атрибуте src путь к файлу, Kekkai может импортировать мой Payroll.xlsx

Я создаю электронную таблицу Kekkai, записывая теги и атрибуты в формате ZK framework , который представляет собой платформу пользовательского интерфейса, основанную на Java EE. Указав в атрибуте

Я создаю электронную таблицу Kekkai, записывая теги и атрибуты в формате ZK framework , который представляет собой платформу пользовательского интерфейса, основанную на Java EE. Указав в атрибуте src путь к файлу, Kekkai может импортировать мой

Я создаю электронную таблицу Kekkai, записывая теги и атрибуты в формате || ZK framework ||, который представляет собой платформу пользовательского интерфейса, основанную на Java EE. Указав в атрибуте || src|| путь к файлу, Kekkai может импортировать мой || Payroll.xlsx || . Когда я захожу на zulu с помощью браузера, Kekkai отображает файл: платформа ZK проанализирует страницу zul выше и создаст экземпляр Java-объекта Keikai (|| Электронная таблица ||) для нашего контроля. Затем я также создаю контроллер Java, || PayrollComposer || для доступа к объекту Java Keikai и применяю контроллер на странице по адресу || Appliкогда я нажму на ячейку, Keikai начнет создавать платежные ведомости. После этого я могу создать объект || Диапазон || (||кнопка генерации |кнопка генерации.диапазон по имени (лист, “Генерировать”); |) с именем: ||, в ячейку. Генерирую, я даю имя, делаю ячейку похожей на кнопку на листе. Составитель платежной ведомости” y || атрибут: || применить=”io.kekkai.devref.база данных.

Я создаю электронную таблицу Kekkai, записывая теги и атрибуты в формате || ZK framework ||, который представляет собой платформу пользовательского интерфейса, основанную на Java EE. Указав в атрибуте || src|| путь к файлу, Kekkai может импортировать мой || Payroll.xlsx || . Когда я захожу на zulu с помощью браузера, Kekkai отображает файл: платформа ZK проанализирует страницу zul выше и создаст экземпляр Java-объекта Keikai (|| Электронная таблица ||) для нашего контроля. Затем я также создаю контроллер Java, || PayrollComposer || для доступа к объекту Java Keikai и применяю контроллер на странице по адресу || Appliкогда я нажму на ячейку, Keikai начнет создавать платежные ведомости. После этого я могу создать объект || Диапазон || (кнопка ||сгенерировать Вот соответствующий фрагмент кода: кнопка |генерировать.диапазон по имени (лист, “Генерировать”); |) с именем: ||, в ячейку. Генерирую, я даю имя, делаю ячейку похожей на кнопку на листе. Составитель платежной ведомости” y || атрибут: || применить=”io.kekkai.devref.база данных.

public class PayrollComposer extends SelectorComposer{

    @Wire("spreadsheet")
    private Spreadsheet spreadsheet;
    final private static String EMPLOYEE_SHEET = "Payroll";
    private Range generateButton;
    private Sheet sheet;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        sheet = spreadsheet.getBook().getSheet(EMPLOYEE_SHEET);
        generateButton = Ranges.rangeByName(sheet, "Generate");
    }
...

Я создаю электронную таблицу Keikai, записывая теги и атрибуты в zul фреймворка ZK , который представляет собой фреймворк пользовательского интерфейса, основанный на Java EE. Указав в атрибуте src путь к файлу, Keikai может импортировать мой

    @Listen(Events.ON_CELL_CLICK + "=spreadsheet")
    public void onCellClick(CellMouseEvent e) {
        String sheetName = e.getSheet().getSheetName();
        switch (sheetName) {
            case EMPLOYEE_SHEET:
                if (RangeHelper.isRangeClicked(e, generateButton))
                    fillPayrollSlips();
                break;
        }
    }

Я создаю электронную таблицу Keikai, записывая теги и атрибуты в zul фреймворка ||ZK ||, который представляет собой фреймворк пользовательского интерфейса, основанный на Java EE. Указав в атрибуте || src|| путь к файлу, Keikai может импортировать мой || Payroll.xlsx || . Когда я захожу в zul с помощью браузера, Keikai отображает файл: платформа ZK проанализирует страницу zul выше и создаст экземпляр Java-объекта Keikai (|| Электронная таблица ||) для нашего контроля. Затем я также создаю контроллер Java, || PayrollComposer || для доступа к объекту Java Keikai и применяю контроллер на странице по адресу || Appliкогда я нажму на ячейку, Keikai начнет создавать платежные ведомости. После этого я могу создать объект || Range|| (||generateButton Вот соответствующий фрагмент кода: |generateButton.Rangebynкогда нажата кнопка, она просто начинает заполнять платежные ведомости. ||generateButton || нажата или нет: затем я регистрирую прослушиватель событий для нажатия ячейки (кнопки) с помощью || @Listen || и проверяю, включена ли кнопка (лист, “Сгенерировать”); | ) с именем: ||, в ячейку. Генерирую, я даю имя, делаю ячейку похожей на кнопку на листе. Составитель платежных ведомостей” y || атрибут: || применить=”io.keikai.devref.база данных.

Я создаю электронную таблицу Keikai, записывая теги и атрибуты в zul фреймворка ZK , который представляет собой фреймворк пользовательского интерфейса, основанный на Java EE. Указав в атрибуте

private void fillPayrollSlips() {
    String tableName = "PayrollTable";
    Range payrollRange = Ranges.rangeByName(sheet, tableName);
    List> employeeSalaries = getEmployeeSalaries(payrollRange);
    generateAllPayrollSlips(employeeSalaries);
}

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

Имя столбца <==> Именованный диапазон

Следовательно, я могу заполнять данные в простом цикле. Просто клонируйте ( cloneSheet() ) лист шаблона и заполните каждое поле указанным диапазоном.

    private void generateAllPayrollSlips(List> employeeSalaries) {
        for (Map employee : employeeSalaries) {
            Sheet payrollSheet = Ranges.range(spreadsheet.getBook().getSheet("Form"))
                    .cloneSheet((String) employee.get("Name"));
            for (String field : employee.keySet()) {
                Ranges.rangeByName(payrollSheet, field).setCellValue(employee.get(field));
            }
        }
    }

С именованным диапазоном мне не нужно жестко кодировать адрес ячейки в коде, что делает код более устойчивым к изменению макета листа.

Я смог превратить эту ручную задачу копирования-вставки Excel в автоматизированную задачу менее чем за 100 строк. Я надеюсь, что вы найдете этот пример интересным. Вы можете ознакомиться с полным кодом на Github

кейкай (Серия из 5 Частей)

Оригинал: “https://dev.to/hawkchen/automate-excel-sheet-processing-with-java-hb4”