Related: https://bz.apache.org/bugzilla/show_bug.cgi?id=57919

On Jan 12, 2017 02:23, "Dominik Stadler" <dominik.stad...@gmx.at> wrote:

> Hi,
>
> that sound like a bug, there were some discussions before about
> save-behavior and ways to save changes back to the same file, however I
> think we should not write back to the original file in some obscure
> automated way like you describe, can you create a bug-report with the
> sample code so one of us takes a closer look?
>
> For now the workaround sounds valid.
>
> Dominik.
>
> On Thu, Jan 12, 2017 at 10:12 AM, Burkhard Losch <
> burkhard.lo...@kisters.de>
> wrote:
>
> > Dear All,
> > we use XSSFWorkbook, create it with a file name (not with an
> InputStream),
> > and make modifications on the workbook.
> >
> > If we close the workbook, sometimes the changes are written, sometimes
> > not.
> >
> > It looks like, if we call the write function with any outputstream, the
> > later call to close will overwrite the initial file. But if I don't call
> > write, the initial file remains unchanged.
> > I think, there are two issues:
> > - the documentation says, close only would close the open stream, but in
> > fact the source code looks like that changes should be saved back to the
> > file.
> > - the changes are only written by calling close, if a call to write
> > happened before. So, if I want to save the original XLSX file, I need to
> > save it twice.
> >
> > The workaround is, not to use the constructor which takes a File or a
> > String, but to use the constructor with InputStream, close the stream,
> > make the changes on the workbook and then write it back to the
> > inputstream's location with the write function.
> > The workbook.close() function is then not required to be called anymore.
> >
> > Does someone have experience with the correct usage of the API according
> > to this? May be I miss some function call, which controls to write the
> > file back on close.
> >
> > The actual use case is :
> > use a XLSX workbook as a template
> > open the file, write some content, write it back to a new file without
> > changing the original template.
> >
> > I use now the workaround to first copy the template to my destination
> > file, open that one with the InputStream constructor, close the stream at
> > the end, and write the workbook back with write() to the copied template
> > file.
> >
> >
> > Background:
> > For our ETL-scripting language KiScript we provide an API for POI, which
> > is successfully in use.
> >
> > This is, how the KiScript code looks like using the workaround, it's
> > similar to the JAVA api,
> >
> > module de.kisters.kiscript.poi.ssf.SSF
> > File f = new File("c:\temp\myTemplate.xlsx")
> > File target = new File("myDestination.xlsx")
> > f.copy(target.getAbsolutePath())
> > SSFWorkbook wb = SSFWorkbook.createXSSFWorkbook(target.InputStream())
> > SSFSheet sh = wb.getSheetAt(0)
> > // write a table to the workbook's sheet.
> > sh.writeSheetVertically(Session.getList(), 2, 0, false)
> > target.close()
> > wb.write()
> > wb.writeToFile(target)
> > wb.close()
> >
> >
> >
> >
> >
> >
> > Regards
> > Burkhard
> > ------------------------------------------------------------
> > ------------------------------------------------------------
> > --------------------
> >  Burkhard Losch - KISTERS AG - Pascalstraße 8+10 - 52076 Aachen - Germany
> > Handelsregister Aachen, HRB-Nr. 7838 | Vorstand: Klaus Kisters, Hanns
> > Kisters | Aufsichtsratsvorsitzender: Dr. Thomas Klevers
> > Phone: +49 2408 9385 -112 | Mobile: +49 176 19671041 | Fax: +49 2408 9385
> > -555 | E-Mail: burkhard.lo...@kisters.de | WWW: http://www.kisters.de
> > ------------------------------------------------------------
> > ------------------------------------------------------------
> > --------------------
> > Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte
> > Informationen. Wenn Sie nicht der richtige Adressat sind oder diese
> E-Mail
> > irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und
> > vernichten Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte
> > Weitergabe dieser Mail ist nicht gestattet.
> > This e-mail may contain confidential and/or privileged information. If
> you
> > are not the intended recipient (or have received this e-mail in error)
> > please notify the sender immediately and destroy this e-mail. Any
> > unauthorised copying, disclosure or distribution of the material in this
> > e-mail is strictly forbidden.
>

Reply via email to