Apache POI Excel Индексирование строк и столбцов - PullRequest
2 голосов
/ 16 февраля 2010

Я использую Apache POI для создания большой электронной таблицы Excel, которая чрезвычайно сложна для клиента и может впоследствии изменить код моей программы новыми формулами. Большая проблема, с которой я сталкиваюсь, связана с тем фактом, что книги POI индексируются по 0 для их строк и столбцов, а формулы Excel обрабатывают документ так, как если бы он был индексирован по 1. Я использую класс помогли сделать преобразования прямо сейчас:

class RowHelper {
    public static int getCell(int col) {
        return col - 1;
    }

    public static String getCellAddress(int row, int col) {
        return CellReference.convertNumToColString(col) + row;
    }
}

И когда я редактирую строки в документе, я пишу это так:

posRow.getCell(RowHelper.getCell(189)).setCellFormula(String.format("COUNT(%1$s:%2$s)", RowHelper.getCellAddress(2, 177), RowHelper.getCellAddress(ActiveSheet.getPhysicalNumberOfRows(), 177)));
//=COUNT(FU2:FU477)

Но это не очень чистый код, и клиенту будет нелегко использовать его позже в будущем. Есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 17 февраля 2010

Хотя это не имеет прямого отношения к вашей проблеме, я обнаружил, что оборачиваю некоторые классы Excel своими собственными для выполнения пользовательской обработки. Например, я не работаю с HSSFWorkbooks напрямую, я работаю с моим классом ExcelWorkbook, который содержит HSSFWorkbook. Я сделал это потому, что добавил в класс соответствующие вспомогательные методы, а для других методов, которые я не изменяю, я просто передаю экземпляр HSSFWorkbook. Вы также можете расширить соответствующие классы, с которыми вы работаете, чтобы переопределить поведение, но вы можете посмотреть их исходный код, чтобы убедиться, что вы ничего не нарушаете.

...