I've made some test, and it seems this is the solution.
I've reverted all my changes, and replaced

// If the row exist in destination, push down all rows by 1 else create a new 
row
if (newRow != null) {
    worksheet.shiftRows(destinationRowNum, worksheet.getLastRowNum(), 1);
} else {
    newRow = worksheet.createRow(destinationRowNum);
}

with

if(newRow == null)
{
    newRow = worksheet.createRow(destinationRowNum);
}

and now the generated excel is identical to the one I had before, but is 
generated in a fraction of the time.

Thanks everyone.

Raffaele

On 27/02/2012 19:19, Raffaele Castagno wrote:
Oh my...I think I found it...

Original was:

// If the row exist in destination, push down all rows by 1 else create a new 
row
if (newRow != null) {
    worksheet.shiftRows(destinationRowNum, worksheet.getLastRowNum(), 1);
} else {
    newRow = worksheet.createRow(destinationRowNum);
}

I've commented all leaving only

    newRow = worksheet.createRow(destinationRowNum);

And now I'm down to 60sec to process all rows!

Probably, there's some dirt in my template which was causing POI to shift 
everything at each iteration.

I'll have to double-check my final excel for correctness, but I think I solved 
it!

Thanks everyone!

Raffaele C.

On 27/02/2012 14:37, Nick Burch wrote:
On Mon, 27 Feb 2012, Raffaele Castagno wrote:
You can estimate parsing time by calling the formula parser explicitly:

         Ptg[] ptgs = HSSFFormulaParser.parse(formula, workbook);

Are you sure it is the bottleneck?

Tried some variations, been unable to test explicit formula parsing

You should try it, the code Yegor posted above is all you need. That will let 
you be sure if it's the formula parsing or something else

Nick



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

Reply via email to