You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@poi.apache.org by Tony Nelson <tn...@starpoint.com> on 2008/09/10 17:06:46 UTC
Re: #Value in MS Office - MAY have found an answer.
Anthony Andrews wrote:
> Morning Tony,
>
> Found a fix that appears to be in both 3.1 final and 3.5 beta 1
> archives. There is a static method you can use like this;
>
> cell = row.createCell((short)0);
> cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
> cell.setCellFormula("SUM(A1:A10)");
>
> cell = row.createCell((short)1);
> cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
> cell.setCellFormula("SUM(B1:B10)");
>
> row = sheet.createRow(11);
>
> cell = row.createCell((short)1);
> cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
> cell.setCellFormula("IF(B11=0,0,A11/B11)");
>
> HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);
>
> I would imagine that if you have a workbook containing multiple sheets
> where each sheet holds hundreds of cells with forumlae then there
> could be a performance hit but it does seem to overcome the immediate
> problem.
>
> Make sure that you check the results; I did not, simply opening the
> workbook and not seeing the #Value error message staring back at me
> was enough!!
>
I wish I could replicate your results. Unfortunately, this still didn't
fix my problem. I will try the head branch from SVN today, if I can
figure out how to compile it ;)
Here the lastest code I've tried, and I always end up with the #Value.
I really do appreciate your attempts to help me.
Tony
-------------
import org.apache.poi.hssf.usermodel.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;
/**
*/
public class BorkedFormula
{
public static void main(String[] args)
{
final File outfile = new File("/tmp/borked.xls");
if (outfile.exists())
{
outfile.delete();
}
final HSSFWorkbook workbook = new HSSFWorkbook();
final HSSFSheet sheet = workbook.createSheet("Borked");
final HSSFFormulaEvaluator evaluator = new
HSSFFormulaEvaluator(sheet, workbook);
final Random random = new Random(System.currentTimeMillis());
HSSFRow row;
HSSFCell cell;
for (int i = 0; i < 10; i++)
{
row = sheet.createRow(i);
for (short col = 0; col < 2; col++)
{
double val = random.nextDouble() * 100;
cell = row.createCell(col);
cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
cell.setCellValue(val);
}
}
row = sheet.createRow(10);
evaluator.setCurrentRow(row);
cell = row.createCell((short)0);
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("SUM(A1:A10)");
evaluator.evaluateFormulaCell(cell);
cell = row.createCell((short)1);
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("SUM(B1:B10)");
evaluator.evaluateFormulaCell(cell);
row = sheet.createRow(11);
evaluator.setCurrentRow(row);
cell = row.createCell((short)1);
cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
cell.setCellFormula("IF(B11=0,0,A11/B11)");
evaluator.evaluateFormulaCell(cell);
HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);
FileOutputStream fos = null;
try
{
fos = new FileOutputStream(outfile);
workbook.write(fos);
}
catch (IOException e)
{
System.out.println("Whoops: " + e.getMessage());
System.exit(8);
}
finally
{
try
{
if (fos != null)
{
fos.close();
}
}
catch (IOException e)
{
System.out.println("Closing the stream failed, we have
issues.");
System.exit(9);
}
}
System.exit(0);
}
}
Re: #Value in MS Office - MAY have found an answer.
Posted by Tony Nelson <tn...@starpoint.com>.
On Sep 10, 2008, at 11:06 AM, Tony Nelson wrote:
> Anthony Andrews wrote:
>> Morning Tony,
>>
>> Found a fix that appears to be in both 3.1 final and 3.5 beta 1
>> archives. There is a static method you can use like this;
>>
>> [snip]
> I wish I could replicate your results. Unfortunately, this still
> didn't fix my problem. I will try the head branch from SVN today,
> if I can figure out how to compile it ;)
>
> Here the lastest code I've tried, and I always end up with the #Value.
>
> I really do appreciate your attempts to help me.
>
> Tony
>
>
Good news.. testing against SVN trunk fixes every issue. The original
code snippet I sent in works fine. No need to use the evaluator at
all..
So.. any ideas when we can expect a new release?
Thanks again for everyones help.
Tony
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
For additional commands, e-mail: user-help@poi.apache.org