| 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 件のコメント:
コメントを投稿