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

Включить пользовательский ввод в моем приложении на основе электронных таблиц

Новые требования: добавить новые расходы Некоторое время назад я перевернул файл Excel моей коллеги Мишель… Помеченный как java, электронная таблица, excel.

Некоторое время назад я превратил файл Excel моей коллеги Мишель в веб-приложение для онлайн-отчетов о бюджете, чтобы избавить ее от множества ручных процедур. Недавно у нее появилось новое требование, добавляющее новые расходы. Она хотела добавить новые расходы в ведомость и объединить новые расходы в текущем сводном отчете.

Если вы новичок в моем блоге, вот как выглядит сводный отчет:

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

Как мы можем сделать здесь кнопку? Это было очень просто. Мишель только что объединила несколько ячеек и установила свой предпочтительный цвет фона в шаблоне Excel.

Чтобы выполнить новое требование, Мишель понадобилась форма для ввода новых расходов. Я попросил ее открыть шаблон Excel и добавить новый лист с таблицей и кнопкой “Готово”. Она также использовала формулы (например, =C4*D4 ) в столбце промежуточных итогов (столбец E).

Чтобы избежать случайного удаления формул, она защитила весь лист и установила A4:D7 как “разблокированный”. Следовательно, она может вводить новые расходы только в разблокированном диапазоне.

Как вы, возможно, заметили, все, что Мишель добавила в таблицы до сих пор, можно сделать в Excel без каких-либо навыков программирования. Все, что мне (как разработчику) нужно сделать, это взять этот обновленный файл Excel и импортировать его в Kekkai, не спрашивая ее, что она изменила. Затем обновленный файл становится нашим новым пользовательским интерфейсом.

После того, как она закончила, настала моя очередь добавить логику приложения, лежащую в основе этих 2 листов (резюме и новая форма расходов). Когда Мишель нажала “Добавить мои новые расходы”, Кейкай должен переключиться на новый бланк формы расходов.

Вот код для добавления onCellClick прослушиватель и выберите НОВЫЙ лист формы расходов в классе контроллера:

public class BudgetComposer extends SelectorComposer {
...
    @Listen(Events.ON_CELL_CLICK + "= #spreadsheet")
    public void onClick(CellMouseEvent event) {
        Range cell = Util.getClickedCell(event);
        if ("Add my new expense".equals(cell.getCellValue())){
            spreadsheet.setSelectedSheet(NEW);
        }...
    }

...
}

Заключительная часть состоит в том, чтобы прочитать новые расходы, когда Мишель нажала кнопку “Готово”.

Давайте обновим предыдущий прослушиватель событий для нажатия кнопки “Готово”:

    @Listen(Events.ON_CELL_CLICK + "= #spreadsheet")
    public void onClick(CellMouseEvent event) {
        Range cell = Util.getClickedCell(event);
        if ("Add my new expense".equals(cell.getCellValue())){
            ...
        }else if ("Done".equals(cell.getCellValue())){
            readExpense();
            spreadsheet.setSelectedSheet(SUMMARY);
            loadExpenseToSheet();
        }
    }

Через Диапазон API, я могу считывать данные ячейка за ячейкой, чтобы создать объект Expense :

    private Expense readExpense(int row, int col) {
        Expense expense = new Expense();
        expense.setCategory(Ranges.range(spreadsheet.getSelectedSheet(), row, 1).getCellData().getStringValue());
        Double value = Ranges.range(spreadsheet.getSelectedSheet(), row, 2).getCellData().getDoubleValue();
        expense.setQuantity(value == null? 0 : value.intValue());
        value = Ranges.range(spreadsheet.getSelectedSheet(), row, 4).getCellData().getDoubleValue();
        expense.setSubtotal(value == null? 0 : value.intValue());
        return expense;
    }

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

Оригинал: “https://dev.to/hawkchen/enable-user-input-in-my-spreadsheet-based-app-2k3b”