Динамический Fomuna POI - PullRequest
0 голосов
/ 02 июня 2018

У меня есть два значения, фиксированное, но динамическое в ячейке, которое после создания Excel должно быть в состоянии изменить его, и согласно этой модификации формула обновит другую ячейку.

Double ausencias = 4.0;

Cell cellDesgloseCalendario = rowDesglose.createCell(cellnum++);
cellDesgloseCalendario.setCellValue(160.0);//value that the user should be able to change later

////
String strFormula= "=ausencias/cellDesgloseCalendario";
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula(strFormula);
Cell cellDesglosePorcentajeAbsentismo = rowDesglose.createCell(cellnum++);
cellDesglosePorcentajeAbsentismo.setCellFormula(strFormula);

Как я могу динамически занять позицию столбца: "cellDesgloseCalendario" (e: "A10", "B20"), так как они создаются с несколькими циклами, и я не знаю их положение,создать формулу деления этого столбца на мою переменную "ausencias"

1 Ответ

0 голосов
/ 03 июня 2018

Ячейка знает, что это адрес.Получить его можно через Cell.getAddress .Таким образом, можно объединить адрес в строку формулы.

Но вы не должны начинать строку формулы с "=" в apache poi, так как это не ожидается.См. Поддержка формул - основы .

Полный пример:

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class CreateExcelFormulaUsingCellAddress {

 public static void main(String[] args) throws Exception {

  Workbook wb = new XSSFWorkbook();
  Sheet sheet = wb.createSheet();
  Row rowDesglose = sheet.createRow(0);

  Double ausencias = 4.0;

  int cellnum = 0;

  Cell cellDesgloseCalendario = rowDesglose.createCell(cellnum++); // cellDesgloseCalendario is A1
  cellDesgloseCalendario.setCellValue(160.0);

  String strFormula = ausencias.toString() + "/" + cellDesgloseCalendario.getAddress().formatAsString();
                   // 4.0                     /    A1
System.out.println(strFormula); //"4.0/A1"

  Cell cellDesglosePorcentajeAbsentismo = rowDesglose.createCell(cellnum++); // cellDesglosePorcentajeAbsentismo is B1
  cellDesglosePorcentajeAbsentismo.setCellFormula(strFormula); //formula in B1 is now =4/A1

  wb.write(new FileOutputStream("CreateExcelFormulaUsingCellAddress.xlsx"));
  wb.close();
 }

}
...