It is a limitation of POI: you have to re-read the workbook object
after you call workbook.write(out).
There is a plan to fix it in future version of POI, but for now you
have to re-read to avoid XmlValueDisconnectedException

Yegor

On Thu, Aug 23, 2012 at 11:19 PM, lramakri
<[email protected]> wrote:
> Hi,
>
> We have an excel file that is pre-created with fancy charts and formulae
> that cross-reference sheets. It also contains macros. Source data is
> supposed to be copy-pasted into one sheet and the rest of workbook populates
> itself from pre-existing wiring.
>
> Note: I really don't care about reading / modifying other sheets in this
> workbook, I just need to save the pains of copy-pasting raw data every time
> to this data sheet in this workbook.
>
> I'm using Apache POI and trying to create a XSSFWorkbook instance from this
> "template" excel file. However, it takes a long time (almost a minute
> consistently across many runs) for this object to be constructed. The excel
> file itself is just around 400KB, not a big file. I profiled this using
> jconsole, it seems like it is not limited by either CPU or Heap - It uses
> just around 90 MB heap memory (I had started it up with 2GB committed heap)
> and around 52% CPU.
>
> It takes a very short time to actually populate the data sheet with raw data
> and write the final updated file out (roughly 3-4 seconds). Here is my
> startup code:
>
> public static void startup() throws FileNotFoundException, IOException {
>     long start = System.nanoTime();
>     System.out.println("Started...");
>     TEMPLATE_WORKBOOK = new XSSFWorkbook(new FileInputStream(new
> File(TEMPLATE)));
>     long end = (System.nanoTime() - start) / NANOS;
>     System.out.println("It took " + end + " seconds..");
> }
>
> I thought about loading up this TEMPLATE_WORKBOOK once and then reuse the
> same handle to write new data for every subsequent request - I simulated
> this with a sleep and a forever-while in my main class. But I can't do this
> apparently, I got an exception "Exception in thread "main"
> org.apache.xmlbeans.impl.values.XmlValueDisconnectedException". The
> TEMPLATE_WORKBOOK object is not re-usable.
>
> I do see that there is an event-based API, but before I get into it, I
> wanted to see if I'm missing something here! Again, memory / CPU is not an
> issue here, we have plenty of heap to spare. I'm trying to reduce time.
>
> Any tips / insights would be deeply appreciated!
>
>
>
> --
> View this message in context: 
> http://apache-poi.1045710.n5.nabble.com/Construction-of-XSSFWorkbook-very-slow-for-xlsm-workbooks-tp5710769.html
> Sent from the POI - User mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> 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