2

私は 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)

しかし、これはあまりきれいなコードではなく、後でクライアントが使用するのは簡単ではありません。これを行うより良い方法はありますか?

4

1 に答える 1

1

あなたの問題とは直接関係ありませんが、カスタム処理を行うために、Excelクラスの一部を自分のものでラップしていることに気付きました。たとえば、HSSFWorkbooksを直接操作するのではなく、HSSFWorkbookを含むExcelWorkbookクラスを操作します。これを行った理由は、関連するヘルパーメソッドをクラスに追加するためであり、変更しない他のメソッドについては、HSSFWorkbookインスタンスに渡すだけです。動作をオーバーライドするために使用している関連クラスを拡張することもできますが、それらのソースコードを調べて、何も壊れていないことを確認することをお勧めします。

于 2010-02-17T14:24:49.860 に答える