I improved setting of cell values in r757198. Daily builds can be downloaded 
from http://encore.torchbox.com/poi-svn-build/

cell.setCellValue(string) and cell.setCellValue(number) should not corrupt workbook anymore, regardless if a formula is set or not.

All that I wrote earlier is true.
If a cell contains formula then cell.setCellValue just updates the cached 
formula value.
To remove formula and convert the cell to string or number you need to call 
cell.setCellFormula(null) first.

Regards,
Yegor

There are two possible scenarios when setting value for a formula cell;

 1. Update the pre-calculated value of the formula.
 If a cell contains formula then cell.setCellValue just updates the
pre-calculated (cached) formula value, the formula itself remains and the cell type is not changed

 2. Remove the formula and change the cell type to String or Number:

  cell.setCellFormula(null); //Remove the formula

then
  cell.setCellValue("I changed! My type is CELL_TYPE_STRING now"");
or
  cell.setCellValue(200); //NA() is gone, the real value is 200

I think we can improve cell.setCellValue for the case (1). If the new value conflicts with formula type then IllegalArgumentException should be thrown.

Regards,
Yegor

I am using 3.5 beta 5 ss usermodel.

When I attempt to set a cell containing a formula to another value, it seems to corrupt the workbook. Setting it to a String will cause excel to do a rapair on the workbook when opening it, resulting in the formula still as the cell value. Changing it to a number will cause the value showing to be the number. However, in the formula bar, the formula still shows as the cell value. It is like the cell somehow has both the number and formula value at the same time.

Did I find a bug or do I just not understand what I am doing?

Example code:

String xlsxFilePath = "Path to a new .xlsx file";
FileInputStream in = new FileInputStream(xlsxFilePath);
Workbook wb = WorkbookFactory.create(in);
Sheet sh = wb.getSheet("Sheet1");
Row row = sh.createRow(1);
Cell cell = row.createCell(1);
cell.setCellFormula("NA()");
//comment out 1 of the 2 following lines when testing
cell.setCellValue("Help, I will not change!"); //corrupts workbook
cell.setCellValue(200); //shows 200 but real value is NA()
in.close();
FileOutputStream out = new FileOutputStream(xlsxFilePath);
wb.write(out);
out.close();


Any suggestions are greatly appreciated.

Paul Dobson

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to