1 | 2 | =A1+B1 |
2 | 2 | |
3 | 2 | |
4 | 2 |
という数式のセルをPOIでコピーしようとし
destCell.setCellValue(srcCell.getCellFormula();
って行ったら
1 | 2 | =A1+B1 |
2 | 2 | =A1+B1 |
3 | 2 | =A1+B1 |
4 | 2 | =A1+B1 |
こうなって全部3が入ってた(T_T)
ふざけんじゃねーよww
1 | 2 | =A1+B1 |
2 | 2 | =A2+B2 |
3 | 2 | =A3+B3 |
4 | 2 | =A4+B4 |
ってなるにはどうなるか調べたら結構処理が多かった(^_^;)
/** * セルをコピーする。 * @param srcCell コピー元 * @param destCell コピー先 */ private void copyCell2Cell(Cell srcCell, Cell destCell) { String formula = srcCell.getCellFormula(); EvaluationWorkbook ew; FormulaRenderingWorkbook rw; Ptg[] ptgs; if (workbook instanceof HSSFWorkbook) { ew = HSSFEvaluationWorkbook.create((HSSFWorkbook) workbook); ptgs = FormulaParser.parse(formula, (HSSFEvaluationWorkbook) ew, FormulaType.CELL, getActiveSheet()); rw = (HSSFEvaluationWorkbook) ew; } else { ew = XSSFEvaluationWorkbook.create((XSSFWorkbook) workbook); ptgs = FormulaParser.parse(formula, (XSSFEvaluationWorkbook) ew, FormulaType.CELL, getActiveSheet()); rw = (XSSFEvaluationWorkbook) ew; } for (Ptg ptg : ptgs) { // 座標の計算 int shiftRows = destCell.getRowIndex() - srcCell.getRowIndex(); int shiftCols = destCell.getColumnIndex() - srcCell.getColumnIndex(); if (ptg instanceof RefPtgBase) { RefPtgBase ref = (RefPtgBase) ptg; if (ref.isColRelative()) { ref.setColumn(ref.getColumn() + shiftCols); } if (ref.isRowRelative()) { ref.setRow(ref.getRow() + shiftRows); } } else if (ptg instanceof AreaPtg) { AreaPtg ref = (AreaPtg) ptg; if (ref.isFirstColRelative()) { ref.setFirstColumn(ref.getFirstColumn() + shiftCols); } if (ref.isLastColRelative()) { ref.setLastColumn(ref.getLastColumn() + shiftCols); } if (ref.isFirstRowRelative()) { ref.setFirstRow(ref.getFirstRow() + shiftRows); } if (ref.isLastRowRelative()) { ref.setLastRow(ref.getLastRow() + shiftRows); } } } destCell.setCellFormula(FormulaRenderer.toFormulaString(rw, ptgs)); }
やっぱりGoogle先生は答えを知ってるね(ノ´∀`*)
0 件のコメント:
コメントを投稿