From f2df929adbdb1bacf01da682cfb2681640cc0730 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 8 Jul 2025 00:39:04 +0100 Subject: [PATCH] move over latest docuementation files from poi-site --- src/documentation/README.txt | 7 + src/documentation/RELEASE-NOTES.txt | 42 + src/documentation/cli.xconf | 328 +++ src/documentation/content/locationmap.xml | 41 + .../content/xdocs/apidocs/index.xml | 85 + .../content/xdocs/casestudies.xml | 451 +++ src/documentation/content/xdocs/changes.xml | 777 ++++++ .../xdocs/components/configuration.xml | 232 ++ .../xdocs/components/diagram/index.xml | 107 + .../xdocs/components/document/docoverview.xml | 113 + .../xdocs/components/document/index.xml | 235 ++ .../xdocs/components/document/projectplan.xml | 392 +++ .../components/document/quick-guide-xwpf.xml | 89 + .../xdocs/components/document/quick-guide.xml | 88 + .../content/xdocs/components/hmef/index.xml | 216 ++ .../xdocs/components/hpbf/file-format.xml | 197 ++ .../content/xdocs/components/hpbf/index.xml | 77 + .../content/xdocs/components/hpsf/how-to.xml | 1477 ++++++++++ .../content/xdocs/components/hpsf/index.xml | 73 + .../xdocs/components/hpsf/internals.xml | 1079 ++++++++ .../xdocs/components/hpsf/thumbnails.xml | 198 ++ .../content/xdocs/components/hpsf/todo.xml | 77 + .../content/xdocs/components/hsmf/index.xml | 65 + .../content/xdocs/components/index.xml | 423 +++ .../content/xdocs/components/logging.xml | 290 ++ .../content/xdocs/components/oxml4j/index.xml | 45 + .../xdocs/components/poi-jvm-languages.xml | 351 +++ .../content/xdocs/components/poi-ruby.xml | 152 + .../content/xdocs/components/poifs/design.xml | 1099 ++++++++ .../xdocs/components/poifs/embeded.xml | 95 + .../xdocs/components/poifs/fileformat.xml | 703 +++++ .../content/xdocs/components/poifs/how-to.xml | 649 +++++ .../content/xdocs/components/poifs/index.xml | 58 + .../xdocs/components/poifs/usecases.xml | 653 +++++ .../components/slideshow/how-to-shapes.xml | 642 +++++ .../xdocs/components/slideshow/index.xml | 72 + .../components/slideshow/ppt-file-format.xml | 367 +++ .../slideshow/ppt-wmf-emf-renderer.xml | 210 ++ .../components/slideshow/quick-guide.xml | 133 + .../components/slideshow/xslf-cookbook.xml | 304 ++ .../xdocs/components/spreadsheet/chart.xml | 1532 ++++++++++ .../components/spreadsheet/converting.xml | 232 ++ .../xdocs/components/spreadsheet/diagram1.xml | 40 + .../xdocs/components/spreadsheet/diagrams.xml | 56 + .../components/spreadsheet/eval-devguide.xml | 591 ++++ .../xdocs/components/spreadsheet/eval.xml | 410 +++ .../xdocs/components/spreadsheet/examples.xml | 274 ++ .../xdocs/components/spreadsheet/excelant.xml | 317 +++ .../xdocs/components/spreadsheet/formula.xml | 120 + .../components/spreadsheet/hacking-hssf.xml | 89 + .../xdocs/components/spreadsheet/how-to.xml | 884 ++++++ .../xdocs/components/spreadsheet/index.xml | 119 + .../components/spreadsheet/limitations.xml | 99 + .../components/spreadsheet/quick-guide.xml | 2455 +++++++++++++++++ .../spreadsheet/record-generator.xml | 212 ++ .../xdocs/components/spreadsheet/use-case.xml | 200 ++ .../spreadsheet/user-defined-functions.xml | 414 +++ .../content/xdocs/devel/guidelines.xml | 408 +++ .../xdocs/devel/history/changes-3x.xml | 2255 +++++++++++++++ .../xdocs/devel/history/changes-pre3x.xml | 326 +++ .../content/xdocs/devel/history/index.xml | 163 ++ .../content/xdocs/devel/index.xml | 168 ++ .../content/xdocs/devel/nightly.xml | 57 + .../content/xdocs/devel/plan/index.xml | 74 + .../content/xdocs/devel/plan/vision10.xml | 521 ++++ .../content/xdocs/devel/plan/vision20.xml | 594 ++++ .../xdocs/devel/references/3rdparty.xml | 86 + .../content/xdocs/devel/references/index.xml | 66 + .../xdocs/devel/references/logocontest.xml | 194 ++ .../content/xdocs/devel/resolutions/index.xml | 55 + .../xdocs/devel/resolutions/res001.xml | 113 + .../content/xdocs/devel/subversion.xml | 250 ++ src/documentation/content/xdocs/devel/who.xml | 134 + src/documentation/content/xdocs/download.xml | 171 ++ .../content/xdocs/encryption.xml | 510 ++++ src/documentation/content/xdocs/help/faq.xml | 742 +++++ .../content/xdocs/help/index.xml | 142 + .../content/xdocs/images/add.png | Bin 0 -> 626 bytes .../content/xdocs/images/favicon.ico | Bin 0 -> 2238 bytes .../content/xdocs/images/fix.png | Bin 0 -> 587 bytes .../content/xdocs/images/group-logo.png | Bin 0 -> 6007 bytes .../content/xdocs/images/group.svg | 522 ++++ .../content/xdocs/images/icon.png | Bin 0 -> 696 bytes .../xdocs/images/poweredby-poi-logo.png | Bin 0 -> 7144 bytes .../content/xdocs/images/poweredby-poi.svg | 1025 +++++++ .../content/xdocs/images/project-header.png | Bin 0 -> 9587 bytes .../content/xdocs/images/remove.png | Bin 0 -> 539 bytes .../content/xdocs/images/update.png | Bin 0 -> 665 bytes .../content/xdocs/images/usemap.gif | Bin 0 -> 1688 bytes src/documentation/content/xdocs/index.xml | 259 ++ src/documentation/content/xdocs/legal.xml | 100 + src/documentation/content/xdocs/news.xml | 233 ++ .../content/xdocs/related-projects.xml | 254 ++ src/documentation/content/xdocs/security.xml | 114 + src/documentation/content/xdocs/site.xml | 172 ++ .../xdocs/status.copy_module_from_bugzilla.py | 89 + src/documentation/content/xdocs/tabs.xml | 35 + .../content/xdocs/text-extraction.xml | 186 ++ src/documentation/publish-poi-site.txt | 61 + src/documentation/release-guide.txt | 367 +++ .../resources/images/ApacheConEu08.jpg | Bin 0 -> 9021 bytes .../resources/images/BlockClassDiagram.gif | Bin 0 -> 7922 bytes .../resources/images/POIFSAddDocument.gif | Bin 0 -> 6982 bytes .../resources/images/POIFSClassDiagram.gif | Bin 0 -> 13412 bytes .../resources/images/POIFSInitialization.gif | Bin 0 -> 2473 bytes .../resources/images/POIFSLifeCycle.gif | Bin 0 -> 1813 bytes .../images/POIFSPropertyTablePreWrite.gif | Bin 0 -> 4777 bytes .../images/POIFSRootPropertyPreWrite.gif | Bin 0 -> 1855 bytes .../resources/images/POIFSWriteArchive.gif | Bin 0 -> 9591 bytes .../resources/images/POIFSWriteFilesystem.gif | Bin 0 -> 9603 bytes .../resources/images/PropertySet.jpg | Bin 0 -> 17843 bytes .../images/PropertyTableClassDiagram.gif | Bin 0 -> 11195 bytes .../images/built-with-forrest-button.png | Bin 0 -> 1936 bytes .../resources/images/businessplan.jpg | Bin 0 -> 63125 bytes .../resources/images/calculatePayment.jpg | Bin 0 -> 28990 bytes .../resources/images/calendar.jpg | Bin 0 -> 38647 bytes .../resources/images/hslf_shapes.gif | Bin 0 -> 7140 bytes .../resources/images/loancalc.jpg | Bin 0 -> 26555 bytes .../resources/images/logoAdria1.png | Bin 0 -> 4025 bytes .../resources/images/logoAdria2.png | Bin 0 -> 31139 bytes .../resources/images/logoAdria3.png | Bin 0 -> 31476 bytes .../resources/images/logoAndrewClements.png | Bin 0 -> 5291 bytes .../resources/images/logoAndrewClements2.png | Bin 0 -> 3514 bytes .../resources/images/logoDanielFernandez.png | Bin 0 -> 21204 bytes .../resources/images/logoGlenStampoutlzis.png | Bin 0 -> 1125 bytes .../resources/images/logoGustafsson1.png | Bin 0 -> 7820 bytes .../resources/images/logoGustafsson2.png | Bin 0 -> 3908 bytes .../resources/images/logoJanssen1.png | Bin 0 -> 6916 bytes .../resources/images/logoJanssen2.png | Bin 0 -> 37250 bytes .../resources/images/logoKarmokar1.png | Bin 0 -> 30781 bytes .../resources/images/logoKarmokar1s.png | Bin 0 -> 2561 bytes .../resources/images/logoKarmokar2.png | Bin 0 -> 11793 bytes .../resources/images/logoKarmokar2s.png | Bin 0 -> 5459 bytes .../resources/images/logoKarmokar3.png | Bin 0 -> 7310 bytes .../resources/images/logoKarmokar3s.png | Bin 0 -> 5270 bytes .../resources/images/logoKarmokar4.png | Bin 0 -> 15792 bytes .../resources/images/logoKarmokar4s.png | Bin 0 -> 3586 bytes .../resources/images/logoKarmokar5.png | Bin 0 -> 3230 bytes .../resources/images/logoKarmokar5s.png | Bin 0 -> 2374 bytes .../resources/images/logoKarmokar6.png | Bin 0 -> 3006 bytes .../resources/images/logoKarmokar6s.png | Bin 0 -> 2321 bytes .../resources/images/logoLoicLefevre.png | Bin 0 -> 40251 bytes .../resources/images/logoLoicLefevre2.png | Bin 0 -> 30698 bytes .../resources/images/logoMichaelMosmann.png | Bin 0 -> 6538 bytes .../resources/images/logoRaPiGmbH1.png | Bin 0 -> 5976 bytes .../resources/images/logoRaPiGmbH10.png | Bin 0 -> 9006 bytes .../resources/images/logoRaPiGmbH11.png | Bin 0 -> 7209 bytes .../resources/images/logoRaPiGmbH12.png | Bin 0 -> 4033 bytes .../resources/images/logoRaPiGmbH2.png | Bin 0 -> 6001 bytes .../resources/images/logoRaPiGmbH5.png | Bin 0 -> 7423 bytes .../resources/images/logoRaPiGmbH6.png | Bin 0 -> 6640 bytes .../resources/images/logoRaPiGmbH7.png | Bin 0 -> 9630 bytes .../resources/images/logoRaPiGmbH8.png | Bin 0 -> 6572 bytes .../resources/images/logoRaPiGmbH9.png | Bin 0 -> 6572 bytes .../resources/images/logoRandyStanard01.png | Bin 0 -> 198594 bytes .../resources/images/logoRandyStanard02.png | Bin 0 -> 122317 bytes .../resources/images/logoRandyStanard03.png | Bin 0 -> 38246 bytes .../resources/images/logoRandyStanard04.png | Bin 0 -> 36236 bytes .../resources/images/logoRandyStanard05.png | Bin 0 -> 45990 bytes .../resources/images/logoRandyStanard06.png | Bin 0 -> 16309 bytes .../resources/images/logoRandyStanard07.png | Bin 0 -> 30094 bytes .../resources/images/logoRandyStanard08.png | Bin 0 -> 106828 bytes .../resources/images/logoRussellBeattie1.png | Bin 0 -> 5158 bytes .../resources/images/logoRussellBeattie2.png | Bin 0 -> 5441 bytes .../resources/images/logoRussellBeattie3.png | Bin 0 -> 1797 bytes .../resources/images/logoRussellBeattie4.png | Bin 0 -> 3145 bytes .../resources/images/logoRussellBeattie5.png | Bin 0 -> 1597 bytes .../resources/images/logoWendyWise.png | Bin 0 -> 46421 bytes .../resources/images/logoWendyWise2.png | Bin 0 -> 1703 bytes .../resources/images/old-project-logo.gif | Bin 0 -> 3165 bytes src/documentation/resources/images/pb-poi.cdr | Bin 0 -> 73310 bytes .../resources/images/poi-logo.png | Bin 0 -> 11814 bytes .../resources/images/project-header.svg | 1108 ++++++++ .../resources/images/project-header.xcf | Bin 0 -> 170414 bytes src/documentation/resources/images/remove.jpg | Bin 0 -> 1658 bytes .../images/simple-xls-with-function.jpg | Bin 0 -> 27226 bytes .../resources/images/ss-features.png | Bin 0 -> 13173 bytes .../resources/images/support-asf.png | Bin 0 -> 18642 bytes .../resources/images/timesheet.jpg | Bin 0 -> 47311 bytes .../resources/images/unknown.jpg | Bin 0 -> 868 bytes .../resources/images/usermodel.gif | Bin 0 -> 75282 bytes .../resources/images/utilClasses.gif | Bin 0 -> 20250 bytes .../resources/images/vba-example.jpg | Bin 0 -> 107492 bytes .../resources/schema/catalog.xcat | 23 + .../resources/schema/changes-poi.dtd | 71 + .../resources/schema/changes-poi.mod | 81 + .../stylesheets/changes2document.xsl | 210 ++ .../stylesheets/snipplets2document.xsl | 65 + src/documentation/sitemap.xmap | 56 + src/documentation/skinconf.xml | 549 ++++ 190 files changed, 33345 insertions(+) create mode 100644 src/documentation/README.txt create mode 100644 src/documentation/RELEASE-NOTES.txt create mode 100644 src/documentation/cli.xconf create mode 100644 src/documentation/content/locationmap.xml create mode 100644 src/documentation/content/xdocs/apidocs/index.xml create mode 100644 src/documentation/content/xdocs/casestudies.xml create mode 100644 src/documentation/content/xdocs/changes.xml create mode 100644 src/documentation/content/xdocs/components/configuration.xml create mode 100644 src/documentation/content/xdocs/components/diagram/index.xml create mode 100644 src/documentation/content/xdocs/components/document/docoverview.xml create mode 100644 src/documentation/content/xdocs/components/document/index.xml create mode 100644 src/documentation/content/xdocs/components/document/projectplan.xml create mode 100644 src/documentation/content/xdocs/components/document/quick-guide-xwpf.xml create mode 100644 src/documentation/content/xdocs/components/document/quick-guide.xml create mode 100644 src/documentation/content/xdocs/components/hmef/index.xml create mode 100644 src/documentation/content/xdocs/components/hpbf/file-format.xml create mode 100644 src/documentation/content/xdocs/components/hpbf/index.xml create mode 100644 src/documentation/content/xdocs/components/hpsf/how-to.xml create mode 100644 src/documentation/content/xdocs/components/hpsf/index.xml create mode 100644 src/documentation/content/xdocs/components/hpsf/internals.xml create mode 100644 src/documentation/content/xdocs/components/hpsf/thumbnails.xml create mode 100644 src/documentation/content/xdocs/components/hpsf/todo.xml create mode 100644 src/documentation/content/xdocs/components/hsmf/index.xml create mode 100644 src/documentation/content/xdocs/components/index.xml create mode 100644 src/documentation/content/xdocs/components/logging.xml create mode 100644 src/documentation/content/xdocs/components/oxml4j/index.xml create mode 100644 src/documentation/content/xdocs/components/poi-jvm-languages.xml create mode 100644 src/documentation/content/xdocs/components/poi-ruby.xml create mode 100644 src/documentation/content/xdocs/components/poifs/design.xml create mode 100644 src/documentation/content/xdocs/components/poifs/embeded.xml create mode 100644 src/documentation/content/xdocs/components/poifs/fileformat.xml create mode 100644 src/documentation/content/xdocs/components/poifs/how-to.xml create mode 100644 src/documentation/content/xdocs/components/poifs/index.xml create mode 100644 src/documentation/content/xdocs/components/poifs/usecases.xml create mode 100644 src/documentation/content/xdocs/components/slideshow/how-to-shapes.xml create mode 100644 src/documentation/content/xdocs/components/slideshow/index.xml create mode 100644 src/documentation/content/xdocs/components/slideshow/ppt-file-format.xml create mode 100644 src/documentation/content/xdocs/components/slideshow/ppt-wmf-emf-renderer.xml create mode 100644 src/documentation/content/xdocs/components/slideshow/quick-guide.xml create mode 100644 src/documentation/content/xdocs/components/slideshow/xslf-cookbook.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/chart.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/converting.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/diagram1.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/diagrams.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/eval-devguide.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/eval.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/examples.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/excelant.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/formula.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/hacking-hssf.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/how-to.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/index.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/limitations.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/quick-guide.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/record-generator.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/use-case.xml create mode 100644 src/documentation/content/xdocs/components/spreadsheet/user-defined-functions.xml create mode 100644 src/documentation/content/xdocs/devel/guidelines.xml create mode 100644 src/documentation/content/xdocs/devel/history/changes-3x.xml create mode 100644 src/documentation/content/xdocs/devel/history/changes-pre3x.xml create mode 100644 src/documentation/content/xdocs/devel/history/index.xml create mode 100644 src/documentation/content/xdocs/devel/index.xml create mode 100644 src/documentation/content/xdocs/devel/nightly.xml create mode 100644 src/documentation/content/xdocs/devel/plan/index.xml create mode 100644 src/documentation/content/xdocs/devel/plan/vision10.xml create mode 100644 src/documentation/content/xdocs/devel/plan/vision20.xml create mode 100644 src/documentation/content/xdocs/devel/references/3rdparty.xml create mode 100644 src/documentation/content/xdocs/devel/references/index.xml create mode 100644 src/documentation/content/xdocs/devel/references/logocontest.xml create mode 100644 src/documentation/content/xdocs/devel/resolutions/index.xml create mode 100644 src/documentation/content/xdocs/devel/resolutions/res001.xml create mode 100644 src/documentation/content/xdocs/devel/subversion.xml create mode 100644 src/documentation/content/xdocs/devel/who.xml create mode 100644 src/documentation/content/xdocs/download.xml create mode 100644 src/documentation/content/xdocs/encryption.xml create mode 100644 src/documentation/content/xdocs/help/faq.xml create mode 100644 src/documentation/content/xdocs/help/index.xml create mode 100644 src/documentation/content/xdocs/images/add.png create mode 100644 src/documentation/content/xdocs/images/favicon.ico create mode 100644 src/documentation/content/xdocs/images/fix.png create mode 100644 src/documentation/content/xdocs/images/group-logo.png create mode 100644 src/documentation/content/xdocs/images/group.svg create mode 100644 src/documentation/content/xdocs/images/icon.png create mode 100644 src/documentation/content/xdocs/images/poweredby-poi-logo.png create mode 100644 src/documentation/content/xdocs/images/poweredby-poi.svg create mode 100644 src/documentation/content/xdocs/images/project-header.png create mode 100644 src/documentation/content/xdocs/images/remove.png create mode 100644 src/documentation/content/xdocs/images/update.png create mode 100644 src/documentation/content/xdocs/images/usemap.gif create mode 100644 src/documentation/content/xdocs/index.xml create mode 100644 src/documentation/content/xdocs/legal.xml create mode 100644 src/documentation/content/xdocs/news.xml create mode 100644 src/documentation/content/xdocs/related-projects.xml create mode 100644 src/documentation/content/xdocs/security.xml create mode 100644 src/documentation/content/xdocs/site.xml create mode 100644 src/documentation/content/xdocs/status.copy_module_from_bugzilla.py create mode 100644 src/documentation/content/xdocs/tabs.xml create mode 100644 src/documentation/content/xdocs/text-extraction.xml create mode 100644 src/documentation/publish-poi-site.txt create mode 100644 src/documentation/release-guide.txt create mode 100644 src/documentation/resources/images/ApacheConEu08.jpg create mode 100644 src/documentation/resources/images/BlockClassDiagram.gif create mode 100644 src/documentation/resources/images/POIFSAddDocument.gif create mode 100644 src/documentation/resources/images/POIFSClassDiagram.gif create mode 100644 src/documentation/resources/images/POIFSInitialization.gif create mode 100644 src/documentation/resources/images/POIFSLifeCycle.gif create mode 100644 src/documentation/resources/images/POIFSPropertyTablePreWrite.gif create mode 100644 src/documentation/resources/images/POIFSRootPropertyPreWrite.gif create mode 100644 src/documentation/resources/images/POIFSWriteArchive.gif create mode 100644 src/documentation/resources/images/POIFSWriteFilesystem.gif create mode 100644 src/documentation/resources/images/PropertySet.jpg create mode 100644 src/documentation/resources/images/PropertyTableClassDiagram.gif create mode 100644 src/documentation/resources/images/built-with-forrest-button.png create mode 100644 src/documentation/resources/images/businessplan.jpg create mode 100644 src/documentation/resources/images/calculatePayment.jpg create mode 100644 src/documentation/resources/images/calendar.jpg create mode 100644 src/documentation/resources/images/hslf_shapes.gif create mode 100644 src/documentation/resources/images/loancalc.jpg create mode 100644 src/documentation/resources/images/logoAdria1.png create mode 100644 src/documentation/resources/images/logoAdria2.png create mode 100644 src/documentation/resources/images/logoAdria3.png create mode 100644 src/documentation/resources/images/logoAndrewClements.png create mode 100644 src/documentation/resources/images/logoAndrewClements2.png create mode 100644 src/documentation/resources/images/logoDanielFernandez.png create mode 100644 src/documentation/resources/images/logoGlenStampoutlzis.png create mode 100644 src/documentation/resources/images/logoGustafsson1.png create mode 100644 src/documentation/resources/images/logoGustafsson2.png create mode 100644 src/documentation/resources/images/logoJanssen1.png create mode 100644 src/documentation/resources/images/logoJanssen2.png create mode 100644 src/documentation/resources/images/logoKarmokar1.png create mode 100644 src/documentation/resources/images/logoKarmokar1s.png create mode 100644 src/documentation/resources/images/logoKarmokar2.png create mode 100644 src/documentation/resources/images/logoKarmokar2s.png create mode 100644 src/documentation/resources/images/logoKarmokar3.png create mode 100644 src/documentation/resources/images/logoKarmokar3s.png create mode 100644 src/documentation/resources/images/logoKarmokar4.png create mode 100644 src/documentation/resources/images/logoKarmokar4s.png create mode 100644 src/documentation/resources/images/logoKarmokar5.png create mode 100644 src/documentation/resources/images/logoKarmokar5s.png create mode 100644 src/documentation/resources/images/logoKarmokar6.png create mode 100644 src/documentation/resources/images/logoKarmokar6s.png create mode 100644 src/documentation/resources/images/logoLoicLefevre.png create mode 100644 src/documentation/resources/images/logoLoicLefevre2.png create mode 100644 src/documentation/resources/images/logoMichaelMosmann.png create mode 100644 src/documentation/resources/images/logoRaPiGmbH1.png create mode 100644 src/documentation/resources/images/logoRaPiGmbH10.png create mode 100644 src/documentation/resources/images/logoRaPiGmbH11.png create mode 100644 src/documentation/resources/images/logoRaPiGmbH12.png create mode 100644 src/documentation/resources/images/logoRaPiGmbH2.png create mode 100644 src/documentation/resources/images/logoRaPiGmbH5.png create mode 100644 src/documentation/resources/images/logoRaPiGmbH6.png create mode 100644 src/documentation/resources/images/logoRaPiGmbH7.png create mode 100644 src/documentation/resources/images/logoRaPiGmbH8.png create mode 100644 src/documentation/resources/images/logoRaPiGmbH9.png create mode 100644 src/documentation/resources/images/logoRandyStanard01.png create mode 100644 src/documentation/resources/images/logoRandyStanard02.png create mode 100644 src/documentation/resources/images/logoRandyStanard03.png create mode 100644 src/documentation/resources/images/logoRandyStanard04.png create mode 100644 src/documentation/resources/images/logoRandyStanard05.png create mode 100644 src/documentation/resources/images/logoRandyStanard06.png create mode 100644 src/documentation/resources/images/logoRandyStanard07.png create mode 100644 src/documentation/resources/images/logoRandyStanard08.png create mode 100644 src/documentation/resources/images/logoRussellBeattie1.png create mode 100644 src/documentation/resources/images/logoRussellBeattie2.png create mode 100644 src/documentation/resources/images/logoRussellBeattie3.png create mode 100644 src/documentation/resources/images/logoRussellBeattie4.png create mode 100644 src/documentation/resources/images/logoRussellBeattie5.png create mode 100644 src/documentation/resources/images/logoWendyWise.png create mode 100644 src/documentation/resources/images/logoWendyWise2.png create mode 100644 src/documentation/resources/images/old-project-logo.gif create mode 100644 src/documentation/resources/images/pb-poi.cdr create mode 100644 src/documentation/resources/images/poi-logo.png create mode 100644 src/documentation/resources/images/project-header.svg create mode 100644 src/documentation/resources/images/project-header.xcf create mode 100644 src/documentation/resources/images/remove.jpg create mode 100644 src/documentation/resources/images/simple-xls-with-function.jpg create mode 100644 src/documentation/resources/images/ss-features.png create mode 100644 src/documentation/resources/images/support-asf.png create mode 100644 src/documentation/resources/images/timesheet.jpg create mode 100644 src/documentation/resources/images/unknown.jpg create mode 100644 src/documentation/resources/images/usermodel.gif create mode 100644 src/documentation/resources/images/utilClasses.gif create mode 100644 src/documentation/resources/images/vba-example.jpg create mode 100644 src/documentation/resources/schema/catalog.xcat create mode 100644 src/documentation/resources/schema/changes-poi.dtd create mode 100644 src/documentation/resources/schema/changes-poi.mod create mode 100644 src/documentation/resources/stylesheets/changes2document.xsl create mode 100644 src/documentation/resources/stylesheets/snipplets2document.xsl create mode 100644 src/documentation/sitemap.xmap create mode 100644 src/documentation/skinconf.xml diff --git a/src/documentation/README.txt b/src/documentation/README.txt new file mode 100644 index 0000000000..9bc261b2f1 --- /dev/null +++ b/src/documentation/README.txt @@ -0,0 +1,7 @@ +This is the base documentation directory. + +skinconf.xml # This file customizes Forrest for your project. In it, you + # tell forrest the project name, logo, copyright info, etc + +sitemap.xmap # Optional. This sitemap is consulted before all core sitemaps. + # See http://forrest.apache.org/docs/project-sitemap.html diff --git a/src/documentation/RELEASE-NOTES.txt b/src/documentation/RELEASE-NOTES.txt new file mode 100644 index 0000000000..53f99f52b5 --- /dev/null +++ b/src/documentation/RELEASE-NOTES.txt @@ -0,0 +1,42 @@ +The Apache POI project is pleased to announce the release of POI @VERSION@. +Featured are a handful of new areas of functionality, and numerous bug fixes. + +See the downloads page for source distributions: https://poi.apache.org/download.html + +Release Notes + +Changes +------------ +The most notable changes in this release are: + +@List changes here@ + +A full list of changes is available in the change log: https://poi.apache.org/changes.html. +People interested should also follow the dev mailing list to track further progress. + +Release Contents +---------------- + +This release comes in source form: + - source archive you can build POI from (poi-src-@VERSION@-@DSTAMP@.zip or poi-src-@VERSION@-@DSTAMP@.tar.gz) + Unpack the archive and use the following command to build all POI components with JDK 1.8 or higher: + + gradle jar + + Pre-built versions of all POI components are also available in the central Maven repository + under Group ID "org.apache.poi" and Version "@VERSION@" + +All release artifacts are accompanied by SHA checksums and PGP signatures +that you can use to verify the authenticity of your download. +The public key used for the PGP signature can be found at +https://svn.apache.org/repos/asf/poi/tags/@RELEASE_TAG@/KEYS + +About Apache POI +----------------------- + +Apache POI is well-known in the Java field as a library for reading and +writing Microsoft Office file formats, such as Excel, PowerPoint, Word, +Visio, Publisher and Outlook. It supports both the older (OLE2) and +new (OOXML - Office Open XML) formats. + +See https://poi.apache.org/ for more details diff --git a/src/documentation/cli.xconf b/src/documentation/cli.xconf new file mode 100644 index 0000000000..88ca2fd763 --- /dev/null +++ b/src/documentation/cli.xconf @@ -0,0 +1,328 @@ + + + + + + + + . + WEB-INF/cocoon.xconf + ../tmp/cocoon-work + ../site + + + + + + + + + + + + + + + index.html + + + + + + + */* + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/documentation/content/locationmap.xml b/src/documentation/content/locationmap.xml new file mode 100644 index 0000000000..4f5ab0941b --- /dev/null +++ b/src/documentation/content/locationmap.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + diff --git a/src/documentation/content/xdocs/apidocs/index.xml b/src/documentation/content/xdocs/apidocs/index.xml new file mode 100644 index 0000000000..3784b090bd --- /dev/null +++ b/src/documentation/content/xdocs/apidocs/index.xml @@ -0,0 +1,85 @@ + + + + + +
+ Apache POI™ - Javadocs + + + +
+ + +
Apache POI Javadocs +

+ The Javadocs for the latest (development) version of Apache POI + can be accessed online here, or build + from a source code checkout + by running the javadocs Ant task. The + latest (development) Javadocs are generally + updated every few weeks, so may lag the most recent development slightly. +

+

+ For recent releases, the Javadocs for the latest stable release + each the family can also be browsed online: +

+ + +
Older Releases +

+ For every release of Apache POI, the specific Javadocs for that + version are available with the release. +

+

+ Maven / Gradle / IDE users are able to fetch the javadocs for each + of the Apache POI jars from Maven Central (or your preferred Maven + mirror). These are made available with the javadoc classifier, + e.g. group: 'org.apache.poi', name: 'poi', version: '4.1.1', + classifier: 'javadoc' +

+

+ If you have downloaded the binary (bin) release, then you + can find the Javadocs within the download in the /docs/apidocs/ + folder. +

+

+ If you have downloaded the source (src) release, then you + need to build your own copy. Run the javadocs ant task + to have the Javadocs built, the build will tell you the output + directory at the end (it varies slightly between POI versions). +

+
+
+ +
+ + Copyright (c) @year@ The Apache Software Foundation All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/casestudies.xml b/src/documentation/content/xdocs/casestudies.xml new file mode 100644 index 0000000000..af370b1138 --- /dev/null +++ b/src/documentation/content/xdocs/casestudies.xml @@ -0,0 +1,451 @@ + + + + + +
+ Apache POI™ - Case Studies + + + + + + +
+ + +
+ Introduction +

+ A number of people are using POI for a variety of purposes. As with + any new API or technology, the first question people generally ask + is not "how can I" but rather "Who else is doing what I'm about to + do?" This is understandable with the abysmal success rate in the + software business. These case statements are meant to help create + confidence and understanding. +

+
+
+ Submitting a Case Study +

+ We are actively seeking case studies for this page (after all it + just started). To submit a case study, either + + submit a patch for this page or email it to the + mailing list + (with [PATCH] prefixed subject, please). +

+
+
+ Case Studies + +
Manticore Projects - VBox Financial Reporting Software +

+ Andreas Reichel, Managing Consultant

+

+

+ Use Case for Apache POI in VBox Financial Reporting Software
+ Manticore Projects specializes in Financial Valuation, + Accounting, and Reporting under IFRS 9, IFRS 16, and IFRS 17. The software extensively leverages + Apache POI for importing, exporting, and visualizing data, making it a cornerstone of the solutions. +

+

+ SQL Sheet Integration for Data Capture
+ The software uses and supports SQL Sheet to build + "Data Capture Sheets", allowing end-users to seamlessly upload structured data via Microsoft Excel + spreadsheets into applications. SQL Sheet, a JDBC driver + for XLS/XLSX files based on Apache POI, transforms worksheets into database tables, enabling access + through plain SQL and JDBC MetaData. +

+

+ Streamlined Excel Exports for Controllers and Auditors
+ Within VBox applications, Apache POI enables interactive export of UI content, such as data tables, into + formatted Excel spreadsheets. This functionality provides financial controllers and auditors with easy + access to complex data and calculations in a familiar format. +

+

+ ETL-VBox Report Builder for Regulatory Compliance
+ + The ETL-VBox Report Builder uses Apache POI + to create spreadsheet-based form reports, a critical requirement for regulatory reporting. Regulatory + bodies often provide specific MS Excel templates with multiple sheets representing data forms and fields.
+ With Apache POI, the software visualizes these Excel templates directly in the UI, mimicking the Excel + experience. Non-technical users can drag and drop records or values from data cubes into the spreadsheet + interface. This "data to cell-range" mapping is stored and used to populate the workbook automatically, + ensuring reports are generated accurately and on time—such as during daily end-of-day processes.
+ One of the standout benefits of this approach is the platform independent separation of report templates + (including corporate design styles, formulas, and charts) from the actual data. By leveraging Apache POI, + it bridges the gap between structured data and Excels flexibility, delivering the best of both worlds for + end-users who love working in Excel. +

+

+ Why Apache POI?
+ Apache POI has proven to be a high-performance and robust library. It is supported by comprehensive + documentation and an excellent community of developers. At + Manticore Projects, we are proud + contributors to this vibrant community and deeply value the collaboration that drives the evolution of this + indispensable tool.
+ By integrating Apache POI into our software, we empower users with intuitive and powerful features for + financial reporting, helping them meet their regulatory and operational needs with confidence. +

+
+ +
WriteExcel Utilities +

+ This WriteExcel distribution package found at WriteExcel Utilities contains source, + documentation, examples, build tools and precompiled classes that wrap the Apache POI Excel interface. +

+

+ WriteExcel creates a Workbook file using a simple interface that uses formatted strings as the primary way + of passing information to the support methods which interpret the strings and issue the necessary POI method calls. + Access to the Workbook object allows the POI methods to be called directly for cases not handled by the interface. +

+

+ An existing Workbook file can be used as a template source so that sheets can be copied and then left intact, modified and/or supplemented. +

+

+ The creation of Workbooks containing charts is supported by using an existing Workbook file as a template that contains one or more charts + and using WriteExcel to modify the data that the chart refers to. +

+

+ The ReadExcelFile component of the package can be used to selectively iterate across existing Workbooks (or Workbooks under construction) and create + Java objects with the selected data which can then be forwarded for further processing. +

+ WriteExcel was used to produce the monthly reporting files for a church accounting system among other things. +

+ Steve Pritchard
+ Rexcel Systems Inc.
+ July, 2019
+ Steve Pritchard Utilities +

+
+ +
Processing biometric scanner logs - Glassbeam +

+ As a small startup there is no attendance management system in place. So they have a manual register where + they record attendance. There also is a biometric scanner to allow entries through the office gates, + which again maintains logs of entries. + Instead of establishing an attendance management system, they decided to make use of these biometric scanner logs and generate an + excel report instead. +

+

+ A blog post describes how + the startup uses Apache POI to generate reports about attendance of employees based on biometric scanner logs. +

+

+ A fully working solution can be found on Github. +

+
+ +
REWOO Scope +

+ REWOO Scope is a modern and easy to use web-based enterprise content management system. It supports knowledge workers and managers in making the right decisions based upon all relevant information. +

+

+ The system uses Apache POI to extract information stored within excel files and use it transparently within REWOO Scope. Thus, POI allows our customers to work in their standard office environment while also having all important information in the REWO Scope system. +

+
+ +
QuestionPro +

+ QuestionPro is an online service allowing businesses and individuals to create, deploy and do in-depth analysis of Online Surveys. The technology is build on open-source frameworks like Struts, Velocity, POI, Lucene ... the List goes on. The application deployment is on a Linux Application Cluster farm with a Mysql database. +

+

+ There are quite a few competitors delivering similar solutions using Microsoft Technologies like asp and .net. One of the distinct advantages our competitors had over us was the ability to generate Excel Spreadsheets, Access Databases (MDB) etc. on the fly using the Component Object Model (COM) - since their servers were running IIS and they had access to the COM registry and such. +

+

+ QuestionPro's initial solution was to generate CSV files. This was easy however it was a cumbersome process for our clients to download the CSV files and then import them into Excel. Moreover, formatting information could not be preserved or captured using the CSV format. This is where POI came to our rescue. With a POI based solution, we could generate a full report with multiple sheets and all the analytical reports. To keep the solution scalable, we had a dedicated cluster for generating out the reports. +

+

+ + The Apache-POI project has helped QuestionPro compete with the other players in the marketplace with proprietary technology. It leveled the playing field with respect to reporting and data analysis solutions. It helped in opening doors into closed solutions like Microsoft's CDF. Today about 100 excel reports are generated daily, each with about 10-30 sheets in them. +

+ +

+ Vivek Bhaskaran +

+

+ QuestionPro, Inc +

+ +

+ POI In Action - http://www.questionpro.com/marketing/SurveyReport-289.xls +

+ +
+ +
Sunshine Systems +

+ Sunshine Systems developed a + POI based reporting solution for a price optimization software package which + is used by major retail chains. +

+

The solution allowed the retailer's merchandise planners and managers to request a + markdown decision support reports and price change reports using a standard browser + The users could specify report type, report options, as well as company, +division, + and department filter criteria. Report generation took place in the +multi-threaded + application server and was capable of supporting many simultaneous report requests. +

+

The reporting application collected business information from the price +optimization + application's Oracle database. The data was aggregated and summarized + based upon the + specific report type and filter criteria requested by the user. The +final report was + rendered as a Microsoft Excel spreadsheet using the POI HSSF API and + was stored on + the report database server for that specific user as a BLOB. Reports + could be + seamlessly and easily viewed using the same browser. +

+

The retailers liked the solution because they had instantaneous access + to critical + business data through an extremely easy to use browser interface. They + did not need + to train the broader user community on all the complexities of the optimization + application. Furthermore, the reports were generated in an Excel spreadsheet +format, + which everyone was familiar with and which also allowed further data + analysis using + standard Excel features. +

+

Rob Stevenson (rstevenson at sunshinesys dot com) +

+
+
+ Bank of Lithuania +

+ The + Bank of Lithuania + reports financial statistical data to Excel format using the + Apache POI + project's + + HSSF API. The system is based on Oracle JServer and + utilizes a Java stored procedure that outputs to XLS format + using the HSSF API. - Arian Lashkov (alaskov at lbank.lt) +

+
+ + + + + + + + + +
+ Edwards And Kelcey Technology +

+ Edwards and Kelcey Technology (http://www.ekcorp.com/) developed a + Facility + Management and Maintenance System for the Telecommunications industry + based + on Turbine and Velocity. Originally the invoicing was done with a simple + CSV + sheet which was then marked up by accounts and customized for each client. + As growth has been consistent with the application, the requirement for + invoices that need not be touched by hand increased. POI provided the + solution to this issue, integrating easily and transparently into the + system. POI HSSF was used to create the invoices directly from the server + in + Excel 97 format and now services over 150 unique invoices per month. +

+

+ Cameron Riley (crileyNO@ SPAMekmail.com) +

+
+
+ ClickFind +

+ ClickFind Inc. used the POI + projects HSSF API to provide their medical + research clients with an Excel export from their electronic data + collection web service Data Collector 3.0. The POI team's assistance + allowed ClickFind to give their clients a data format that requires less + technical expertise than the XML format used by the Data Collector + application. This was important to ClickFind as many of their current + and potential clients are already using Excel in their day-to-day + operations and in established procedures for handling their generated + clinical data. - Jared Walker (jared.walker at clickfind.com) +

+
+
+ IKAN Software NV +

In addition to Change Management and Database Modelling, IKAN Software NV + (http://www.ikan.be/) develops and supports its own ETL + (Extract/Transform/Load) tools.

+ +

IKAN's latest product is this domain is called ETL4ALL + (http://www.ikan.be/etl4all/). ETL4ALL is an open source tool + allowing data transfer from and to virtually any data source. Users can + combine and examine data stored in relational databases, XML databases, PDF + files, EDI, CSV files, etc. +

+ +

It is obvious that Microsoft Excel files are also supported. + POI has been used to successfully implement this support in ETL4ALL.

+
+
+ JM Lafferty Associates, Inc. +

+ On its ForecastWorks website + JM Lafferty Associates, Inc. produces dynamic on demand + financial analyses of companies and institutional funds. The pages produced are selected and exported + in several file formats including PPT and XLS. +

+
    +
  • The PPT files produced are of high quality which is on a par with similar PDF files.
  • +
  • The XLS files produced contain a complex forecasting model built from a template with a VBA Macro.
  • +
+

+ David Fisher (dfisher@jmlafferty.com) +

+
+ +
+ iDATA Development Ltd (IDD) +

+ IDD have developed the iEXL product to + generate Excel spreadsheets directly on the Iseries/AS400 IBM I on Power platform. +

+

+ Professional spreadsheets created via a menu system. Some basic programming is required for more complex options. + When programming is required it can be carried out using RPG, SQL, QUERY, JAVA, COBOL etc. + In other words your existing staffs knowledge +

+

+ Design spreadsheets with: +

+
    +
  • Fonts down to cell level
  • +
  • Colours (Background and text) down to cell level
  • +
  • Shading down to cell level
  • +
  • Cell patterns down to cell level
  • +
  • Cell initialization
  • +
  • Freeze Panes
  • +
  • Passwords
  • +
  • Images/Pictures both static and dynamic
  • +
  • Headings
  • +
  • Page breaks
  • +
  • Sheet breaks
  • +
  • Text insertion and much more
  • +
  • Functions/Formula
  • +
  • Merge cells
  • +
  • Row Height
  • +
  • Cell text alignment
  • +
  • Text Rotation
  • +
  • 50 Database files per workbook.
  • +
  • E-mail the spreadsheet
  • +
+

+ The product name is 'iEXL' and has been live on both European and North American systems for over four years. + It is being used in preference to more established commercial products which our clients have already purchased. + This is due to cost and ease of use. +

+

+ All spreadsheets can be archived if required so that historical spreadsheets can be retrieved. +

+

+ The system has benefits for all departments within an organisation. + Examples of this are accounts department for things such as aged trial balance, + distribution department for ASN’s, warehousing for stock figures, IS for security reporting etc. +

+

+ Clients have at this point (June 2012) created over 300 spreadsheets which in turn have generated over + 500,000 E-mails. iEXL has a menu driven email system. +

+

+ Due to the Apache-POI project IDD have been able to create the IEXL product. + This is a well priced product which allows companies of all sizes access to a product that opens up their reporting capabilities +

+

+ Within the iEXLSOFTWARE.COM website you will find a full user manual, + installation instructions, a call log (Ticket) system and a downloadable 45 day trial version. +

+

+ Author: Mark.D.Golden +

+
+
+ Ugly Duckling +

+ Ugly Duckling focus on Software, Management and Finance. + We have recently been using Apache POI to create tools for the mortgage group of + ABN AMRO in the Netherlands. + During this project we created a number of what we call 'Robots' using the HSSF API. +

+

+ These robots run as services on the network and + help automate the processing of large amounts of data. Our Robots can be used to spot problems that + a human might not, and also to automate repetitive tasks. +

+

+ We found Apache POI to be extremely useful. We took the base API, wrapped it in a builder pattern and + thus created a DSL with a fluid interface. Throughout the project we enjoyed very much working with + Apache POI and found it to be very reliable. +

+
+ +
+ Deutsche Bahn + +

Deutsche Bahn uses POI's HWPF component to process complex specification documents stored in the legacy Microsoft Word file format.

+

+ In a joint effort with other international partners, Deutsche Bahn Netz AG, + the owner of the German rail infrastructure, developed a novel software toolchain to facilitate the creation of an interoperable on-board component + for a pan-European train protection system. One part of this toolchain is a domain-specific specification processor which reads the relevant + requirements documents using Apache POI, enhances them and ultimately stores their contents as ReqIF. + Contrary to DOC, this XML-based file format allows for proper traceability and versioning in a multi-tenant environment. Thus, it lends itself much + better to the management and interchange of large sets of system requirements. The resulting ReqIF files are then consumed by the various tools in + the later stages of the software development process. +

+

+ Currently available, off-the-shelf software for requirement import performed very poorly on the original specification documents due to their + structural complexity and heterogeneous formatting. POI not only helped to create a superior solution thanks to its rich API. Because of its + open-source nature it also plays a key role in ensuring the maintainability of the resulting system which is expected to stay in operation for + many decades to come. +

+

+ POI has seen various enhancements for this challenging application. Most notably, these include the addition of extensive list numbering support, + a feature which is now part of Apache TIKA. Numerous smaller improvements, such as support for table cell background shadings, interpretation of + certain kinds of OfficeDrawings, and proper conversion of special characters, also helped to derive meaning from the input files. See + here for details. +

+

+ This work was funded by the German Federal Ministry of Education and Research (Grant No. 01IS12021) in the context of the ITEA2 project + openETCS. +

+
+ +
+ +
+ + Copyright (c) @year@ The Apache Software Foundation All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml new file mode 100644 index 0000000000..6a649f0037 --- /dev/null +++ b/src/documentation/content/xdocs/changes.xml @@ -0,0 +1,777 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Previous releases +

The change log for POI 3.x and + older releases + can be found in the history section. +

+
+ + + + Upgrade batik dependency to 1.19 + Upgrade bouncycastle dependency to 1.80 + Upgrade commons-collections4 dependency to 4.5.0 + Upgrade commons-io dependency to 2.19.0 + Upgrade pdfbox dependency to 3.0.5 + Upgrade xmlsec dependency to 3.0.6 + Upgrade JaCoCo code-coverage tooling to 0.8.13 + + + SXSSF: check for null _fd instance in dispose call + Handle slightly broken WriteAccessRecord gracefully + Fix issue where Slide addTitle corrupts the ppt file + Add support for SHEET function + + + + + + Note: JDK 24 will change behavior of locale providers, some formatting might be different when upgrading + Upgrade commons-codec dependency to 1.18.0 + Upgrade bouncycastle dependency to 1.80 + Upgrade pdfbox dependency to 3.0.4 + Upgrade graphics2d dependency to 3.0.3 + + + ZipPackage save should check that intermediate steps succeed + Allow some OPC compliance checks to be tuned + Add getNumberOfTexts() method + Allow to use SXSSFSheet.setArbitraryExtraWidth() to define an adjustment-factor when auto-sizing columns + Fix reading/writing of documents with many columns + Handle decimal format '0#' the same way as Excel + Multiple fixes found by fuzzing Apache POI via oss-fuzz + Add getNumberOfTexts method to XWPFRun + Continue processing properties after multivalued properties + Streamed reading: Log failures to format formulas and numbers instead of stopping processing + Fix arbitrary extra width support + Handle extra issue where FontSystem is missing + Cell copy support does not handle Time only values properly + Issue with date/time formats that leave a space before the AM/PM part + Allow custom TempFileCreationStrategy per thread + + + + + + Add support for SOURCE_DATE_EPOCH to allow to create reproducible binary files without creation/modification-timestamp being set + Breaking change: Some invalid content in the compressed file-formats for xlsx/docx/pptx/... now fail parsing to prevent handling malicious input incorrectly + Upgrade ant dependency to 1.10.15 + Upgrade batik dependency to 1.18 + Upgrade commons-codec dependency to 1.17.1 + Upgrade commons-compress dependency to 1.27.1 + Upgrade commons-io dependency to 2.18.0 + Upgrade log4j-api dependency to 2.24.3 and add log4j-bom dependency + Upgrade pdfbox dependency to 3.0.3 + Upgrade xmlbeans dependency to 5.3.0 + Upgrade xmlsec dependency to 3.0.5 + Upgrade JaCoCo code-coverage tooling to 0.8.12 + + + Adjust HSSFWorkbook.getSheet() to return the first case-insensitive match, similar to XSSF + Fix searching text in paragraphs when text is spread across multiple runs + Support setting an arbitrary extra width value for column widths - not working - fixed in 69536 (5.4.1) + XWPFRun.getText should support delInstrText and noBreakHyphen + Support removing XWPF Styles + Add word10.xsd to poi-ooxml-full + Fix issue with param order in MIRR function evaluation + Number of blocks used by the property table missing from the file header + Shifting columns with merged regions generates an error about overlapping regions + default ignoreMissingFontSystem to true + DefaultTempFileCreationStrategy should worry about OS deleting the temp dir + add XSSFReader.getSheetIterator + Issue when evaluating WORKDAY function that has a cell ref as 2nd param + Throw exception if xlsx/docx/pptx contains duplicate file names + + + + + + Upgrade log4j-api dependency to 2.23.1 + Upgrade commons-codec dependency to 1.17.0 + Upgrade commons-compress dependency to 1.26.2 + Upgrade commons-io dependency to 2.16.1 + Upgrade pdfbox dependency to 3.0.2 and graphics2d dependency to 3.0.2 + Upgrade xmlsec dependency to 3.0.4 + Upgrade bouncycastle dependency to 1.79 + Upgrade xmlbeans dependency to 5.2.1 + + + Add support for hyperlink based relationships which are stored separately from other relationships + Some boolean attribute values are written as true instead of 1 + IllegalArgumentException: Unexpected color choice CTFontCollectionImpl when reading font color for a table cell + Fix issue in SXSSF when there are missing fonts + SXSSFWorkbook now removes temp files when closed - removing need for a separate dispose call + Support allowStoredEntriesWithDataDescriptor=true when reading zip data + Fix regression in date handling when evaluating TEXT function + Rework exception handling for missing fonts to make it more robust + handle elliptical arcs that have colinear points + Support for polylines + Support SVGs in XWPF + + + + + + Upgrade commons-io dependency to 2.15.0 + Upgrade commons-compress dependency to 1.25.0 + Upgrade log4j-api dependency to 2.21.1 + Upgrade xmlsec dependency to 3.0.3 + Upgrade bouncycastle dependency to 1.77 + Upgrade xmlbeans dependency to 5.2.0 + + + Better support for edge cases in TEXT function + Fix issue where chart axes were defaulting to have blank number formats - which recent versions of Excel treat as corrupted. + Add Complex scripts support in XWPFRun + POI 5.2.4 had a regression where it did not close user-provided InputStreams. In POI 5.2.5, user-provided InputStreams are again closed. There are new constructors that allow you to control whether the streams are closed. + XSSFExcelExtractor does not format formula results like the streaming based extractor + Improve cell width logic to avoid rounding issues + DrawTextFragment height should include leading space + + + + + + Discontinued the binary packages to reduce maintenance overhead, please rebuild the sources locally or use Maven Central for binary files + Upgrade log4j-api dependency to 2.20.0 + Upgrade xmlsec dependency to 3.0.2 + Upgrade batik dependency to 1.17 + Upgrade pdfbox dependency to 2.0.29, graphics2d to 0.43 + Upgrade commons-codec dependency to 1.16.0 + Upgrade commons-compress dependency to 1.24.0 + Upgrade commons-io dependency to 2.13.0 + Upgrade curvesapi dependency to 1.08 + Upgrade SparseBitSet dependency to 1.3 + Use jdk18on versions of bouncycastle jars (v1.76) + + + Fix invalid loop-condition when cleaning up CTCells + make stream/directory name lookup in OLE2 case insensitive + Provide a utility to clear all thread-locals to avoid reports of memory-leaks in web-application containers + Fix handling padding when decrypting data + Include alpha/transparency value when creating an XSSFColor from an AWT Color object + Include alpha/transparency value when setting a color-value for a font + Fix graceful handling of missing font-system on the operating system + Incomplete Shared String Tables were causing read failures + NullPointerException in XSSFReader$SheetIterator.next() + Multiple gradient stops at the exact same location causing a rendering failure + Add a method to properly write the header necessary for a MSG attachment + Make XSLFDiagramGroupShape public + Inserting paragraph into table from cursor + Add theme support to XWPF + Fix issue where cells with formulas and cached results of string type do not properly support shared strings + Text run highlight colors were ignored + Fix parsing formulas with sheet-names which contain single quotes + Fix performance issue with XSSFSheet.groupRow + Improve boolean functions empty cell handling + Fix performance issue with SXSSFCell.getColumnIndex() + SignatureConfig: remove ThreadLocals and deprecated code associated with them + Remove support for zip/tgz release artifacts + Improve performance of SheetDataWriter outputEscapedString + Ensure ZipPackage closes input stream when exceptions happen + Issue where OFFSET function applies limits that should only apply to xls format spreadsheets + Make jar build reproducible + Fix issue with adding table formulas + XWPFTableCell: make setText fully replace the text and add appendText method to append + Basic for reading audio files in pptx files + Set standalone="yes" in XML declarations when writing OOXML format files + + + + + + Upgrade graphics2d dependency to 0.40, pdfbox to 2.0.26 + Upgrade xmlsec dependency to 3.0.0 + Upgrade xmlbeans dependency to 5.1.1 + Upgrade log4j-api dependency to 2.18.0 + Speed up processing of formulas with column-ranges, e.g. VLOOKUP(A4,$D:$E,2,0) + Speed up compilation of jar-files-only builds by avoiding direct dependency on test-execution + Avoid some more possible overly large memory allocations on certain input documents + + + setDefaultColumnStyle() in XSSFSheet/SXSSFSheet was not working as expected + add PageMargin enum + Support version property in CoreProperties + Support DAYS function + Support capitalized text in XWPFWordExtractor + Support capitalized text in WordExtractor + SXSSF doesn't update dimension field + When slides were copied, the text shapes were still referencing original slide + Use revert() instead of close() when OPCPackage is opened read-only + Row shifting does not properly handle hyperlinks that span multiple cells + RATE function fails in some cases + change XSSFHyperlink code that copies HSSFWorkbook to respect cell ranges + Fix issue with parsing formulas that have sheet names containing certain chars + Fix rounding issue in MROUND function + Fix bug where XWPFNumbering.removeAbstractNum removes by list index, not abstractNumId + DataFormatter issue with rounding in some use cases + Support AVERAGEIF function + XSSFColor could not be used the same time as org.apache.poi.ss.util classes + Support CEILING.MATH and FLOOR.MATH functions + support case insensitive matching in D* functions + add support for DCOUNT, DCOUNTA, DAVERAGE, DSTDEV, DSTDEVP, DVAR, DVARP and DPRODUCT functions + Add STDEVP, STDEVA, STDEVPA, VARA and VARPA functions + add support for unimplemented subfunctions to SUBTOTAL function + add support for STDEV.S, STDEV.P, VAR.S and VAR.P functions + add support for POISSON.DIST function + Support CEILING.PRECISE and FLOOR.PRECISE functions + D* functions should support wildcard matches + Support excel correl, covar, pearson and forecast functions + Some Password protected XLS files are not read + Support the gte attribute with XSSFConditionalFormattingThreshold + generate poi-ooxml-full classes for dml-drawing xsd + generate poi-ooxml-full classes for threaded comment and word12 xsds + add Sheet createSplitPane(int xSplitPos, int ySplitPos, int leftmostColumn, int topRow, PaneType activePane) to eventually replace the existing createSplitPane method (that has a bug in XSSFSheet) + HSSFExtendedColor was not setting RGB colors properly + Integrate SmartArt diagrams from powerpoint presentations + POI's implementation of VALUE function did not properly handle empty string input + Calling getTextHighlightColor() or getEmphasisMark() on XWPFRun can lead to corruption of file + XSSFTable.updateHeaders did not work for Worksheets created using current Excel versions + XSSFSheet.removeTable did not remove the links to the table part reference from the sheet + XSSFWorkbook.cloneSheet does not clone XSSFTables linked from the sheet + Shifting rows or columns can damage formulas in tables + XSSFPivotTable.getPivotCacheDefinition() does not work properly when XSSFPivotTable was read from an existing *.xlsx file + SXSSFWorkbook should work even when fonts not installed on OS + Issue with orphaned (in package) images and notes post slide removal + + + + + + Upgrade log4j-api dependency to 2.17.2 and graphics2d dependency to 0.35 as well as some test dependencies + + + Fix issue where Boolean functions (AND, OR) do not work properly in array context + add removeTextParagraph to text box API + add removeTextRun to paragraph API + Fix stackoverflow issue when removing formulas with circular references + Support rich text strings in SXSSFWorkbook (only when shared string table is used) + POIXMLPropertiesTextExtractor returns duplicate key for Core properties + POI 5.2.1 can allocate byte arrays that are too big + + + + + + Upgrade curvesapi dependency to 1.07 + + + IOUtils.toByteArray did not fully take into account value set by IOUtils.setByteArrayMaxOverride + Collapsing a column group was incorrectly implemented + DOLLAR function is not properly implemented + Multiplication in cell formulas can have small rounding issues + Picture resize can lead to infinite loop + Add support for NUMBERVALUE function + Add support for Normal Distribution functions + Add support for BESSELJ function + Add support for DOLLARDE and DOLLARFR functions + Add support for WORKDAY.INTL functions + Fix issue where malformed TNEF file can cause memory issues + XAdES-XL modifications due to specification check errors + + + + + + Refactor to XSSFReader, SharedStringsTable, CommentsTable and ThemesTable to make them more extensible + Upgrade log4j-api dependency to 2.17.1 + Upgrade BouncyCastle dependency to 1.70 + Upgrade PDFBox Graphics2d dependency to 0.34 and PDFBox dependency to 2.0.25 + + + upgrade to xmlsec 2.3.0 - make secure validation configurable + Digital Signature - set commitment type and purpose + Issue in XSSFReader where string builder is not always cleared between cell reads + handle date/time fields and formats + Cell Conditional Formatting: Change regex to account for decimals with no leading digit + Log warning when long sheet names are trimmed + Add support for XLOOKUP and XMATCH functions + Customize Spliterator implementations for better parallelism + DataFormatter incorrectly formats data formats with escaped percent character + XSSFSheet.createTable generates corrupted file when a header's cell contains a line break + Password Protecting a document when Saxon is on classpath can corrupt the output + DataFormatter: add setUse4DigitYearsInAllDateFormats(boolean) method with default of false + DataFormatter: add setUseCachedValuesForFormulaCells(boolean) method with default of false + Fix issue in XSSFSheet getDrawingPatriarch + Fix issue with excessive logging of invalid parts in OOXML files + Cell copy does not respect rich text + stop using file deleteOnExit in DefaultTempFileCreationStrategy + + + + + + XDDF - bug fixes + Upgrade Batik dependency to 1.14 + Upgrade BouncyCastle dependency to 1.69 (including adding dependency on bcutil jar) + Upgrade Commons-Compress dependency to 1.21 + Upgrade XMLSec dependency to 2.2.3 + Upgrade PDFBox Graphics2d dependency to 0.33 (and test with PDFBox 2.0.24) + Add commons-io 2.11.0 as a dependency + Upgrade XMLBeans to 5.0.2 + Internal logging in POI now uses Apache Log4J 2 + Small refactor to XSSFReader to make it more extensible - should not affect most users unless they subclass XSSFReader + By default, no DTDs will be accepted in XML files. This can be relaxed by setting POIXMLTypeLoader.DEFAULT_XML_OPTIONS.setDisallowDocTypeDeclaration(false). + + + XSLFTable - revert addRow to behaviour before 4.1.2 + Don't throw exception on empty data source + Set hole size for doughnut chart + XSSFDrawing - import chart from other drawing + XSSFWorkbook - reference cloned sheet in cloned chart data + XSSFWorkbook - clone sheet with chart + XSLFSlide - import slide notes when importing slide content + Manipulate individual data point properties + Allow change of EncryptionMode + Migrate ant / maven to gradle build + the method getCap() does not work correctly in xslf.usermodel.XSLFTextRun + Document signed by POI reported as 'partially' signed + LineRect shall throw more specific exceptions + Incorrect sizes of images in SVG + Add commons-io as a dependency + Handle issue where OOXML file has metadata and metadata.xml + Support IFS and SWITCH functions + Support TEXTJOIN function + TRIM function should trim extra spaces between words + Fix issue with removing parent formula when shared formulas are used + Support IFNA function + Add support for T literal in DateTime formats + SUMIF and SUMIFS functions do not properly handle #N/A values + add support for MAXIFS, MINIFS, AVERAGEIFS functions + Use viewbox when rendering SVG images + add optional support in ZipArchiveFakeEntry to use a temp file + Strip color formatting in headers and footers + Fix issues with WEEKNUM function evaluation + XSLF CustomGeometry - replace XmlStreamReader access with XmlBeans delegate + Support PERCENTRANK and related functions + Support TDIST and related functions + Better support for shared hyperlinks + Add support to ZipPackage to allow temp files to be used to save memory (useful for writing xlsx/pptx/docx files with pictures, etc.). + Allow ZipSecureFile.setMaxEntrySize to accept sizes above 4Gb + Fix issue in XWPFTable.setTableAlignment(TableRowAlign tra) + Create XAdES-T signature with XAdESXLSignatureFacet + QUOTIENT function does not support cell references + Allow creation of POIFSFileSystem instances from FileChannels but with an optional flag to prevent POI from closing the channel + WorkbookFactory.create(File, ...) should throw exception if the input file is not in a supported format + Incorrect fetching paragraph and text runs props from master shape + SlideShowFactory.create(File, ...) should throw exception if the input file is not in a supported format + Remove finalizer on SXSSF SheetDataWriter + Use image/x-pict as mime type for pict format pictures (previous versions used a mix of image/pict and image/x-pict) + HSLF FillType for texture and background color fills ignored + + + + + + Upgrade to ECMA-376 5th edition (transitional) schemas - expect API breaks when using XmlBeans directly
+ some smaller changes are necessary when code is using the low-level CT... classes
+ Change artifact names of poi-/ooxml-schemas to poi-ooxml-lite/full + ooxml-security is part of poi-ooxml-full (known as ooxml-schemas) now and won't be provided separately + updated dependencies to XMLSec 2.2.1, Bouncycastle 1.68, Commons-Codec 1.15, Commons-Compress 1.20 + XWPF - improvements in table and paragraph + XSLF - improvements for paragraph + provide JigSaw modules - some classes moved between packages for the JDK 9+ support, e.g. + ExtractorFactory, so imports need to be adjusted + removed dependencies to jaxb + removed deprecated code + new experimental DeferredSXSSFWorkbook which creates fewer temp files by lazily generating rows (see DeferredGeneration in poi-examples) +
+ + Ensure "applyAlignment" in cell-styles is enabled when necessary + Allow to parse a file where the relationship-id is an empty string + Do not use CTDataValidations.getCount(), instead only rely on getDataValidationArray + Support missing or blank match_type for function Match + Do not populate cells with a paragraph when loading an existing document + Use correct index for 1-based pictures + Fix invalid moving of merged regions + Use proper position for the WriteAccessRecord + Make LOOKUP functions deal with empty last arg correctly + Improve performance of reading OLE2 files + Handle MissingArgEval in relational operators + Avoid NullPointerException in XSSFReader.SheetIterator.next() if files contain macros + Avoid NullPointerException if RangeCopier encounters empty/missing rows + Add some more methods to allow to use CellType everywhere + Fix regression introduced via Bug 60845: There are more items in CTBorder that need to be handled in equals() + Adjust handling of formula-cells to fix regression with missing re-calculation introduced in 4.1.0 + Include content control text in word extraction also if it is part of a paragraph + Take the replacement of RichText strings into account when computing length of strings + SS method to check if a Named Range is hidden or not + SS method to check if a Named Range is hidden or not + HSMF enhancements - NamedIdChunk, MultiValueChunks, ByteChunkDeferred + Fix incorrect handling of format which should not produce any digit for zero + Speed up auto-sizing of columns when the sheet contains merged regions + Decrease usage of ThreadLocals in XML Signature API + Picture.resize(double scale) scales width wrong for small pictures and when dx1 is set + upgrading xmlsec causes junit tests to fail + XSLF - Wrong scheme colors used when rendering + Method setText in XWPFTableCell updates the xml and also updates the runs and iruns + XWPFTableCell does not process bodyElements when handle paragraph + XWPFNumbering.addAbstractNum will definitely throw an exception + Allow try-with-resources with OPCPackage.revert() + Add traversing and debugging interface to HSSF + Sonar fix - "Iterator.next()" methods should throw "NoSuchElementException" + RuntimeException on extracting text from Word 97-2004 Document + CountryRecord not found + Big POIFS stream result in OOM + Provide JigSaw modules + Synchronize code that initialises WorkbookFactory + Support DateValue function + Add an option for RangeCopier.copyRange() also clone styles + Retrieve default run properties from paragraph + Ole10Native aka embedded / object packager - handle UTF16 variants + XWPFSDTContent.getText() is empty for nested SDT elements + Missing quoting of pre-evaluated string values in formula cells causes corrupt files + POI HwmfGraphics cannot read the embedded document title + WMF font typeface charset encoding error + Visual signatures for .xlsx/.docx + Fix issue in testXLSXinPPT + Change TRUNC implementation to use MathX + Provide PDF rendering with PPTX2PNG + Converting cell values to boolean should throw IllegalStateException instead of RuntimeException when conversion is not possible + XSSFFont setCharset(FontCharset) should use latest class instead of deprecated one + Improve performance of cell merge + Improve performance of SXSSF cell evaluation + Change some methods to return ints instead of shorts (Font and CellStyle) + Upgrade OOXML schema to 3rd edition (transitional) + Change artifact names of poi-/ooxml-schemas + Upgrade OOXML schema to 5th edition (transitional) + Unable to convert pptx to pdf + Migrate tests to Junit 5 + Use SLF4J instead of commons-logging - use jcl-over-slf4j + Handle VmlDrawings containing spreadsheet-ml default namespace + WMF parsing failed on closed empty polygon + Remove jdk.charset module dependency for spreadsheets generation + Delete unused certificate exceptions + Fix RuntimeException on array formula referencing blank cell + Move date parsing logic to DateParser + Add length validation for Excel DataValidations that are list literals + New EmittingSXSSFWorkbook + Remove limit on number of rules in XSSFSheetConditionalFormatting + Avoid NullPointerException if RangeCopier encounters empty/missing rows + +
+ + + + Removed a lot of internal uses of StringBuffers + XDDF - some work on better chart support + Common SL / EMF - ongoing rendering fixes + XSLF - OOM fixes when parsing arbitrary shape ids + a new dependency to SparseBitSet 1.2 + updated dependencies to Bouncycastle 1.64 + + + Swap zaxxer.com:SparseBitSet for java.util.BitSet + When removing AbstractNum match by abstractNumId, not list index + Avoid endless loop/out of memory on string-replace with empty search string + Make D* functions work with numeric result column + Write pre-evaluated string-values in formula cells with the correct type + Function AND / OR should treat missing parameters as FALSE + Make getFirstRowNum() and getFirstCellNum() return -1 consistently with empty data + Make IOUtils.setByteArrayMaxOverride() work correctly + Add, insert and remove columns on XSLFTable + Fix issue with fractions where the whole number part is too large to store as an int + Produce valid PPTX file with several chart series + Fix texture fill - scale stretched images correctly + Add Doughnut chart data series support + HMEFContentsExtractor fails to extract content from winmail.dat + Inconsistent mapping of Norwegian locales for date formats + Add set level numbering on XWPFParagraph + Fix Bug in XSSFTable.setCellReferences when table is single cell + Replace Cloneable / clone() with copy constructor + Replace reflection calls in factories for Java 9+ + Fix issue with setCellValue(LocalDate) not supporting nulls properly + SlideShow rendering fixes + XWPFRun: Whitespace in text not preserved if starting with tab character. + unsafe pipe character ("|") in Relationship target attribute is not being encoded into a '%7C'. + Expose invert if negative on bar charts + Support commas, exclamation marks correctly in AreaReference + XSSFWorkbook constructor doesn't close ZipFile if an exception occurs + Regression in OldSheetRecord + + + + + + XSSF: Memory improvements which use much less memory while writing large xlsx files + XDDF: Improved chart support: more types and some API changes around angles and width units + updated dependencies to Bouncycastle 1.62, Commons-Codec 1.13, Commons-Collections4 4.4, Commons-Compress 1.19 + XWPF: Additional API methods + XSSF: Fixes to XSSFSheet.addMergedRegion() and XSSFRow.shiftRows() + EMF/HSLF: Rendering fixes + CVE-2019-12415 - XML External Entity (XXE) Processing in Apache POI + + + Cache pids to speed up custom properties "add" method + Add support for the new Java date/time API added in Java 8 + Avoid NullPointerException when reading Word Document with tables and a cell with a null descriptor + Read cells of tables correctly in cases where the last cell is not 'fake' + Do not use WeakReference for parents in Ranges to avoid spurious failures in tests + Fix regression with memory usage in XSSFRow.onDocumentWrite and some other temporary memory leaks + FractionFormat casts whole part of the value into 'int' + Allow multiple charsets for same font typeface + XSSFExportToXml adjust settings on SchemaFactory + NullPointerException from XSLFSimpleShape.getAnchor for empty xfrm tags + Add traversing and debugging interface + Fix regression when XSSFRow.shiftRows() is used + Fix texture paint handling + HSLF rendering - adjust values for presetShapeDefinition differs in HSLF/XSLF + Don't fallback to master shape properties, if master shape is not assigned + Add a ThreadLocalUtil.clearAllThreadLocals which can be used to clear thread-locals + XSSFSheet.addMergedRegion should adjust count of merged cells + Return value of XSSFSheet.addMergedRegion is off by one + Error opening XLSX after saving with a Drawing using POI + Support to create new chart without reading template + MAPIType.isFixedLength: not true in case of length > 8 + Support for seven new chart types + improve MAPIMessage.getHtmlBody + Add XWPFPicture getWidth and getDepth methods + Add XWPFRun getStyle method + Add XWPFParagraph setKeepNext method + Add XWPFParagraph createHyperlinkRun method + Improved support for writing large files + Add setters to POIXMLProperties + Enable safe removal of data series from charts + Provide example of threshold line in bar chart + + + + + + Improved support/fixes for Java 9+ and IBM JVM + New EMF renderer and support of SVG images in XSLF + Security, stability and memory/resource handling improvements + Various bug fixes across function and conditional format rule evaluation + Upgrade to XMLBeans 3.1.0 + Upgrade to Bouncycastle 1.61 + Upgrade to Curvesapi 1.06 + Upgrade to Commons-Codec 1.12 + Upgrade to Commons-Collections4 4.3 + Upgrade to XMLSec 2.1.2 + + + Avoid a possible NullPointerException in XSLFShape.selectPaint() + Implement 'ignore hidden rows' variations for existing implemented variants + Conditional Format rule evaluation calculates relative references incorrectly + Fix NPE in EDATE function when date evaluates to an invalid value + Work around illegal reflective access in Java 9+ when freeing buffers + OPCPackage Potentially clobbers files on close() + Make D* functions ignore case in headings + Adding custom properties creates invalid .xlsx file on second write + Null pointer exception in ExternSheetNameResolver.prependSheetName method + Fix copying styles/conditional formatting + Improved evaluation of array formulas with errors in arguments + Make POILogger subclassable + Support array arguments in IF and logical IS*** functions + Provide font embedding for slideshows + Fix setting values/types during formula evaluation for SXSSF + Allow to handle files with invalid content types for pictures + Fix MathX.floor for negative n + Sheetnum is not checked in InternalWorkbook.setSheetHidden() + Regression extracting text from corrupted docx files + Remove rows from a XSLFTable + EMF image support in slideshows + SVG image support in XSLF + Support GEOMEAN function + Multiple digital signature in excel file broke first signature + IBM JDK JIT causes AIOOBE in TexturePaintContext + IBM JCE workarounds + init presetShapeDefinitions.xml fail under IBM jdk + Rendering of FreeformShapes with formula fails + Remove support for reading files that have XML entity definitions + add XWPFRun setLang method + Remove unnecessary synchronization on DocumentHelper.newDocumentBuilder and SAXHelper.newXMLReader + Fix NPE in EDATE function when date evaluates to an invalid value + Conditional Format rule evaluation calculates relative references incorrectly + Implement 'ignore hidden rows' variations for existing SUBTOTAL function variants + Fix issue with CellUtil.setFont adding unnecessary styles + getForceFormulaRecalculation() returns wrong value + DataFormatter.formatCellValue() ignores use1904Windowing w/4-part date formats + + + + + + Fixes pom.xml entries for commons-maths3 (missing), curvesapi and commons-codec + Improvements for XDDF charts and text manipulation + Upgrade to XMLBeans 3.0.2 + + + Move loop invariants outside of loop for faster execution + poi-ooxml pom.xml should include dependency on poi-scratchpad + Missing Maven dependency to commons-math3 + WildFly XML parser not properly supported - Property 'http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit' is not recognized + Download page must link to https://downloads.apache.org/poi/KEYS + XSLFBackground setFill() can corrupt the document + poi-ooxml 4.0.0 should have dependency on curvesapi 1.05 + XSSFTable constructor automatically assigns invalid (non-unique) column IDs + OPCPackage#close() method is incorrectly synchronized + Remove XML Event parser code from PackagePropertiesMarshaller + Fix null pointer exception if a picture shape has no blip id + Fix Old-Xerces build issues + XSLFTableCell#removeBorder(BorderEdge.right) removes the bottom edge not the right edge. + POI Encryption didn't work with 4.0.0 but did work with 3.17 + FileMagic not correctly identified + SlideShow rendering - keyframe fractions must be increasing + Provide OOXMLLite alternative for Java 12+ + Handle off-spec, variant REFERENCE_NAME record structure in VBAMacroReader + Handle module name mapping in VBAMacroReader + Support TREND function + Rare NPE while creating XWPFSDTContent + Support for FREQUENCY function + WorkbookFactory.create support for subclass of File, eg from JFileChooser + XLSB number extraction improvements + Support FREQUENCY function + Add common-compress jar to bin zip/tgz + Upgrade bouncycastle dependency to 1.60 + Relations on XSLFPictureShape were removed unconditionally + Define XDDF user model for text body, its paragraphs and text runs + Import chart on drawing + Support axIds in XDDF + XSSFWorkbook.setSheetName() does not update references in charts + Localisation (Internationalisation in other languages) when applied in charts corrupt the MS Word file + + + + + + Removed support for Java 6 and 7 making Java 8 the minimum version supported + New OOXML schema (1.4) necessary, because of incompatible XMLBeans loading not anymore through POIXMLTypeLoader + + + Remove OPOIFS* + Importing content does not copy hyperlink address + repeated call to XSLFSheet.removeShape leads to java.lang.IllegalArgumentException: partName + Don't try to parse embedded package relationships + Work on providing an updated version of XMLBeans + Document last printed in the year 27321 + (S)XSSFWorkbook/POIXMLDocument.write(OutputStream) closes the OutputStream + Extract configuration while verifying XML signatures + Compiling with Java 10 fails with ClassCastException / use commons-compress + Unsplit packages for Jigsaw / Java 9 compatibility + TestFonts fails on Mac + Two shapes have the same shapeId within the same slide + Zero width shapes aren't rendered + SlideNames should not be null but have a default as if accessed by VBA + Fix rendering of AutoShapes + Forbid calls to InputStream.available + HSSFWorkbook.setActiveCell() does not actually make the cell selected in Excel + HSLFShape.getShapeName() returns name of shapeType and not the shape name + Decommission XSLF-/PowerPointExtractor + Text not extracted from grouped text shapes in HSLF + Support XML signature over windows certificate store + Add support for major and minor units on chart axes + Added methods to position table + Remove deprecated classes (POI 4.0.0) + Add functions to get, set, remove outer borders for tables + Define XDDF user model for shape properties to be shared between XSLF, XSSF and XWPF + Do not fail with "part already exists" when tables are created/removed + Add more information to exception text and verify that it is thrown + Add .gitattribute file and set lf for one sample-file + Embed Excel / Ole objects into powerpoint + narrow generics definition because of tighter java9 checks + Refactor PackagePartName handling and add getUnusedPartIndex method + Move Ole marker generation to Ole10Native + Replace ClassID statics with enum + Provide schema for AlternateContent - provide new ooxml-schemas-1.4.jar + Change how deleted content is detected to not incorrectly see too much text as deleted, this was introduced with bug 58067 + Fix usage of getLastCellNum() when calculating worksheet dimension during saving + Avoid IndexOutOfBounds access when reading pictures + Support third party tool generated files using WorkBook as their POIFS directory name + Regression in ppt parsing: typeface can't be null or empty + Share chart data implementation between XSLFChart, XSSFChart and XWPFChart through XDDF + Infinite loop in SectionIDMap.get() and .put() + Surface XSSF Header/Footer Attributes + CellRangeAddresses support iterating over their CellAddresses + CellRangeUtil merge cell ranges broken for certain orders of arguments + Fix various situations that were handled incorrectly in HSSFOptimiser + XSLFSlide does not contain isHidden and setHidden like HSLFSlide does + Performance improvement to XSSFExportToXML + Add a method to pass the actual Color to StylesTable.findFont() + Add support for modules in VBAMacroReader + Add XSSFWorkbook.setCellFormulaValidation() to control if formulas are validated during Cell.setCellFormula() + Fix calculating/setting formula value + Support behavior of function CEILING in newer versions of Microsoft Excel + Correctly handle references that end up outside the workbook when cells with formulas are copied + Add endSheet() to XSSFEventBasedExcelExtractor + Exchange order of writing parts into Zip to allow some tools to handle files better + Support matrix functions + Deleting a picture that is used twice on a slide corrupt the slide + Back-off to brute-force search for macro content if macro offset is incorrect + Pivot table enhancements + add API for working with RichStringText + Avoid iterating over chars (use codepoints instead) + Update OFFSET function to support optional values + Rename getAllEmbedds method to getAllEmbeddedParts (getAllEmbedds is retained but deprecated) + Replace org.apache.poi.openxml4j.util.Nullable with java.lang.Optional + Change default DSIG signing algorithm to SHA256 + Support AREAS function + Renames org.apache.poi.xwpf.usermodel.TextSegement to org.apache.poi.xwpf.usermodel.TextSegment + Better support for Footnotes and Endnotes + + + +
diff --git a/src/documentation/content/xdocs/components/configuration.xml b/src/documentation/content/xdocs/components/configuration.xml new file mode 100644 index 0000000000..71a1557164 --- /dev/null +++ b/src/documentation/content/xdocs/components/configuration.xml @@ -0,0 +1,232 @@ + + + + + +
+ Apache POI™ - Configuration + + + +
+ + +
Overview +

The best way to learn about using Apache POI is to read through the feature documentation + and other online examples online. +

+

To keep the features documentation focused on the APIs, there is little mention of some of the configuration + settings that can be enabled that may prove useful to users who have to handle very large documents or very + large throughput. +

+
+
Configuration via Java-code when calling Apache POI +

These API methods allow to configure behavior of Apache POI for special needs, e.g. when processing excessively + large files. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Configuration SettingDescription
org.apache.poi.ooxml.POIXMLTypeLoader.DEFAULT_XML_OPTIONSPOI support for XSSF APIs relies heavily on XMLBeans. + This instance can be configured. + It is recommended to take care if you do change any of the config items. + In POI 5.1.0, we will disallow Doc Type parsing in the XML files embedded in xlsx/docx/pptx/etc files, by default. + DEFAULT_XML_OPTIONS.setDisallowDocTypeDeclaration(false) will undo this change. +
+ org.apache.poi.util.IOUtils.setByteArrayMaxOverride(int maxOverride) + If this value is set to > 0, IOUtils.safelyAllocate(long, int) will ignore the maximum record length parameter. + This is designed to allow users to bypass the hard-coded maximum record lengths if they are willing to accept the risk of allocating memory up to the size specified. + It also allows to impose a lower limit than used for very memory constrained systems. +

+ Note: This is a per-allocation limit and does not allow you to limit overall sum of allocations! Use -1 for using the limits specified per record-type. +

+
+ org.apache.poi.openxml4j.util.ZipSecureFile.setMinInflateRatio(double ratio) + Sets the ratio between de- and inflated bytes to detect zipbomb. + It defaults to 1% (= 0.01d), i.e. when the compression is better than 1% for any given read package part, the parsing will fail indicating a Zip-Bomb. +
+ org.apache.poi.openxml4j.util.ZipSecureFile.setMaxEntrySize(long maxEntrySize) + Sets the maximum file size of a single zip entry. It defaults to 4GB, i.e. the 32-bit zip format maximum. + This can be used to limit memory consumption and protect against security vulnerabilities when documents are provided by users. + POI 5.1.0 removes the previous limit of 4GB on this setting. +
+ org.apache.poi.openxml4j.util.ZipSecureFile.setMaxTextSize(long maxTextSize) + Sets the maximum number of characters of text that are extracted before an exception is thrown during extracting text from documents. + This can be used to limit memory consumption and protect against security vulnerabilities when documents are provided by users. + The default is approx 10 million chars. Prior to POI 5.1.0, the max allowed was approx 4 billion chars. +
org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.setThresholdBytesForTempFiles(int thresholdBytes) + Added in POI 5.1.0. + Number of bytes at which a zip entry is regarded as too large for holding in memory + and the data is put in a temp file instead - defaults to -1 meaning temp files are not used + and that zip entries with more than 2GB of data after decompressing will fail, 0 means all + zip entries are stored in temp files. A threshold like 50000000 (approx 50Mb is recommended) +
org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.setEncryptTempFiles(boolean encrypt) + Added in POI 5.1.0. + Whether temp files should be encrypted (default false). Only affects temp files related to zip entries. +
org.apache.poi.openxml4j.opc.ZipPackage.setUseTempFilePackageParts(boolean tempFilePackageParts) + Added in POI 5.1.0. + Whether to save package part data in temp files to save memory (default=false). +
org.apache.poi.openxml4j.opc.ZipPackage.setEncryptTempFilePackageParts(boolean encryptTempFiles) + Added in POI 5.1.0. + Whether to encrypt package part temp files (default=false). +
org.apache.poi.extractor.ExtractorFactory.setThreadPrefersEventExtractors(boolean preferEventExtractors) and + org.apache.poi.extractor.ExtractorFactory.setAllThreadsPreferEventExtractors(Boolean preferEventExtractors) + + When creating text-extractors for documents, allows to choose a different type of extractor which parses documents + via an event-based parser. +
Various classes: setMaxRecordLength(int length) + + Allows to override the default max record length for various classes which + parse input data. E.g. XMLSlideShow, XSSFBParser, HSLFSlideShow, HWPFDocument, + HSSFWorkbook, EmbeddedExtractor, StringUtil, ... +
+ This may be useful if you try to process very large files which otherwise trigger + the excessive-memory-allocation prevention in Apache POI. +
org.apache.poi.xslf.usermodel.XSLFPictureData.setMaxImageSize(int length) + + Allows to override the default max image size allowed for XSLF pictures. +
org.apache.poi.xssf.usermodel.XSSFPictureData#setMaxImageSize(int length) + + Allows to override the default max image size allowed for XSSF pictures. +
org.apache.poi.xwpf.usermodel.XWPFPictureData#setMaxImageSize(int length) + + Allows to override the default max image size allowed for XWPF pictures. +
+
+
Observed Java System Properties +

Apache POI supports some Java System Properties. +

+ + + + + + + + + + + + + + + + + + + + +
System propertyDescription
java.io.tmpdir + Apache POI uses the default mechanism of the JDK for specifying the location of + temporary files. +
org.apache.poi.hwpf.preserveBinTables and org.apache.poi.hwpf.preserveTextTable + Allows to adjust how parsing Word documents via HWPF is handling tables. +
org.apache.poi.ss.ignoreMissingFontSystemAdded in POI 5.2.3. + Instructs Apache POI to ignore some errors due to missing fonts and thus allows + to perform more functionality even when no fonts are installed. +
+ Note: Some functionality will still not be possible as it cannot use default-values, e.g. rendering + slides, drawing, ... +
+
+ + +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/components/diagram/index.xml b/src/documentation/content/xdocs/components/diagram/index.xml new file mode 100644 index 0000000000..b14c8fcf56 --- /dev/null +++ b/src/documentation/content/xdocs/components/diagram/index.xml @@ -0,0 +1,107 @@ + + + + + +
+ Apache POI™ - HDGF and XDGF - Java API To Access Microsoft Visio Format Files + Overview + + + +
+ + +
+ Overview + +

HDGF is the POI Project's pure Java implementation of the + Visio binary (VSD) file format. XDGF is the POI Project's + pure Java implementation of the Visio XML (VSDX) file format.

+ +

Currently, HDGF provides a low-level, read-only api for + accessing Visio documents. It also provides a + way + to extract the textual content from a file. +

+

At this time, there is no usermodel api or similar, + only low level access to the streams, chunks and chunk commands. + Users are advised to check the unit tests to see how everything + works. They are also well advised to read the documentation + supplied with + vsdump + to get a feel for how Visio files are structured.

+

To get a feel for the contents of a file, and to track down + where data of interest is stored, HDGF comes with + VSDDumper + to print out the contents of the file. Users should also make + use of + vsdump + to probe the structure of files.

+ + + This code currently lives the + scratchpad area + of the POI SVN repository. To use this component, ensure + you have the Scratchpad Jar on your classpath, or a dependency + defined on the poi-scratchpad artifact - the main POI + jar is not enough! See the + POI Components Map + for more details. + + +
+ Steps required for write support +

Currently, HDGF is only able to read visio files, it is + not able to write them back out again. We believe the + following are the steps that would need to be taken to + implement it.

+
    +
  1. Re-write the decompression support in LZW4HDGF as + HDGFLZW, which will be much better documented, and also + under the ASL. Completed October 2007
  2. +
  3. Add compression support to HDGFLZW. + In progress - works for small streams but encoding + goes wrong on larger ones
  4. +
  5. Have HDGF just write back the raw bytes it read in, and + have a test to ensure the file is un-changed.
  6. +
  7. Have HDGF generate the bytes to write out from the + Stream stores, using the compressed data as appropriate, + without re-compressing. Plus test to ensure file is + un-changed.
  8. +
  9. Have HDGF generate the bytes to write out from the + Stream stores, re-compressing any streams that were + decompressed. Plus test to ensure file is un-changed.
  10. +
  11. Have HDGF re-generate the offsets in pointers for the + locations of the streams. Plus test to ensure file is + un-changed.
  12. +
  13. Have HDGF re-generate the bytes for all the chunks, from + the chunk commands. Tests to ensure the chunks are + serialized properly, and then that the file is un-changed
  14. +
  15. Alter the data of one command, but keep it the same + length, and check visio can open the file when written + out.
  16. +
  17. Alter the data of one command, to a new length, and + check that visio can open the file when written out.
  18. +
+
+
+ +
diff --git a/src/documentation/content/xdocs/components/document/docoverview.xml b/src/documentation/content/xdocs/components/document/docoverview.xml new file mode 100644 index 0000000000..621e8e9309 --- /dev/null +++ b/src/documentation/content/xdocs/components/document/docoverview.xml @@ -0,0 +1,113 @@ + + + + + +
+ Apache POI™ - HWPF - Java API to Handle Microsoft Word Files + Word File Format + + + +
+ + +
The Word 97 File Format in semi-plain English + +

The purpose of this document is to give a brief high level overview of the + HWPF document format. This document does not go into in-depth technical + detail and is only meant as a supplement to the Microsoft Word 97-2007 + Binary File Format freely available from + Microsoft.

+

The OLE file format is not discussed in this document. It is assumed that + the reader has a working knowledge of the POIFS API.

+ +
Word file structure +

A Word file is made up of the document text and data structures + containing formatting information about the text. Of course, this is a + very simplified illustration. There are fields and macros and other + things that have not been considered. At this stage, HWPF is mainly + concerned with formatted text.

+
+
Reading Word files +

The entry point for HWPF's reading of a Word file is the File Information + Block (FIB). This structure is the entry point for the locations and size + of a document's text and data structures. The FIB is located at the + beginning of the main stream.

+
Text +

The document's text is also located in the main stream. Its starting + location is given as FIB.fcMin and its length is given in bytes by + FIB.ccpText. These two values are not very useful in getting the text + because of unicode. There may be unicode text intermingled with ASCII + text. That brings us to the piece table.

+

The piece table is used to divide the text into non-unicode and unicode + pieces. The size and offset are given in FIB.fcClx and FIB.lcbClx + respectively. The piece table may contain Property Modifiers (prm). + These are for complex(fast-saved) files and are skipped. Each text piece + contains offsets in the main stream that contain text for that piece. + If the piece uses unicode, the file offset is masked with a certain bit. + Then you have to unmask the bit and divide by 2 to get the real file + offset.

+
+
Text Formatting +
Stylesheet +

All text formatting is based on styles contained in the StyleSheet. + The StyleSheet is a data structure containing among other things, style + descriptions. Each style description can contain a paragraph style and + a character style or simply a character style. Each style description + is stored in a compressed version on file. Basically these are deltas + from another style.

+

Eventually, you have to chain back to the nil style which is an + imaginary style with certain implied values.

+
+
Paragraph and Character styles +

Paragraph and Character formatting properties for a document's text are + stored on file as deltas from some base style in the Stylesheet. The + deltas are used to create a complete uncompressed style in memory.

+

Uncompressed paragraph styles are represented by the Pargraph + Properties(PAP) data structure. Uncompressed character styles are + represented by the Character Properties(CHP) data structure. The styles + for the document text are stored in compressed format in the + corresponding Formatted Disk Pages (FKP). A compressed PAP is referred + to as a PAPX and a compressed CHP is a CHPX. The FKP locations are + stored in the bin table. There are separate bin tables for CHPXs and + PAPXs. The bin tables' locations and sizes are stored in the FIB.

+

A FKP is a 512 byte OLE page. It contains the offsets of the beginning + and end of each paragraph/character run in the main stream and the + compressed properties for that interval. The compressed PAPX is based on + its base style in the StyleSheet. The compressed CHPX is based on the + enclosing paragraph's base style in the Stylesheet.

+
+
Uncompressing styles and other data structures +

All compressed properties(CHPX, PAPX, SEPX) contain a grpprl. A grpprl + is an array of sprms. A sprm defines a delta from some base property. + There is a table of possible sprms in the Word 97 spec. Each sprm is a + two byte operand followed by a parameter. The parameter size depends on + the sprm. Each sprm describes an operation that should be performed on + the base style. After every sprm in the grpprl is performed on the base + style you will have the style for the paragraph, character run, + section, etc.

+
+
+
+
+ +
+ diff --git a/src/documentation/content/xdocs/components/document/index.xml b/src/documentation/content/xdocs/components/document/index.xml new file mode 100644 index 0000000000..cf0e682d48 --- /dev/null +++ b/src/documentation/content/xdocs/components/document/index.xml @@ -0,0 +1,235 @@ + + + + + +
+ Apache POI™ - HWPF and XWPF - Java API to Handle Microsoft Word Files + Overview + + + + + + +
+ + +
Overview + +

HWPF is the name of our port of the Microsoft Word 97(-2007) file format + to pure Java. It also provides limited read only support for the older + Word 6 and Word 95 file formats.

+ +

The partner to HWPF for the new Word 2007 .docx format is XWPF. + Whilst HWPF and XWPF provide similar features, there is not a common + interface across the two of them at this time.

+ +

Both HWPF and XWPF could be described as "moderately functional". For some + use cases, especially around text extraction, support is very strong. For + others, support may be limited or incomplete, and it may be necessary to + dig down into low-level code. Error checking may be missing in places, + so it may be possible to accidentally generate invalid files. Enhancements + to fix such things are generally very well received!

+ +

As detailed in the Components + Page, HWPF is contained within the poi-scratchpad-XXX.jar, while XWPF + is in the poi-ooxml-XXX.jar. You will need to ensure you include the appropriate + jars (and their dependencies!) in your classpath to use HWPF or XWPF.

+ +

Please note that in version 3.12, due to a bug, you might need to include + poi-scratchpad-XXX.jar when using XWPF. This has been fixed again for the next + release as there should not be such a dependency.

+ +
+
+ An overview of the code +

+ Source in the org.apache.poi.hwpf.model tree is the Java representation of + internal Word format structure. This code is "internal", it shall not + be used by your code. Code from org.apache.poi.hwpf.usermodel + package is actual public and user-friendly (as much as possible) API to access document + parts. Source code in the + org.apache.poi.hwpf.extractor + tree is a wrapper of this to facilitate easy extraction of interesting things (eg the Text), + and + org.apache.poi.hwpf.converter + package contains Word-to-HTML and Word-to-FO converters (latest can be used to generate PDF + from Word files when using with + Apache FOP + ). Also there is a small file-structure-dumping utility in + org.apache.poi.hwpf.dev + package, primally for developing purposes. +

+ +

+ The main entry point to HWPF is HWPFDocument. Currently it has a lot of references both to + internal interfaces ( + org.apache.poi.hwpf.model + package) and public API ( + org.apache.poi.hwpf.usermodel + ) package. It is possible that it will be split into two different interfaces (like WordFile + and WordDocument) in later versions. +

+ +

+ The main entry point to XWPF is XWPFDocument. From there, you can get the + paragraphs, pictures, tables, sections, headers etc. +

+

+ Currently, there are only a handful of example programs using HWPF and XWPF + available. They can be found in svn in the examples section, under + HWPF + and + XWPF. + Both HWPF and XWPF have fairly high levels of unit test coverage, which + provides examples of using the various areas of functionality of both + modules. These can be found in svn, under + HWPF + and + XWPF. + Contributions of more examples, whether inspired by the unit tests or + not, would be most welcomed! +

+ +
+
+ HWPF Notes + +

A .doc Word document, as handled by HWPF, can be considered as very long single + text buffer. The HWPF API provides "pointers" + to document parts, like sections, paragraphs and character runs. Usually user will iterates + over main document part sections, paragraphs from sections and character runs from + paragraph. Each such interface is a pointer to document text subrange along with additional + properties (and they all extends same Range parent class). There is additional Range + implementations like Table, TableRow, TableCell, etc. Some structures like Bookmark or Field + can also provide subranges pointers. +

+ +

Changing file content usually requires a lot of synchronized changes in those structures like + updating property boundaries, position handlers, etc. Because of that HWPF API shall be + considered as not thread safe. In addition, there is a "one pointer" rule for changing + content. It means you should not use two different Range instances at one time. More + precisely, if you are changing file content using some range pointer, all other range + pointers except parents' ones become invalid. For example if you obtain overall range (1), + paragraph range (2) from overall range and character run range (3) from paragraph range and + change text of paragraph, character run range is now invalid and should not be used, but + overall range pointer still valid. Each time you obtaining range (pointer) new instance is + created. It means if you obtained two range pointers and changed document text using first + range pointer, second one became invalid. +

+ +
+
+ XWPF Patches Required! + +

At the moment, XWPF covers many common use cases for reading and writing + .docx files. Whilst this is a great thing, it does mean that XWPF does + everything that the current POI committers need it to do, and so none of + the committers are actively adding new features.

+ +

If you come across a feature in XWPF that you need, and isn't currently + there, please do send in a patch to add the extra functionality! More details + on contributing patches are available on the "Contribution to POI" page.

+
+ +
+ HWPF Patches Required! + +

At the moment we unfortunately do not have someone taking care for HWPF + and fostering its development. What we need is someone to stand up, take + this thing under his hood as his baby and push it forward. Ryan Ackley, + who put a lot of effort into HWPF, is no longer on board, so HWPF is an + orphan child waiting to be adopted.

+ +

If you are interested in becoming the new HWPF + pointman, you should look into the Microsoft Word internals. A good + starting point seems to be Ryan Ackley's overview. An introduction to the binary + file formats is available + from Microsoft, which has some good references and links. After that, + the full details on the word format are available from + Microsoft, + but the documentation can be a little hard to get into at first... Try reading the + overview first, and looking at the existing + code, then finally look up the documentation for specific missing features.

+ +

As a first step you should familiarize yourself with the source code, + examples, test cases, and the HWPF patches available at Bugzilla (if any). Then you + should compile an overview of

+ +
    +
  • the current HWPF status,
  • +
  • the patches in Bugzilla to be checked + in (and those that should better be ditched),
  • +
  • the available test cases and the test cases still to be written,
  • +
  • the available documentation and the docs to be written,
  • +
  • anything else that seems reasonable
  • +
+ +

When you start coding, you will not yet have write access to the + SVN repository. Please submit your patches to Bugzilla and nag the dev list until someone commits + them. Besides the actual checking in of HWPF patches, current POI + committers will also do some minor reviews now and then of your source code + patches, test cases and documentation to help ensure software quality. But + most of the time you will be on your own. However, anyone offering useful + contributions over a period of time will be offered committership!

+ +

Please do not forget to write JUnit test cases and documentation! + We won't accept code that doesn't come with test cases. And please + consider that other contributors should be able to understand your source + code easily. If you need any help getting started with JUnit test cases + for HWPF, please ask on the developers' mailing list! If you show that you + are prepared to stick at it you will most likely be given SVN commit + access. See "Contribution to POI" page + for more details and help getting started.

+ +

Of course we will help you as best as we can. However, presently there + is no committer who is really familiar with the Word format, so you'll be + mostly on your own. We are looking forward for you and your contributions! + Honor and glory of becoming a POI committer are waiting!

+
+ +
+ + diff --git a/src/documentation/content/xdocs/components/document/projectplan.xml b/src/documentation/content/xdocs/components/document/projectplan.xml new file mode 100644 index 0000000000..f43c2a1b60 --- /dev/null +++ b/src/documentation/content/xdocs/components/document/projectplan.xml @@ -0,0 +1,392 @@ + + + + + +
+ Apache POI™ - HWPF - Java API to Handle Microsoft Word Files + Project Plan + + + +
+ +

HWPF Milestones

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Milestones + + Target Date + + Owner +
+ Read in a Word document +with minimum formatting +(no lists, tables, footnotes, +endnotes, headers, footers) +and write it back out with the +result viewable in Word +97/2000 + + 07/11/2003 + + Ryan +
+ Add support for Lists and +Tables + + 8/15/2003 + +   +
+ HWPF 1.0-alpha release with +documentation and examples + + 8/18/2003 + + Praveen/Ryan +
+ Add support for Headers, +Footers, endnotes, and +footnotes + + 8/31/2003 + + ? +
+ Add support for forms and +mail merge + + September/October 2003 + + ? +
+

HWPF Task Lists

+

Read in a Word document with minimum formatting (no lists, tables, footnotes, +endnotes, headers, footers) and write it back out with the result viewable in Word 97/2000

+ + + + + + + + + + + + + + + + + + + + + +
+ Task + + Target Date + + Owner +
+ Create classes to read and +write low level data +structures with test cases + + 7/10/2003 + + Ryan +
+ Create classes to read and +write FontTable and Font +names with test case + + 7/10/2003 + + Praveen +
+ Final test + + 7/11/2003 + + Ryan +
+

Develop user friendly API so it is fun and easy to read and write word documents +with java.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Task + + Target Date + + Owner +
+ Develop a way for SPRMS to +be compressed and +uncompressed + + + + +
+ Override CHPAbstractType +with a concrete class that +exposes attributes with +human readable names + + + + +
+ Override PAPAbstractType +with a concrete class that +exposes attributes with +human readable names + + + + +
+ Override SEPAbstractType +with a concrete class that +exposes attributes with +human readable names + + + + +
+ Override DOPAbstractType +with a concrete class that +exposes attributes with +human readable names + + + + +
+ Override TAPAbstractType +with a concrete class that +exposes attributes with +human readable names + + + + +
+ Override TCAbstractType +with a concrete class that +exposes attributes with +human readable names + + + + +
+ Develop a VerifyIntegrity +class for testing so it is easy +to determine if a Word +Document is well-formed. + + + + +
+ Develop general intuitive +API to tie everything together + + + + +
+

Add support for lists and tables

+ + + + + + + + + + + + + + + + +
+ Task + + Target Date + + Owner +
+ Add data structures for +reading and writing list data +with test cases. + + + + +
+ Add data structures for +reading and writing tables +with test cases. + + + + +
+

HWPF 1.0-alpha release with documentation and examples

+ + + + + + + + + + + + + + + + + + + + + +
+ Task + + Target Date + + Owner +
+ Document the user model +API + + + + +
+ Document the low level +classes + + + + +
+ Come up with detailed How-To’s + + + + +
+ +
diff --git a/src/documentation/content/xdocs/components/document/quick-guide-xwpf.xml b/src/documentation/content/xdocs/components/document/quick-guide-xwpf.xml new file mode 100644 index 0000000000..208f524504 --- /dev/null +++ b/src/documentation/content/xdocs/components/document/quick-guide-xwpf.xml @@ -0,0 +1,89 @@ + + + + + +
+ POI-XWPF - A Quick Guide + Overview + + + +
+ + +

XWPF has a fairly stable core API, providing read and write access + to the main parts of a Word .docx file, but it isn't complete. For + some things, it may be necessary to dive down into the low level XMLBeans + objects to manipulate the ooxml structure. If you find yourself having + to do this, please consider sending in a patch to enhance that, see the + "Contribution to POI" page.

+ +
Basic Text Extraction +

For basic text extraction, make use of +org.apache.poi.xwpf.extractor.XWPFWordExtractor. It accepts an input +stream or a XWPFDocument. The getText() +method can be used to +get the text from all the paragraphs, along with tables, headers etc. +

+
+ +
Specific Text Extraction +

To get specific bits of text, first create a +org.apache.poi.xwpf.XWPFDocument. Select the IBodyElement +of interest (Table, Paragraph etc), and from there get a XWPFRun. +Finally fetch the text and properties from that. +

+
+ +
Headers and Footers +

To get at the headers and footers of a word document, first create a +org.apache.poi.xwpf.XWPFDocument. Next, you need to create a +org.apache.poi.xwpf.usermodel.XWPFHeaderFooter, passing it your +XWPFDocument. Finally, the XWPFHeaderFooter gives you access to the headers and +footers, including first / even / odd page ones if defined in your +document.

+
+ +
Changing Text +

From a XWPFParagraph, it is possible to fetch the existing + XWPFRun elements that make up the text. To add new text, + the createRun() method will add a new XWPFRun + to the end of the list. insertNewRun(int) can instead be + used to add a new XWPFRun at a specific point in the + paragraph. +

+

Once you have a XWPFRun, you can use the + setText(String) method to make changes to the text. To add + whitespace elements such as tabs and line breaks, it is necessary to use + methods like addTab() and addCarriageReturn(). +

+
+ +
Further Examples +

For now, there are a limited number of XWPF examples in the + Examples Package. + Beyond those, the best source of additional examples is in the unit + tests. + Browse the XWPF unit tests. +

+
+ +
diff --git a/src/documentation/content/xdocs/components/document/quick-guide.xml b/src/documentation/content/xdocs/components/document/quick-guide.xml new file mode 100644 index 0000000000..5bcd203f39 --- /dev/null +++ b/src/documentation/content/xdocs/components/document/quick-guide.xml @@ -0,0 +1,88 @@ + + + + + +
+ POI-HWPF - A Quick Guide + Overview + + + +
+ + +

HWPF is still in early development. It is in the + scratchpad section of the SVN. You will need to ensure you + either have a recent SVN checkout, or a recent SVN nightly build + (including the scratchpad jar!)

+ +
Basic Text Extraction +

For basic text extraction, make use of +org.apache.poi.hwpf.extractor.WordExtractor. It accepts an input +stream or a HWPFDocument. The getText() +method can be used to +get the text from all the paragraphs, or getParagraphText() +can be used to fetch the text from each paragraph in turn. The other +option is getTextFromPieces(), which is very fast, but +tends to return things that aren't text from the page. YMMV. +

+
+ +
Specific Text Extraction +

To get specific bits of text, first create a +org.apache.poi.hwpf.HWPFDocument. Fetch the range +with getRange(), then get paragraphs from that. You +can then get text and other properties. +

+
+ +
Headers and Footers +

To get at the headers and footers of a word document, first create a +org.apache.poi.hwpf.HWPFDocument. Next, you need to create a +org.apache.poi.hwpf.usermodel.HeaderStores, passing it your +HWPFDocument. Finally, the HeaderStores gives you access to the headers and +footers, including first / even / odd page ones if defined in your +document. Additionally, HeaderStores provides a method for removing +any macros in the text, which is helpful as many headers and footers +do end up with macros in them.

+
+ +
Changing Text +

It is possible to change the text via + insertBefore() and insertAfter() + on a Range object (either a Range, + Paragraph or CharacterRun). + It is also possible to delete a Range. + This code will work in many, but not all cases, and patches to + improve it are gratefully received! +

+
+ +
Further Examples +

For now, the best source of additional examples is in the unit + tests. + Browse the HWPF unit tests. +

+
+ +
diff --git a/src/documentation/content/xdocs/components/hmef/index.xml b/src/documentation/content/xdocs/components/hmef/index.xml new file mode 100644 index 0000000000..e82d74958b --- /dev/null +++ b/src/documentation/content/xdocs/components/hmef/index.xml @@ -0,0 +1,216 @@ + + + + + +
+ POI-HMEF - Java API To Access Microsoft Transport Neutral Encoding Files (TNEF) + Overview + + + +
+ + +
+ Overview + +

HMEF is the POI Project's pure Java implementation of Microsoft's + TNEF (Transport Neutral Encoding Format), aka winmail.dat, + which is used by Outlook and Exchange in some situations.

+

Currently, HMEF provides a read-only api for accessing common + message and attachment attributes, including the message body + and attachment files. In addition, it's possible to have + read-only access to all of the underlying TNEF and MAPI + attributes of the message and attachments.

+

HMEF also provides a command line tool for extracting out + the message body and attachment files from a TNEF (winmail.dat) + file.

+

Write support, both for saving changes and for creating new + files, is currently unavailable. Anyone interested in working + on these areas is advised to read the + Contribution Guidelines then + join the dev list!

+ + + This code currently lives the + scratchpad area + of the POI SVN repository. To use this component, ensure + you have the Scratchpad Jar on your classpath, or a dependency + defined on the poi-scratchpad artifact - the main POI + jar is not enough! See the + POI Components Map + for more details. + +
+ +
+ Using HMEF to access TNEF (winmail.dat) files + +
+ Easy extraction of message body and attachment files + +

The class org.apache.poi.hmef.extractor.HMEFContentsExtractor + provides both command line and Java extraction. It allows the + saving of the message body (an RTF file), and all of the + attachment files, to a single directory as specified.

+ +

From the command line, simply call the class specifying the + TNEF file to extract, and the directory to place the extracted + files into, eg:

+ + java -classpath poi-5.4.1.jar:poi-scratchpad-5.4.1.jar org.apache.poi.hmef.extractor.HMEFContentsExtractor winmail.dat /tmp/extracted/ + + +

From Java, there are two method calls on the class, one to + extract the message body RTF to a file, and the other to extract + all the attachments to a directory. A typical use would be:

+ +public void extract(String winmailFilename, String directoryName) throws Exception { + HMEFContentsExtractor ext = new HMEFContentsExtractor(new File(winmailFilename)); + + File dir = new File(directoryName); + File rtf = new File(dir, "message.rtf"); + if(! dir.exists()) { + throw new FileNotFoundException("Output directory " + dir.getName() + " not found"); + } + + System.out.println("Extracting..."); + ext.extractMessageBody(rtf); + ext.extractAttachments(dir); + System.out.println("Extraction completed"); +} + +
+ +
+ Attachment attributes and contents + +

To get at your attachments, simply call the + getAttachments() method on a HMEFMessage + instance, and you'll receive a list of all the attachments.

+

When you have a org.apache.poi.hmef.Attachment object, + there are several helper methods available. These will all + return the value of the appropriate underlying attachment + attributes, or null if for some reason the attribute isn't + present in your file.

+
    +
  • getFilename() - returns the name of the attachment + file, possibly in 8.3 format
  • +
  • getLongFilename() - returns the full name of the + attachment file
  • +
  • getExtension() - returns the extension of the + attachment file, including the "."
  • +
  • getModifiedDate() - returns the date that the + attachment file was last edited on
  • +
  • getContents() - returns a byte array of the contents + of the attached file
  • +
  • getRenderedMetaFile() - returns a byte array of + a windows meta file representation of the attached file
  • +
+
+ +
+ Message attributes and message body + +

A org.apache.poi.hmef.HMEFMessage instance is created + from an InputStream of the underlying TNEF (winmail.dat) + file.

+

From a HMEFMessage, there are three main methods of + interest to call:

+
    +
  • getBody() - returns a String containing the RTF + contents of the message body.
  • +
  • getSubject() - returns the message subject
  • +
  • getAttachments() - returns the list of + Attachment objects for the message
  • +
+
+ +
+ Low level attribute access + +

Both Messages and Attachments contain two kinds of attributes. + These are TNEFAttribute and MAPIAttribute.

+

TNEFAttribute is specific to TNEF files in terms of the + available types and properties. In general, Attachments have a + few more useful ones of these then Messages.

+

MAPIAttributes hold standard MAPI properties and values, and + work in a similar way to HSMF + (Outlook) does. There are typically many of these on both + Messages and Attachments. Note - see limitations

+

Both HMEFMessage and Attachment supports + support two different ways of getting to attributes of interest. + Firstly, they support list getters, to return all attributes + (either TNEF or MAPI). Secondly, they support specific getters by + TNEF or MAPI property.

+ +HMEFMessage msg = new HMEFMessage(new FileInputStream(file)); +for(TNEFAttribute attr : msg.getMessageAttributes()) { + System.out.println("TNEF : " + attr); +} +for(MAPIAttribute attr : msg.getMessageMAPIAttributes()) { + System.out.println("MAPI : " + attr); +} +System.out.println("Subject is " + msg.getMessageMAPIAttribute(MAPIProperty.CONVERSATION_TOPIC)); + +for(Attachment attach : msg.getAttachments()) { + for(TNEFAttribute attr : attach.getAttributes()) { + System.out.println("A.TNEF : " + attr); + } + for(MAPIAttribute attr : attach.getMAPIAttributes()) { + System.out.println("A.MAPI : " + attr); + } + System.out.println("Filename is " + attach.getAttribute(TNEFProperty.ID_ATTACHTITLE)); + System.out.println("Extension is " + attach.getMAPIAttribute(MAPIProperty.ATTACH_EXTENSION)); +} + +
+
+ +
+ Investigating a TNEF file + +

To get a feel for the contents of a file, and to track down + where data of interest is stored, HMEF comes with + HMEFDumper + to print out the contents of the file.

+
+ +
+ Limitations + +

HMEF is currently a work-in-progress, and not everything + works yet. The current limitations are:

+
    +
  • Non-standard MAPI properties from the range 0x8000 to 0x8fff + may not be being quite correctly turned into attributes. + The values show up, but the name and type may not always + be correct.
  • +
  • All testing so far has been performed on a small number of + English documents. We think we're correctly turning bytes into + Java unicode strings, but we need a few non-English sample + files in the test suite to verify this!
  • +
  • There is no support for saving changes, nor for creating new + files
  • +
+
+ +
diff --git a/src/documentation/content/xdocs/components/hpbf/file-format.xml b/src/documentation/content/xdocs/components/hpbf/file-format.xml new file mode 100644 index 0000000000..eb092444cd --- /dev/null +++ b/src/documentation/content/xdocs/components/hpbf/file-format.xml @@ -0,0 +1,197 @@ + + + + + +
+ POI-HPBF - A Guide to the Publisher File Format + Overview + + + +
+ + +
Document Streams +

+ The file is made up of a number of POIFS streams. A typical + file will be made up as follows: +

+ +Root Entry - + Objects - + (no children) + SummaryInformation <(0x05)SummaryInformation> + DocumentSummaryInformation <(0x05)DocumentSummaryInformation> + Escher - + EscherStm + EscherDelayStm + Quill - + QuillSub - + CONTENTS + CompObj <(0x01)CompObj> + Envelope + Contents + Internal <(0x03)Internal> + CompObj <(0x01)CompObj> + VBA - + (no children) + +
+
Changing Text +

If you make a change to the text of a file, but not change + how much text there is, then the CONTENTS stream + will undergo a small change, and the Contents stream + will undergo a large change.

+

If you make a change to the text of a file, and change the + amount of text there is, then both the Contents and + the CONTENTS streams change.

+
+
Changing Shapes +

If you alter the size of a textbox, but make no text changes, + then both Contents and CONTENTS streams + change. There are no changes to the Escher streams.

+

If you set the background colour of a textbox, but make + no changes to the text, (to finish off)

+
+
Structure of CONTENTS +

First we have "CHNKINK ", followed by 24 bytes.

+

Next we have 20 sequences of 24 bytes each. If the first two bytes + at 0x1800, then that sequence entry exists, but if it's 0x0000 then + the entry doesn't exist. If it does exist, we then have 4 bytes of + upper case ASCII text, followed by three little endian shorts. + The first of these seems to be the count of that type, the second is + usually 1, the third is usually zero. The we have another 4 bytes of + upper case ASCII text, normally but not always the same as the first + text. Finally, we have an unsigned little endian 32 bit offset to + the start of the data for this, then an unsigned little endian + 32 bit offset of the length of this section.

+

Normally, the first sequence entry is for TEXT, and the text data + will start at 0x200. After that is normally two or three STSH entries + (so the first short has values 0, then 1, then 2). After that it + seems to vary.

+

At 0x200 we have the text, stored as little endian 16 bit unicode.

+

After the text comes all sorts of other stuff, presumably as + described by the sequences.

+

For a contents stream of length 7168 / 0x1c00 bytes, the start + looks something like:

+ +CHNKINK // "CHNKINK " +04 00 07 00 // Normally 04 00 07 00 +13 00 00 03 // Normally ## 00 00 03 +00 02 00 00 // Normally 00 ## 00 00 +00 1c 00 00 // Normally length of the stream +f8 01 13 00 // Normally f8 01 11/13 00 +ff ff ff ff // Normally seems to be ffffffff + +18 00 +TEXT 00 00 01 00 00 00 // TEXT 0 1 0 +TEXT 00 02 00 00 d0 03 00 00 // TEXT from: 200 (512), len: 3d0 (976) +18 00 +STSH 00 00 01 00 00 00 // STSH 0 1 0 +STSH d0 05 00 00 1e 00 00 00 // STSH from: 5d0 (1488), len: 1e (30) +18 00 +STSH 01 00 01 00 00 00 // STSH 1 1 0 +STSH ee 05 00 00 b8 01 00 00 // STSH from: 5ee (1518), len: 1b8 (440) +18 00 +STSH 02 00 01 00 00 00 // STSH 2 1 0 +STSH a6 07 00 00 3c 00 00 00 // STSH from: 7a6 (1958), len: 3c (60) +18 00 +FDPP 00 00 01 00 00 00 // FDPP 0 1 0 +FDPP 00 08 00 00 00 02 00 00 // FDPP from: 800 (2048), len: 200 (512) +18 00 +FDPC 00 00 01 00 00 00 // FDPC 0 1 0 +FDPC 00 0a 00 00 00 02 00 00 // FDPC from: a00 (2560), len: 200 (512) +18 00 +FDPC 01 00 01 00 00 00 // FDPC 1 1 0 +FDPC 00 0c 00 00 00 02 00 00 // FDPC from: c00 (3072), len: 200 (512) +18 00 +SYID 00 00 01 00 00 00 // SYID 0 1 0 +SYID 00 0e 00 00 20 00 00 00 // SYID from: e00 (3584), len: 20 (32) +18 00 +SGP 00 00 01 00 00 00 // SGP 0 1 0 +SGP 20 0e 00 00 0a 00 00 00 // SGP from: e20 (3616), len: a (10) +18 00 +INK 00 00 01 00 00 00 // INK 0 1 0 +INK 2a 0e 00 00 04 00 00 00 // INK from: e2a (3626), len: 4 (4) +18 00 +BTEP 00 00 01 00 00 00 // BTEP 0 1 0 +PLC 2e 0e 00 00 18 00 00 00 // PLC from: e2e (3630), len: 18 (24) +18 00 +BTEC 00 00 01 00 00 00 // BTEC 0 1 0 +PLC 46 0e 00 00 20 00 00 00 // PLC from: e46 (3654), len: 20 (32) +18 00 +FONT 00 00 01 00 00 00 // FONT 0 1 0 +FONT 66 0e 00 00 48 03 00 00 // FONT from: e66 (3686), len: 348 (840) +18 00 +TCD 03 00 01 00 00 00 // TCD 3 1 0 +PLC ae 11 00 00 24 00 00 00 // PLC from: 11ae (4526), len: 24 (36) +18 00 +TOKN 04 00 01 00 00 00 // TOKN 4 1 0 +PLC d2 11 00 00 0a 01 00 00 // PLC from: 11d2 (4562), len: 10a (266) +18 00 +TOKN 05 00 01 00 00 00 // TOKN 5 1 0 +PLC dc 12 00 00 2a 01 00 00 // PLC from: 12dc (4828), len: 12a (298) +18 00 +STRS 00 00 01 00 00 00 // STRS 0 1 0 +PLC 06 14 00 00 46 00 00 00 // PLC from: 1406 (5126), len: 46 (70) +18 00 +MCLD 00 00 01 00 00 00 // MCLD 0 1 0 +MCLD 4c 14 00 00 16 06 00 00 // MCLD from: 144c (5196), len: 616 (1558) +18 00 +PL 00 00 01 00 00 00 // PL 0 1 0 +PL 62 1a 00 00 48 00 00 00 // PL from: 1a62 (6754), len: 48 (72) +00 00 // Blank entry follows +00 00 00 00 00 00 +00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 + +(the text will then start) + +

We think that the first 4 bytes of text describes the + the function of the data at the offset. The first short is + then the count of that type, eg the 2nd will have 1. We + think that the second 4 bytes of text describes the format + of data block at the offset. The format of the text block + is easy, but we're still trying to figure out the others.

+ +
Structure of TEXT bit +

This is very simple. All the text for the document is + stored in a single bit of the Quill CONTENTS. The text + is stored as little endian 16 bit unicode strings.

+
+
Structure of PLC bit +

The first four bytes seem to hold the count of the + entries in the bit, and the second four bytes seem to hold + the type. There is then some pre-data, and then data for + each of the entries, the exact format dependant on the type.

+

Type 0 has 4 2 byte unsigned ints, then a pair of 2 byte + unsigned ints for each entry.

+

Type 4 has 4 2 byte unsigned ints, then a pair of 4 byte + unsigned ints for each entry.

+

Type 8 has 7 2 byte unsigned ints, then a pair of 4 byte + unsigned ints for each entry.

+

Type 12 holds hyperlinks, and is very much more complex. + See org.apache.poi.hpbf.model.qcbits.QCPLCBit + for our best guess as to how the contents match up.

+
+
+ +
diff --git a/src/documentation/content/xdocs/components/hpbf/index.xml b/src/documentation/content/xdocs/components/hpbf/index.xml new file mode 100644 index 0000000000..75cd4af215 --- /dev/null +++ b/src/documentation/content/xdocs/components/hpbf/index.xml @@ -0,0 +1,77 @@ + + + + + +
+ POI-HPBF - Java API To Access Microsoft Publisher Format Files + Overview + + + +
+ + +
+ Overview + +

HPBF is the POI Project's pure Java implementation of the + Publisher file format.

+

Currently, HPBF is in an early stage, whilst we try to + figure out the file format. So far, we have basic text + extraction support, and are able to read some parts within + the file. Writing is not yet supported, as we are unable + to make sense of the Contents stream, which we think has + lots of offsets to other parts of the file.

+

Our initial aim is to produce a text extractor for the format + (now done), and be able to extract hyperlinks from within + the document (partly supported). Additional low level + code to process the file format may follow, if there + is demand and developer interest warrants it.

+

Text Extraction is available via the + org.apache.poi.hpbf.extractor.PublisherTextExtractor + class.

+

At this time, there is no usermodel api or similar. + There is only low level support for certain parts of + the file, but by no means all of it.

+

Our current understanding of the file format is documented + here.

+

As of 2017, we are unaware of a public format specification for + Microsoft Publisher .pub files. This format was not included in + the Microsoft Open Specifications Promise with the rest of the + Microsoft Office file formats. + As of 2009 and 2016, Microsoft had no plans to document the .pub file format. + If this changes in the future, perhaps we will see a spec published + on the Microsoft Office File Format Open Specification Technical Documentation. +

+ + + This code currently lives the + scratchpad area + of the POI SVN repository. To use this component, ensure + you have the Scratchpad Jar on your classpath, or a dependency + defined on the poi-scratchpad artifact - the main POI + jar is not enough! See the + POI Components Map + for more details. + +
+ +
diff --git a/src/documentation/content/xdocs/components/hpsf/how-to.xml b/src/documentation/content/xdocs/components/hpsf/how-to.xml new file mode 100644 index 0000000000..8b50f1ff2e --- /dev/null +++ b/src/documentation/content/xdocs/components/hpsf/how-to.xml @@ -0,0 +1,1477 @@ + + + + + +
+ HPSF HOW-TO + + + +
+ +
How To Use the HPSF API + +

This HOW-TO is organized in four sections. You should read them + sequentially because the later sections build upon the earlier ones.

+ +
    +
  1. + The first section explains how to read + the most important standard properties of a Microsoft Office + document. Standard properties are things like title, author, creation + date etc. It is quite likely that you will find here what you need and + don't have to read the other sections. +
  2. + +
  3. + The second section goes a small step + further and focuses on reading additional standard + properties. It also talks about exceptions that + may be thrown when dealing with HPSF and shows how you can read + properties of embedded objects. +
  4. + +
  5. + The third section explains how to write + standard properties. HPSF provides some high-level classes and + methods which make writing of standard properties easy. They are based on + the low-level writing functions explained in the fifth + section. +
  6. + +
  7. + The fourth section tells how to read + non-standard properties. Non-standard properties are + application-specific triples consisting of an ID, a type, and a value. +
  8. + +
  9. + The fifth section tells you how to write + property set streams using HPSF's low-level methods. You have to + understand the fourth section before you should + think about low-level writing properties. Check the Javadoc API + documentation to find out about the details! +
  10. +
+ + Please note: HPSF's writing functionality is + not present in POI releases up to and including 2.5. In + order to write properties you have to download a 3.0.x POI release, + or retrieve the POI development version from the Subversion repository. + + + + +
Reading Standard Properties + + This section explains how to read the most important standard + properties of a Microsoft Office document. Standard properties are things + like title, author, creation date etc. This section introduces the + summary information stream which is used to keep these + properties. Chances are that you will find here what you need and don't + have to read the other sections. + +

If all you are interested in is getting the textual content of + all the document properties, such as for full text indexing, then + take a look at + org.apache.poi.hpsf.extractor.HPSFPropertiesExtractor. However, + if you want full access to the properties, please read on!

+ +

The first thing you should understand is that a Microsoft Office file is + not one large bunch of bytes but has an internal filesystem structure with + files and directories. You can access these files and directories using + the POI filesystem (POIFS) + provides. A file or document in a POI filesystem is also called a + stream - The properties of, say, an Excel document are + stored apart of the actual spreadsheet data in separate streams. The good + new is that this separation makes the properties independent of the + concrete Microsoft Office file. In the following text we will always say + "POI filesystem" instead of "Microsoft Office file" because a POI + filesystem is not necessarily created by or for a Microsoft Office + application, because it is shorter, and because we want to avoid the name + of That Redmond Company.

+ +

The following example shows how to read the "title" property. Reading + other properties is similar. Consider the API documentation of the class + org.apache.poi.hpsf.SummaryInformation to learn which methods + are available.

+ +

The standard properties this section focuses on can be found in a + document called \005SummaryInformation located in the root of the + POI filesystem. The notation \005 in the document's name means + the character with a decimal value of 5. In order to read the "title" + property, an application has to perform the following steps:

+ +
    +
  1. + Open the document \005SummaryInformation located in the root + of the POI filesystem. +
  2. +
  3. + Create an instance of the class SummaryInformation from + that document. +
  4. +
  5. + Call the SummaryInformation instance's + getTitle() method. +
  6. +
+ +

Sounds easy, doesn't it? Here are the steps in detail.

+ + +
Open the document \005SummaryInformation in the root of the + POI filesystem + +

An application that wants to open a document in a POI filesystem + (POIFS) proceeds as shown by the following code fragment. The full + source code of the sample application is available in the + examples section of the POI source tree as + ReadTitle.java.

+ + +import java.io.*; +import org.apache.poi.hpsf.*; +import org.apache.poi.poifs.eventfilesystem.*; + +// ... + +public static void main(String[] args) + throws IOException +{ + final String filename = args[0]; + POIFSReader r = new POIFSReader(); + r.registerListener(new MyPOIFSReaderListener(), + "\005SummaryInformation"); + r.read(new FileInputStream(filename)); +} + +

The first interesting statement is

+ + POIFSReader r = new POIFSReader(); + +

It creates a + org.apache.poi.poifs.eventfilesystem.POIFSReader instance + which we shall need to read the POI filesystem. Before the application + actually opens the POI filesystem we have to tell the + POIFSReader which documents we are interested in. In this + case the application should do something with the document + \005SummaryInformation.

+ + +r.registerListener(new MyPOIFSReaderListener(), + "\005SummaryInformation"); + +

This method call registers a + org.apache.poi.poifs.eventfilesystem.POIFSReaderListener + with the POIFSReader. The POIFSReaderListener + interface specifies the method processPOIFSReaderEvent() + which processes a document. The class + MyPOIFSReaderListener implements the + POIFSReaderListener and thus the + processPOIFSReaderEvent() method. The eventing POI + filesystem calls this method when it finds the + \005SummaryInformation document. In the sample application + MyPOIFSReaderListener is a static class in the + ReadTitle.java source file.

+ +

Now everything is prepared and reading the POI filesystem can + start:

+ + r.read(new FileInputStream(filename)); + +

The following source code fragment shows the + MyPOIFSReaderListener class and how it retrieves the + title.

+ + +static class MyPOIFSReaderListener implements POIFSReaderListener +{ + public void processPOIFSReaderEvent(POIFSReaderEvent event) + { + SummaryInformation si = null; + try + { + si = (SummaryInformation) + PropertySetFactory.create(event.getStream()); + } + catch (Exception ex) + { + throw new RuntimeException + ("Property set stream \"" + + event.getPath() + event.getName() + "\": " + ex); + } + final String title = si.getTitle(); + if (title != null) + System.out.println("Title: \"" + title + "\""); + else + System.out.println("Document has no title."); + } +} + + +

The line

+ + SummaryInformation si = null; + +

declares a SummaryInformation variable and initializes it + with null. We need an instance of this class to access the + title. The instance is created in a try block:

+ + si = (SummaryInformation) + PropertySetFactory.create(event.getStream()); + +

The expression event.getStream() returns the input stream + containing the bytes of the property set stream named + \005SummaryInformation. This stream is passed into the + create method of the factory class + org.apache.poi.hpsf.PropertySetFactory which returns + a org.apache.poi.hpsf.PropertySet instance. It is more or + less safe to cast this result to SummaryInformation, a + convenience class with methods like getTitle(), + getAuthor() etc.

+ +

The PropertySetFactory.create() method may throw all sorts + of exceptions. We'll deal with them in the next sections. For now we just + catch all exceptions and throw a RuntimeException + containing the message text of the origin exception.

+ +

If all goes well, the sample application retrieves the title and prints + it to the standard output. As you can see you must be prepared for the + case that the POI filesystem does not have a title.

+ + final String title = si.getTitle(); +if (title != null) + System.out.println("Title: \"" + title + "\""); +else + System.out.println("Document has no title."); + +

Please note that a POI filesystem does not necessarily contain the + \005SummaryInformation stream. The documents created by the + Microsoft Office suite have one, as far as I know. However, an Excel + spreadsheet exported from StarOffice 5.2 won't have a + \005SummaryInformation stream. In this case the applications + won't throw an exception but simply does not call the + processPOIFSReaderEvent method. You have been warned!

+
+
+ + +
Additional Standard Properties, Exceptions And Embedded + Objects + + This section focusses on reading additional standard properties which + are kept in the document summary information stream. It + also talks about exceptions that may be thrown when dealing with HPSF and + shows how you can read properties of embedded objects. + +

A couple of additional standard properties are not + contained in the \005SummaryInformation stream explained + above. Examples for such properties are a document's category or the + number of multimedia clips in a PowerPoint presentation. Microsoft has + invented an additional stream named + \005DocumentSummaryInformation to hold these properties. With two + minor exceptions you can proceed exactly as described above to read the + properties stored in \005DocumentSummaryInformation:

+ +
    +
  • Instead of \005SummaryInformation use + \005DocumentSummaryInformation as the stream's name.
  • +
  • Replace all occurrences of the class + SummaryInformation by + DocumentSummaryInformation.
  • +
+ +

And of course you cannot call getTitle() because + DocumentSummaryInformation has different query methods, + e.g. getCategory. See the Javadoc API documentation for the + details.

+ +

In the previous section the application simply caught all + exceptions and was in no way interested in any + details. However, a real application will likely want to know what went + wrong and act appropriately. Besides any I/O exceptions there are three + HPSF resp. POI specific exceptions you should know about:

+ +
+
NoPropertySetStreamException:
+
+ This exception is thrown if the application tries to create a + PropertySet instance from a stream that is not a + property set stream. (SummaryInformation and + DocumentSummaryInformation are subclasses of + PropertySet.) A faulty property set stream counts as not + being a property set stream at all. An application should be prepared to + deal with this case even if it opens streams named + \005SummaryInformation or + \005DocumentSummaryInformation. These are just names. A + stream's name by itself does not ensure that the stream contains the + expected contents and that this contents is correct. +
+ +
UnexpectedPropertySetTypeException
+
This exception is thrown if a certain type of property set is + expected somewhere (e.g. a SummaryInformation or + DocumentSummaryInformation) but the provided property + set is not of that type.
+ +
MarkUnsupportedException
+
This exception is thrown if an input stream that is to be parsed + into a property set does not support the + InputStream.mark(int) operation. The POI filesystem uses + the DocumentInputStream class which does support this + operation, so you are safe here. However, if you read a property set + stream from another kind of input stream things may be + different.
+
+ +

Many Microsoft Office documents contain embedded + objects, for example an Excel sheet within a Word + document. Embedded objects may have property sets of their own. An + application can open these property set streams as described above. The + only difference is that they are not located in the POI filesystem's root + but in a nested directory instead. Just register a + POIFSReaderListener for the property set streams you are + interested in.

+
+ + + + +
Writing Standard Properties + + This section explains how to write standard + properties. HPSF provides some high-level classes and methods + which make writing of standard properties easy. They are based on the + low-level writing functions explained in another + section. + +

As explained above, standard properties are located in the summary + information and document summary information streams of typical POI + filesystems. You have already learned about the classes + SummaryInformation and + DocumentSummaryInformation and their get...() + methods for reading standard properties. These classes also provide + set...() methods for writing properties.

+ +

After setting properties in SummaryInformation or + DocumentSummaryInformation you have to write them to a disk + file. The following sample program shows how you can

+ +
    +
  1. read a disk file into a POI filesystem,
  2. +
  3. read the document summary information from the POI filesystem,
  4. +
  5. set a property to a new value,
  6. +
  7. write the modified document summary information back to the POI + filesystem, and
  8. +
  9. write the POI filesystem to a disk file.
  10. +
+ +

The complete source code of this program is available as + ModifyDocumentSummaryInformation.java in the examples + section of the POI source tree.

+ + Dealing with the summary information stream is analogous to handling + the document summary information and therefore does not need to be + explained here in detailed. See the HPSF API documentation to learn about + the set...() methods of the class + SummaryInformation. + +

The first step is to read the POI filesystem into memory:

+ + InputStream is = new FileInputStream(poiFilesystem); +POIFSFileSystem poifs = new POIFSFileSystem(is); +is.close(); + +

The code snippet above assumes that the variable + poiFilesystem holds the name of a disk file. It reads the + file from an input stream and creates a POIFSFileSystem + object in memory. After having read the file, the input stream should be + closed as shown.

+ +

In order to read the document summary information stream the application + must open the element \005DocumentSummaryInformation in the POI + filesystem's root directory. However, the POI filesystem does not + necessarily contain a document summary information stream, and the + application should be able to deal with that situation. The following + code does so by creating a new DocumentSummaryInformation if + there is none in the POI filesystem:

+ + DirectoryEntry dir = poifs.getRoot(); +DocumentSummaryInformation dsi; +try +{ + DocumentEntry dsiEntry = (DocumentEntry) + dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME); + DocumentInputStream dis = new DocumentInputStream(dsiEntry); + PropertySet ps = new PropertySet(dis); + dis.close(); + dsi = new DocumentSummaryInformation(ps); +} +catch (FileNotFoundException ex) +{ + /* There is no document summary information. We have to create a + * new one. */ + dsi = PropertySetFactory.newDocumentSummaryInformation(); +} + + +

In the source code above the statement

+ + DirectoryEntry dir = poifs.getRoot(); + +

gets hold of the POI filesystem's root directory as a + DirectoryEntry. The getEntry() method of this + class is used to access a file or directory entry in a directory. However, + if the file to be opened does not exist, a + FileNotFoundException will be thrown. Therefore opening the + document summary information entry should be done in a try + block:

+ + DocumentEntry dsiEntry = (DocumentEntry) + dir.getEntry(DocumentSummaryInformation.DEFAULT_STREAM_NAME); + +

DocumentSummaryInformation.DEFAULT_STREAM_NAME represents + the string "\005DocumentSummaryInformation", i.e. the standard name of a + document summary information stream. If this stream exists, the + getEntry() method returns a DocumentEntry. To + read the DocumentEntry's contents, create a + DocumentInputStream:

+ + DocumentInputStream dis = new DocumentInputStream(dsiEntry); + +

Up to this point we have used POI's POIFS component. Now HPSF enters the + stage. A property set is created from the input stream's data:

+ + PropertySet ps = new PropertySet(dis); + dis.close(); + dsi = new DocumentSummaryInformation(ps); + +

If the data really constitutes a property set, a + PropertySet object is created. Otherwise a + NoPropertySetStreamException is thrown. After having read the + data from the input stream the latter should be closed.

+ +

Since we know - or at least hope - that the stream named + "\005DocumentSummaryInformation" is not just any property set but really + contains the document summary information, we try to create a new + DocumentSummaryInformation from the property set. If the + stream is not document summary information stream the sample application + fails with a UnexpectedPropertySetTypeException.

+ +

If the POI document does not contain a document summary information + stream, we can create a new one in the catch clause. The + PropertySetFactory's method + newDocumentSummaryInformation() establishes a new and empty + DocumentSummaryInformation instance:

+ + dsi = PropertySetFactory.newDocumentSummaryInformation(); + +

Whether we read the document summary information from the POI filesystem + or created it from scratch, in either case we now have a + DocumentSummaryInformation instance we can write to. Writing + is quite simple, as the following line of code shows:

+ + dsi.setCategory("POI example"); + +

This statement sets the "category" property to "POI example". Any + former "category" value will be lost. If there hasn't been a "category" + property yet, a new one will be created.

+ +

DocumentSummaryInformation of course has methods to set the + other standard properties, too - look into the API documentation to see + all of them.

+ +

Once all properties are set as needed, they should be stored into the + file on disk. The first step is to write the + DocumentSummaryInformation into the POI filesystem:

+ + dsi.write(dir, DocumentSummaryInformation.DEFAULT_STREAM_NAME); + +

The DocumentSummaryInformation's write() + method takes two parameters: The first is the DirectoryEntry + in the POI filesystem, the second is the name of the stream to create in + the directory. If this stream already exists, it will be overwritten.

+ + If you not only modified the document summary information but also + the summary information you have to write both of them to the POI + filesystem. + +

Still the POI filesystem is a data structure in memory only and must be + written to a disk file to make it permanent. The following lines write + back the POI filesystem to the file it was read from before. Please note + that in production-quality code you should never write directly to the + origin file, because in case of an error everything would be lost. Here it + is done this way to keep the example short.

+ + OutputStream out = new FileOutputStream(poiFilesystem); +poifs.writeFilesystem(out); +out.close(); + +
User-Defined Properties + +

If you compare the source code excerpts above with the file containing + the full source code, you will notice that I left out some following + lines of code. The are dealing with the special topic of custom + properties.

+ + DocumentSummaryInformation dsi = ... +... +CustomProperties customProperties = dsi.getCustomProperties(); +if (customProperties == null) + customProperties = new CustomProperties(); + +/* Insert some custom properties into the container. */ +customProperties.put("Key 1", "Value 1"); +customProperties.put("Schlssel 2", "Wert 2"); +customProperties.put("Sample Number", new Integer(12345)); +customProperties.put("Sample Boolean", new Boolean(true)); +customProperties.put("Sample Date", new Date()); + +/* Read a custom property. */ +Object value = customProperties.get("Sample Number"); + +/* Write the custom properties back to the document summary + * information. */ +dsi.setCustomProperties(customProperties); + +

Custom properties are properties the user can define himself. Using for + example Microsoft Word he can define these extra properties and give + each of them a name, a type and a + value. The custom properties are stored in the document + information summary along with the standard properties.

+ +

The source code example shows how to retrieve the custom properties + as a whole from a DocumentSummaryInformation instance using + the getCustomProperties() method. The result is a + CustomProperties instance or null if no + user-defined properties exist.

+ +

Since CustomProperties implements the Map + interface you can read and write properties with the usual + Map methods. However, CustomProperties poses + some restrictions on the types of keys and values.

+ +
    +
  • The key is a string.
  • +
  • The value is one of String, + Boolean, Long, Integer, + Short, or java.util.Date.
  • +
+ +

The CustomProperties class has been designed for easy + access using just keys and values. The underlying Microsoft-specific + custom properties data structure is more complicated. However, it does + not provide noteworthy additional benefits. It is possible to have + multiple properties with the same name or properties without a + name at all. When reading custom properties from a document summary + information stream, the CustomProperties class ignores + properties without a name and keeps only the "last" (whatever that means) + of those properties having the same name. You can find out whether a + CustomProperties instance dropped any properties with the + isPure() method.

+ +

You can read and write the full spectrum of custom properties with + HPSF's low-level methods. They are explained in the next section.

+
+
+ + + + +
Reading Non-Standard Properties + + This section tells how to read non-standard properties. Non-standard + properties are application-specific ID/type/value triples. + +
Overview +

Now comes the real hardcode stuff. As mentioned above, + SummaryInformation and + DocumentSummaryInformation are just special cases of the + general concept of a property set. This concept says that a + property set consists of properties and that each + property is an entity with an ID, a + type, and a value.

+ +

Okay, that was still rather easy. However, to make things more + complicated, Microsoft in its infinite wisdom decided that a property set + shalt be broken into one or more sections. Each section + holds a bunch of properties. But since that's still not complicated + enough, a section may have an optional dictionary that + maps property IDs to property names - we'll explain + later what that means.

+ +

The procedure to get to the properties is the following:

+ +
    +
  1. Use the PropertySetFactory class to + create a PropertySet object from a property set stream. If + you don't know whether an input stream is a property set stream, just + try to call PropertySetFactory.create(java.io.InputStream): + You'll either get a PropertySet instance returned or an + exception is thrown.
  2. + +
  3. Call the PropertySet's method getSections() + to get the sections contained in the property set. Each section is + an instance of the Section class.
  4. + +
  5. Each section has a format ID. The format ID of the first section in a + property set determines the property set's type. For example, the first + (and only) section of the summary information property set has a format + ID of F29F85E0-4FF9-1068-AB-91-08-00-2B-27-B3-D9. You can + get the format ID with Section.getFormatID().
  6. + +
  7. The properties contained in a Section can be retrieved + with Section.getProperties(). The result is an array of + Property instances.
  8. + +
  9. A property has a name, a type, and a value. The Property + class has methods to retrieve them.
  10. +
+
+ +
A Sample Application +

Let's have a look at a sample Java application that dumps all property + set streams contained in a POI file system. The full source code of this + program can be found as ReadCustomPropertySets.java in the + examples area of the POI source code tree. Here are the key + sections:

+ + import java.io.*; +import java.util.*; +import org.apache.poi.hpsf.*; +import org.apache.poi.poifs.eventfilesystem.*; +import org.apache.poi.util.HexDump; + +

The most important package the application needs is + org.apache.poi.hpsf.*. This package contains the HPSF + classes. Most classes named below are from the HPSF package. Of course we + also need the POIFS event file system's classes and java.io.* + since we are dealing with POI I/O. From the java.util package + we use the List and Iterator class. The class + org.apache.poi.util.HexDump provides a methods to dump byte + arrays as nicely formatted strings.

+ + public static void main(String[] args) + throws IOException +{ + final String filename = args[0]; + POIFSReader r = new POIFSReader(); + + /* Register a listener for *all* documents. */ + r.registerListener(new MyPOIFSReaderListener()); + r.read(new FileInputStream(filename)); +} + +

The POIFSReader is set up in a way that the listener + MyPOIFSReaderListener is called on every file in the POI file + system.

+
+ +
The Property Set +

The listener class tries to create a PropertySet from each + stream using the PropertySetFactory.create() method:

+ + static class MyPOIFSReaderListener implements POIFSReaderListener +{ + public void processPOIFSReaderEvent(POIFSReaderEvent event) + { + PropertySet ps = null; + try + { + ps = PropertySetFactory.create(event.getStream()); + } + catch (NoPropertySetStreamException ex) + { + out("No property set stream: \"" + event.getPath() + + event.getName() + "\""); + return; + } + catch (Exception ex) + { + throw new RuntimeException + ("Property set stream \"" + + event.getPath() + event.getName() + "\": " + ex); + } + + /* Print the name of the property set stream: */ + out("Property set stream \"" + event.getPath() + + event.getName() + "\":"); + +

Creating the PropertySet is done in a try + block, because not each stream in the POI file system contains a property + set. If it is some other file, the + PropertySetFactory.create() throws a + NoPropertySetStreamException, which is caught and + logged. Then the program continues with the next stream. However, all + other types of exceptions cause the program to terminate by throwing a + runtime exception. If all went well, we can print the name of the property + set stream.

+
+ +
The Sections +

The next step is to print the number of sections followed by the + sections themselves:

+ + /* Print the number of sections: */ +final long sectionCount = ps.getSectionCount(); +out(" No. of sections: " + sectionCount); + +/* Print the list of sections: */ +List sections = ps.getSections(); +int nr = 0; +for (Iterator i = sections.iterator(); i.hasNext();) +{ + /* Print a single section: */ + Section sec = (Section) i.next(); + + // See below for the complete loop body. +} + +

The PropertySet's method getSectionCount() + returns the number of sections.

+ +

To retrieve the sections, use the getSections() + method. This method returns a java.util.List containing + instances of the Section class in their proper order.

+ +

The sample code shows a loop that retrieves the Section + objects one by one and prints some information about each one. Here is + the complete body of the loop:

+ + /* Print a single section: */ +Section sec = (Section) i.next(); +out(" Section " + nr++ + ":"); +String s = hex(sec.getFormatID().getBytes()); +s = s.substring(0, s.length() - 1); +out(" Format ID: " + s); + +/* Print the number of properties in this section. */ +int propertyCount = sec.getPropertyCount(); +out(" No. of properties: " + propertyCount); + +/* Print the properties: */ +Property[] properties = sec.getProperties(); +for (int i2 = 0; i2 < properties.length; i2++) +{ + /* Print a single property: */ + Property p = properties[i2]; + int id = p.getID(); + long type = p.getType(); + Object value = p.getValue(); + out(" Property ID: " + id + ", type: " + type + + ", value: " + value); +} +
+ +
The Section's Format ID +

The first method called on the Section instance is + getFormatID(). As explained above, the format ID of the + first section in a property set determines the type of the property + set. Its type is ClassID which is essentially a sequence of + 16 bytes. A real application using its own type of a custom property set + should have defined a unique format ID and, when reading a property set + stream, should check the format ID is equal to that unique format ID. The + sample program just prints the format ID it finds in a section:

+ + String s = hex(sec.getFormatID().getBytes()); +s = s.substring(0, s.length() - 1); +out(" Format ID: " + s); + +

As you can see, the getFormatID() method returns a + ClassID object. An array containing the bytes can be + retrieved with ClassID.getBytes(). In order to get a nicely + formatted printout, the sample program uses the hex() helper + method which in turn uses the POI utility class HexDump in + the org.apache.poi.util package. Another helper method is + out() which just saves typing + System.out.println().

+
+ +
The Properties +

Before getting the properties, it is possible to find out how many + properties are available in the section via the + Section.getPropertyCount(). The sample application uses this + method to print the number of properties to the standard output:

+ + int propertyCount = sec.getPropertyCount(); +out(" No. of properties: " + propertyCount); + +

Now its time to get to the properties themselves. You can retrieve a + section's properties with the method + Section.getProperties():

+ + Property[] properties = sec.getProperties(); + +

As you can see the result is an array of Property + objects. This class has three methods to retrieve a property's ID, its + type, and its value. The following code snippet shows how to call + them:

+ + for (int i2 = 0; i2 < properties.length; i2++) +{ + /* Print a single property: */ + Property p = properties[i2]; + int id = p.getID(); + long type = p.getType(); + Object value = p.getValue(); + out(" Property ID: " + id + ", type: " + type + + ", value: " + value); +} +
+ +
Sample Output +

The output of the sample program might look like the following. It + shows the summary information and the document summary information + property sets of a Microsoft Word document. However, unlike the first and + second section of this HOW-TO the application does not have any code + which is specific to the SummaryInformation and + DocumentSummaryInformation classes.

+ + Property set stream "/SummaryInformation": + No. of sections: 1 + Section 0: + Format ID: 00000000 F2 9F 85 E0 4F F9 10 68 AB 91 08 00 2B 27 B3 D9 ....O..h....+'.. + No. of properties: 17 + Property ID: 1, type: 2, value: 1252 + Property ID: 2, type: 30, value: Titel + Property ID: 3, type: 30, value: Thema + Property ID: 4, type: 30, value: Rainer Klute (Autor) + Property ID: 5, type: 30, value: Test (Stichwrter) + Property ID: 6, type: 30, value: This is a document for testing HPSF + Property ID: 7, type: 30, value: Normal.dot + Property ID: 8, type: 30, value: Unknown User + Property ID: 9, type: 30, value: 3 + Property ID: 18, type: 30, value: Microsoft Word 9.0 + Property ID: 12, type: 64, value: Mon Jan 01 00:59:25 CET 1601 + Property ID: 13, type: 64, value: Thu Jul 18 16:22:00 CEST 2002 + Property ID: 14, type: 3, value: 1 + Property ID: 15, type: 3, value: 20 + Property ID: 16, type: 3, value: 93 + Property ID: 19, type: 3, value: 0 + Property ID: 17, type: 71, value: [B@13582d +Property set stream "/DocumentSummaryInformation": + No. of sections: 2 + Section 0: + Format ID: 00000000 D5 CD D5 02 2E 9C 10 1B 93 97 08 00 2B 2C F9 AE ............+,.. + No. of properties: 14 + Property ID: 1, type: 2, value: 1252 + Property ID: 2, type: 30, value: Test + Property ID: 14, type: 30, value: Rainer Klute (Manager) + Property ID: 15, type: 30, value: Rainer Klute IT-Consulting GmbH + Property ID: 5, type: 3, value: 3 + Property ID: 6, type: 3, value: 2 + Property ID: 17, type: 3, value: 111 + Property ID: 23, type: 3, value: 592636 + Property ID: 11, type: 11, value: false + Property ID: 16, type: 11, value: false + Property ID: 19, type: 11, value: false + Property ID: 22, type: 11, value: false + Property ID: 13, type: 4126, value: [B@56a499 + Property ID: 12, type: 4108, value: [B@506411 + Section 1: + Format ID: 00000000 D5 CD D5 05 2E 9C 10 1B 93 97 08 00 2B 2C F9 AE ............+,.. + No. of properties: 7 + Property ID: 0, type: 0, value: {6=Test-JaNein, 5=Test-Zahl, 4=Test-Datum, 3=Test-Text, 2=_PID_LINKBASE} + Property ID: 1, type: 2, value: 1252 + Property ID: 2, type: 65, value: [B@c9ba38 + Property ID: 3, type: 30, value: This is some text. + Property ID: 4, type: 64, value: Wed Jul 17 00:00:00 CEST 2002 + Property ID: 5, type: 3, value: 27 + Property ID: 6, type: 11, value: true +No property set stream: "/WordDocument" +No property set stream: "/CompObj" +No property set stream: "/1Table" + +

There are some interesting items to note:

+ +
    +
  • The first property set (summary information) consists of a single + section, the second property set (document summary information) consists + of two sections.
  • + +
  • Each section type (identified by its format ID) has its own domain of + property ID. For example, in the second property set the properties with + ID 2 have different meanings in the two section. By the way, the format + IDs of these sections are not equal, but you have to + look hard to find the difference.
  • + +
  • The properties are not in any particular order in the section, + although they slightly tend to be sorted by their IDs.
  • +
+
+ +
Property IDs +

Properties in the same section are distinguished by their IDs. This is + similar to variables in a programming language like Java, which are + distinguished by their names. But unlike variable names, property IDs are + simple integral numbers. There is another similarity, however. Just like + a Java variable has a certain scope (e.g. a member variables in a class), + a property ID also has its scope of validity: the section.

+ +

Two property IDs in sections with different section format IDs + don't have the same meaning even though their IDs might be equal. For + example, ID 4 in the first (and only) section of a summary + information property set denotes the document's author, while ID 4 in the + first section of the document summary information property set means the + document's byte count. The sample output above does not show a property + with an ID of 4 in the first section of the document summary information + property set. That means that the document does not have a byte + count. However, there is a property with an ID of 4 in the + second section: This is a user-defined property ID - we'll get + to that topic in a minute.

+ +

So, how can you find out what the meaning of a certain property ID in + the summary information and the document summary information property set + is? The standard property sets as such don't have any hints about the + meanings of their property IDs. For example, the summary + information property set does not tell you that the property ID 4 stands + for the document's author. This is external knowledge. Microsoft defined + standard meanings for some of the property IDs in the summary information + and the document summary information property sets. As a help to the Java + and POI programmer, the class PropertyIDMap in the + org.apache.poi.hpsf.wellknown package defines constants + for the "well-known" property IDs. For example, there is the + definition

+ + public final static int PID_AUTHOR = 4; + +

These definitions allow you to use symbolic names instead of + numbers.

+ +

In order to provide support for the other way, too, - i.e. to map + property IDs to property names - the class PropertyIDMap + defines two static methods: + getSummaryInformationProperties() and + getDocumentSummaryInformationProperties(). Both return + java.util.Map objects which map property IDs to + strings. Such a string gives a hint about the property's meaning. For + example, + PropertyIDMap.getSummaryInformationProperties().get(4) + returns the string "PID_AUTHOR". An application could use this string as + a key to a localized string which is displayed to the user, e.g. "Author" + in English or "Verfasser" in German. HPSF might provide such + language-dependent ("localized") mappings in a later release.

+ +

Usually you won't have to deal with those two maps. Instead you should + call the Section.getPIDString(int) method. It returns the + string associated with the specified property ID in the context of the + Section object.

+ +

Above you learned that property IDs have a meaning in the scope of a + section only. However, there are two exceptions to the rule: The property + IDs 0 and 1 have a fixed meaning in all sections:

+ + + + + + + + + + + + + + + + +
Property IDMeaning
0The property's value is a dictionary, i.e. a + mapping from property IDs to strings.
1The property's value is the number of a codepage, + i.e. a mapping from character codes to characters. All strings in the + section containing this property must be interpreted using this + codepage. Typical property values are 1252 (8-bit "western" characters, + ISO-8859-1), 1200 (16-bit Unicode characters, UFT-16), or 65001 (8-bit + Unicode characters, UFT-8).
+
+ +
Property types +

A property is nothing without its value. It is stored in a property set + stream as a sequence of bytes. You must know the property's + type in order to properly interpret those bytes and + reasonably handle the value. A property's type is one of the so-called + Microsoft-defined "variant types". When you call + Property.getType() you'll get a long value + which denoting the property's variant type. The class + Variant in the org.apache.poi.hpsf package + holds most of those long values as named constants. For + example, the constant VT_I4 = 3 means a signed integer value + of four bytes. Examples of other types are VT_LPSTR = 30 + meaning a null-terminated string of 8-bit characters, VT_LPWSTR = + 31 which means a null-terminated Unicode string, or VT_BOOL + = 11 denoting a boolean value.

+ +

In most cases you won't need a property's type because HPSF does all + the work for you.

+
+ +
Property values +

When an application wants to retrieve a property's value and calls + Property.getValue(), HPSF has to interpret the bytes making + out the value according to the property's type. The type determines how + many bytes the value consists of and what + to do with them. For example, if the type is VT_I4, HPSF + knows that the value is four bytes long and that these bytes + comprise a signed integer value in the little-endian format. This is + quite different from e.g. a type of VT_LPWSTR. In this case + HPSF has to scan the value bytes for a Unicode null character and collect + everything from the beginning to that null character as a Unicode + string.

+ +

The good new is that HPSF does another job for you, too: It maps the + variant type to an adequate Java type.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Variant type:Java type:
VT_I2java.lang.Integer
VT_I4java.lang.Long
VT_FILETIMEjava.util.Date
VT_LPSTRjava.lang.String
VT_LPWSTRjava.lang.String
VT_CFbyte[]
VT_BOOLjava.lang.Boolean
+ +

The bad news is that there are still a couple of variant types HPSF + does not yet support. If it encounters one of these types it + returns the property's value as a byte array and leaves it to be + interpreted by the application.

+ +

An application retrieves a property's value by calling the + Property.getValue() method. This method's return type is the + abstract Object class. The getValue() method + looks up the property's variant type, reads the property's value bytes, + creates an instance of an adequate Java type, assigns it the property's + value and returns it. Primitive types like int or + long will be returned as the corresponding class, + e.g. Integer or Long.

+
+ + +
Dictionaries +

The property with ID 0 has a very special meaning: It is a + dictionary mapping property IDs to property names. We + have seen already that the meanings of standard properties in the + summary information and the document summary information property sets + have been defined by Microsoft. The advantage is that the labels of + properties like "Author" or "Title" don't have to be stored in the + property set. However, a user can define custom fields in, say, Microsoft + Word. For each field the user has to specify a name, a type, and a + value.

+ +

The names of the custom-defined fields (i.e. the property names) are + stored in the document summary information second section's + dictionary. The dictionary is a map which associates + property IDs with property names.

+ +

The method Section.getPIDString(int) not only returns with + the well-known property names of the summary information and document + summary information property sets, but with self-defined properties, + too. It should also work with self-defined properties in self-defined + sections.

+
+ +
Codepage support + +

The property with ID 1 holds the number of the codepage which was used + to encode the strings in this section. If this property is not available + in a section, the platform's default character encoding will be + used. This works fine as long as the document being read has been written + on a platform with the same default character encoding. However, if you + receive a document from another region of the world and the codepage is + undefined, you are in trouble.

+ +

HPSF's codepage support is only as good as the character encoding + support of the Java Virtual Machine (JVM) the application runs on. If + HPSF encounters a codepage number it assumes that the JVM has a character + encoding with a corresponding name. For example, if the codepage is 1252, + HPSF uses the character encoding "cp1252" to read or write strings. If + the JVM does not have that character encoding installed or if the + codepage number is illegal, an UnsupportedEncodingException will be + thrown. This works quite well with Java 2 Standard Edition (J2SE) + versions since 1.4. However, under J2SE 1.3 or lower you are out of + luck. You should install a newer J2SE version to process codepages with + HPSF.

+ +

There are some exceptions to the rule saying that a character + encoding's name is derived from the codepage number by prepending the + string "cp" to it. In these cases the codepage number is mapped to a + well-known character encoding name. Here are a few examples:

+ +
+
Codepage 932
+
is mapped to the character encoding "SJIS".
+
Codepage 1200
+
is mapped to the character encoding "UTF-16".
+
Codepage 65001
+
is mapped to the character encoding "UTF-8".
+
+ +

More of these mappings between codepage and character encoding name are + hard-coded in the classes org.apache.poi.hpsf.Constants and + org.apache.poi.hpsf.VariantSupport. Probably there will be a + need to add more mappings. The HPSF author will appreciate any hints.

+
+
+ + +
Writing Properties + + This section describes how to write properties. + +
Overview of Writing Properties +

Writing properties is possible at a high level and at a low level:

+ +
    + +
  • Most users will want to create or change entries in the summary + information or document summary information streams.
  • + +
  • On the low level, there are no convenience classes or methods. You + have to deal with things like property IDs and variant types to write + properties. Therefore you should have read section + 3 to understand the description of the low-level writing + functions.
  • +
+ +

HPSF's writing capabilities come with the classes + PropertySet, Section, + Property, and some helper classes.

+
+ + +
Low-Level Writing: An Overview +

When you are going to write a property set stream your application has + to perform the following steps:

+ +
    +
  1. Create a PropertySet instance.
  2. + +
  3. Get hold of a Section. You can either retrieve + the one that is always present in a new PropertySet, + or you have to create a new Section and add it to + the PropertySet. +
  4. + +
  5. Set any Section fields as you like.
  6. + +
  7. Create as many Property objects as you need. Set + each property's ID, type, and value. Add the + Property objects to the Section. +
  8. + +
  9. Create further Sections if you need them.
  10. + +
  11. Eventually retrieve the property set as a byte stream using + PropertySet.toInputStream() and write it to a POIFS + document.
  12. +
+
+ +
Low-level Writing Functions In Details +

Writing properties is introduced by an artificial but simple example: a + program creating a new document (aka POI file system) which contains only + a single document: a summary information property set stream. The latter + will hold the document's title only. This is artificial in that it does + not contain any Word, Excel or other kind of useful application document + data. A document containing just a property set is without any practical + use. However, it is perfectly fine for an example because it make it very + simple and easy to understand, and you will get used to writing + properties in real applications quickly.

+ +

The application expects the name of the POI file system to be written + on the command line. The title property it writes is "Sample title".

+ +

Here's the application's source code. You can also find it in the + "examples" section of the POI source code distribution. Explanations are + following below.

+ + package org.apache.poi.hpsf.examples; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import org.apache.poi.hpsf.Property; +import org.apache.poi.hpsf.PropertySet; +import org.apache.poi.hpsf.Section; +import org.apache.poi.hpsf.Section; +import org.apache.poi.hpsf.SummaryInformation; +import org.apache.poi.hpsf.Variant; +import org.apache.poi.hpsf.WritingNotSupportedException; +import org.apache.poi.hpsf.wellknown.PropertyIDMap; +import org.apache.poi.hpsf.wellknown.SectionIDMap; +import org.apache.poi.poifs.filesystem.POIFSFileSystem; + +/** + * <p>This class is a simple sample application showing how to create a property + * set and write it to disk.</p> + * + * @author Rainer Klute + * @since 2003-09-12 + */ +public class WriteTitle +{ + /** + * <p>Runs the example program.</p> + * + * @param args Command-line arguments. The first and only command-line + * argument is the name of the POI file system to create. + * @throws IOException if any I/O exception occurs. + * @throws WritingNotSupportedException if HPSF does not (yet) support + * writing a certain property type. + */ + public static void main(final String[] args) + throws WritingNotSupportedException, IOException + { + /* Check whether we have exactly one command-line argument. */ + if (args.length != 1) + { + System.err.println("Usage: " + WriteTitle.class.getName() + + "destinationPOIFS"); + System.exit(1); + } + + final String fileName = args[0]; + + /* Create a mutable property set. Initially it contains a single section + * with no properties. */ + final PropertySet mps = new PropertySet(); + + /* Retrieve the section the property set already contains. */ + final Section ms = mps.getSections().get(0); + + /* Turn the property set into a summary information property. This is + * done by setting the format ID of its first section to + * SectionIDMap.SUMMARY_INFORMATION_ID. */ + ms.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID); + + /* Create an empty property. */ + final Property p = new Property(); + + /* Fill the property with appropriate settings so that it specifies the + * document's title. */ + p.setID(PropertyIDMap.PID_TITLE); + p.setType(Variant.VT_LPWSTR); + p.setValue("Sample title"); + + /* Place the property into the section. */ + ms.setProperty(p); + + /* Create the POI file system the property set is to be written to. */ + final POIFSFileSystem poiFs = new POIFSFileSystem(); + + /* For writing the property set into a POI file system it has to be + * handed over to the POIFS.createDocument() method as an input stream + * which produces the bytes making out the property set stream. */ + final InputStream is = mps.toInputStream(); + + /* Create the summary information property set in the POI file + * system. It is given the default name most (if not all) summary + * information property sets have. */ + poiFs.createDocument(is, SummaryInformation.DEFAULT_STREAM_NAME); + + /* Write the whole POI file system to a disk file. */ + poiFs.writeFilesystem(new FileOutputStream(fileName)); + } + +} + +

The application first checks that there is exactly one single argument + on the command line: the name of the file to write. If this single + argument is present, the application stores it in the + fileName variable. It will be used in the end when the POI + file system is written to a disk file.

+ + if (args.length != 1) +{ + System.err.println("Usage: " + WriteTitle.class.getName() + + "destinationPOIFS"); + System.exit(1); +} +final String fileName = args[0]; + +

Let's create a property set now. We cannot use the + PropertySet class, because it is read-only. It does not have + a constructor creating an empty property set, and it does not have any + methods to modify its contents, i.e. to write sections containing + properties into it.

+ +

The class to use is PropertySet. The sample application calls its no-args + constructor in order to establish an empty property set:

+ + final PropertySet mps = new PropertySet(); + +

As said, we have an empty property set now. Later we will put some + contents into it.

+ +

The PropertySet created by the no-args constructor + is not really empty: It contains a single section without properties. We + can either retrieve that section and fill it with properties or we can + replace it by another section. We can also add further sections to the + property set. The sample application decides to retrieve the section + being already there:

+ + final Section ms = mps.getSections().get(0); + +

The getSections() method returns the property set's + sections as a list, i.e. an instance of + java.util.List. Calling get(0) returns the + list's first (or zeroth, if you prefer) element.

+ +

The alternative to retrieving the Section being + already there would have been to create an new + Section like this:

+ + Section s = new Section(); + +

The Section the sample application retrieved from + the PropertySet is still empty. It contains no + properties and does not have a format ID. As you have read above the format ID of the first section in a + property set determines the property set's type. Since our property set + should become a SummaryInformation property set we have to set the format + ID of its first (and only) section to + F29F85E0-4FF9-1068-AB-91-08-00-2B-27-B3-D9. However, you + won't have to remember that ID: HPSF has it defined as the well-known + constant SectionIDMap.SUMMARY_INFORMATION_ID. The sample + application writes it to the section using the + setFormatID(byte[]) method:

+ + ms.setFormatID(SectionIDMap.SUMMARY_INFORMATION_ID); + + final Property p = new Property(); + +

A Property object must have an ID, a type, and a + value (see above for details). The class + provides methods to set these attributes:

+ + p.setID(PropertyIDMap.PID_TITLE); +p.setType(Variant.VT_LPWSTR); +p.setValue("Sample title"); + +

The Property class has a constructor which you can + use to pass in all three attributes in a single call. See the Javadoc API + documentation for details!

+ +

The sample property set is complete now. We have a + PropertySet containing a Section + containing a Property. Of course we could have added + more sections to the property set and more properties to the sections but + we wanted to keep things simple.

+ +

The property set has to be written to a POI file system. The following + statement creates it.

+ + final POIFSFileSystem poiFs = new POIFSFileSystem(); + +

Writing the property set includes the step of converting it into a + sequence of bytes. The PropertySet class has the + method toInputStream() for this purpose. It returns the + bytes making out the property set stream as an + InputStream:

+ + final InputStream is = mps.toInputStream(); + +

If you'd read from this input stream you'd receive all the property + set's bytes. However, it is very likely that you'll never do + that. Instead you'll pass the input stream to the + POIFSFileSystem.createDocument() method, like this:

+ + poiFs.createDocument(is, SummaryInformation.DEFAULT_STREAM_NAME); + +

Besides the InputStream createDocument() + takes a second parameter: the name of the document to be created. For a + SummaryInformation property set stream the default name is available as + the constant SummaryInformation.DEFAULT_STREAM_NAME.

+ +

The last step is to write the POI file system to a disk file:

+ + poiFs.writeFilesystem(new FileOutputStream(fileName)); +
+
+ + + +
Further Reading +

There are still some aspects of HSPF left which are not covered by this + HOW-TO. You should dig into the Javadoc API documentation to learn + further details. Since you've struggled through this document up to this + point, you are well prepared.

+
+ +
+ +
+ + diff --git a/src/documentation/content/xdocs/components/hpsf/index.xml b/src/documentation/content/xdocs/components/hpsf/index.xml new file mode 100644 index 0000000000..88c4f306c5 --- /dev/null +++ b/src/documentation/content/xdocs/components/hpsf/index.xml @@ -0,0 +1,73 @@ + + + + + +
+ Apache POI™ - HPSF - Java API for Microsoft Format Document + Properties + Overview + + + +
+ +
Overview + +

Microsoft applications like "Word", "Excel" or "Powerpoint" let the user + describe a document by properties like "title", "category" and so on. The + application itself adds further information: last author, creation date + etc. These document properties are stored in property set + streams. A property set stream is a separate document within a + POI filesystem. HPSF is POI's pure-Java + implementation to read and write property sets.

+ +

The HPSF HOWTO describes what a Java + application should do to read a property set using HPSF, how to retrieve + the information it needs, and how to write properties into the + document.

+ +

HPSF supports OLE2 property set streams in general, and is not limited to + the special case of document properties in the Microsoft Office files + mentioned above. The HPSF description + describes the internal structure of property set streams. A separate + document explains the internal of thumbnail + images.

+
+ +
+ + diff --git a/src/documentation/content/xdocs/components/hpsf/internals.xml b/src/documentation/content/xdocs/components/hpsf/internals.xml new file mode 100644 index 0000000000..4046f8859c --- /dev/null +++ b/src/documentation/content/xdocs/components/hpsf/internals.xml @@ -0,0 +1,1079 @@ + + + + + +
+ Apache POI™ - HPSF Internals + + + +
+ +
HPSF Internals + +
Introduction + +

A Microsoft Office document is internally organized like a filesystem + with directory and files. Microsoft calls these files + streams. A document can have properties attached to it, + like author, title, number of words etc. These metadata are not stored in + the main stream of, say, a Word document, but instead in a dedicated + stream with a special format. Usually this stream's name is + \005SummaryInformation, where \005 represents + the character with a decimal value of 5.

+ +

A single piece of information in the stream is called a + property, for example the document title. Each property + has an integral ID (e.g. 2 for title), a + type (telling that the title is a string of bytes) and a + value (what this is should be obvious). A stream + containing properties is called a + property set stream.

+ +

This document describes the internal structure of a property set stream, + i.e. the HPSF. It does + not describe how a Microsoft Office document is organized internally and + how to retrieve a stream from it. See the POIFS documentation for that kind of + stuff.

+ +

The HPSF is not only used in the Summary + Information stream in the top-level document of a Microsoft Office + document. Often there is also a property set stream named + \005DocumentSummaryInformation with additional properties. + Embedded documents may have their own property set streams. You cannot + tell by a stream's name whether it is a property set stream or not. + Instead you have to open the stream and look at its bytes.

+
+ + + +
Data Types + +

Before delving into the details of the property set stream format we + have to have a short look at data types. Integral values are stored in the + so-called little endian format. In this format the bytes + that make out an integral value are stored in the "wrong" order. For + example, the decimal value 4660 is 0x1234 in the hexadecimal notation. If + you think this should be represented by a byte 0x12 followed by another + byte 0x34, you are right. This is called the big endian + format. In the little endian format, however, this order is reversed and + the low-value byte comes first: 0x3412. +

+ +

The following table gives an overview about some important data + types:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameLengthExample (Big Endian)Example (Little Endian)
Bytes1 byte0x120x12
Word2 bytes0x12340x3412
DWord4 bytes0x123456780x78563412
ClassID
+ A sequence of one DWord, two Words and eight Bytes
16 bytes0xE0859FF2F94F6810AB9108002B27B3D9 resp. + E0859FF2-F94F-6810-AB-91-08-00-2B-27-B3-D90xF29F85E04FF91068AB9108002B27B3D9 resp. + F29F85E0-4FF9-1068-AB-91-08-00-2B-27-B3-D9
The ClassID examples are given here in two different notations. The + second notation without the "0x" at the beginning and with dashes + inside shows the internal grouping into one DWord, two Words and eight + Bytes.Watch out: Microsoft documentation and tools show class IDs + a little bit differently like + F29F85E0-4FF9-1068-AB91-08002B27B3D9. + However, that representation is (intentionally?) misleading with + respect to endianess.
+
+ + + +
HPSF Overview + +

A property set stream consists of three main parts:

+ +
    +
  1. The header and
  2. +
  3. the section(s) containing the properties.
  4. +
+
+ + + +
The Header + +

The first bytes in a property set stream is the header. + It has a fixed length and looks like this:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OffsetTypeContentsRemarks
0Word0xFFFEIf the first four bytes of a stream do not contain these values, the + stream is not a property set stream.
2Word0x0000
4DWordDenotes the operating system and the OS version under which this + stream was created. The operating system ID is in the DWord's higher + word (after little endian decoding): 0x0000 for Win16, + 0x0001 for Macintosh and 0x0002 for Win32 - + that's all. The reader is most likely aware of the fact that there are + some more operating systems. However, Microsoft does not seem to + know.
8ClassID0x00000000000000000000000000000000Most property set streams have this value but this is not + required.
24DWord0x01000000 or greaterSection count. This field's value should be equal to 1 or greater. + Microsoft claims that this is a "reserved" field, but it seems to tell + how many sections (see below) are following in the stream. This would + really make sense because otherwise you could not know where and how + far you should read section data.
+
+ + + +
Section List + +

Following the header is the section list. This is an array of pairs each + consisting of a section format ID and an offset. This array has as many + pairs of ClassID and and DWord fields as the section count field in the + header says. The Summary Information stream contains a single section, the + Document Summary Information stream contains two.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeContentsRemarks
ClassIDSection format ID0xF29F85E04FF91068AB9108002B27B3D9 for the single section + in the Summary Information stream.

+ + 0xD5CDD5022E9C101B939708002B2CF9AE for the first + section in the Document Summary Information stream.
DWordOffsetThe number of bytes between the beginning of the stream and the + beginning of the section within the stream.
ClassIDSection format ID...
DWordOffset...
.........
+
+ + + +
Section + +

A section is divided into three parts: the section header (with the + section length and the number of properties in the section), the + properties list (with type and offset of each property), and the + properties themselves. Here are the details:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 TypeContentsRemarks
Section headerDWordLengthThe length of the section in bytes.
DWordProperty countThe number of properties in the section.
Properties listDWordProperty IDThe property ID tells what the property means. For example, an ID of + 0x0002 in the Summary Information stands for the document's + title. See the Property IDs + chapter below for more details.
DWordOffsetThe number of bytes between the beginning of the section and the + property.
.........
PropertiesDWordProperty type ("variant")This is the property's data type, e.g. an integer value, a byte + string or a Unicode string. See the + Property Types chapter + for details!
Field length depends on the property type + ("variant")Property valueThis field's length depends on the property's type. These are the + bytes that make out the DWord, the byte string or some other data of + fixed or variable length.

+ + The property value's length is always stored in an area which is a + multiple of 4 in length. If the property is shorter, e.g. a byte + string of 13 bytes, the remaining bytes are padded with 0x00 + bytes.
.........
+
+ + + +
Property IDs + + +

As seen above, a section holds a property list: an array with property + IDs and offsets. The property ID gives each property a meaning. For + example, in the Summary Information stream the property ID 2 says that + this property is the document's title.

+ +

If you want to know a property ID's meaning, it is not sufficient to + know the ID itself. You must also know the + section format ID. For example, in the Document Summary + Information stream the property ID 2 means not the document's title but + its category. Due to Microsoft's infinite wisdom the section format ID is + not part of the section. Thus if you have only a section without the + stream it is in, you cannot make any sense of the properties because you + do not know what they mean.

+ +

So each section format ID has its own name space of property IDs. + Microsoft defined some "well-known" property IDs for the Summary + Information and the Document Summary Information streams. You can extend + them by your own additional IDs. This will be described below.

+ +
Property IDs in The Summary Information Stream + +

The Summary Information stream has a single section with a section + format ID of 0xF29F85E04FF91068AB9108002B27B3D9. The following + table defines the meaning of its property IDs. Each row associates a + property ID with a name and an ID string. (The property + type is just for informational purposes given here. As we have + seen above, the type is always given along with the value.)

+ +

The property name is a readable string which could be + displayed to the user. However, this string is useful only for users who + understand English. The property name does not help with other + languages.

+ +

The property ID string is about the same but looks more + technically and is nothing a user should bother with. You could the ID + string and map it to an appropriate display string in a particular + language. Of course you could do that with the property ID as well and + with less overhead, but people (including software developers) tend to be + better in remembering symbolic constants than remembering numbers.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Property IDProperty NameProperty ID StringProperty Type
2TitlePID_TITLEVT_LPSTR
3SubjectPID_SUBJECTVT_LPSTR
4AuthorPID_AUTHORVT_LPSTR
5KeywordsPID_KEYWORDSVT_LPSTR
6CommentsPID_COMMENTSVT_LPSTR
7TemplatePID_TEMPLATEVT_LPSTR
8Last Saved ByPID_LASTAUTHORVT_LPSTR
9Revision NumberPID_REVNUMBERVT_LPSTR
10Total Editing TimePID_EDITTIMEVT_FILETIME
11Last PrintedPID_LASTPRINTEDVT_FILETIME
12Create Time/DatePID_CREATE_DTMVT_FILETIME
13Last Saved Time/DatePID_LASTSAVE_DTMVT_FILETIME
14Number of PagesPID_PAGECOUNTVT_I4
15Number of WordsPID_WORDCOUNTVT_I4
16Number of CharactersPID_CHARCOUNTVT_I4
17ThumbnailPID_THUMBNAILVT_CF
18Name of Creating ApplicationPID_APPNAMEVT_LPSTR
19SecurityPID_SECURITYVT_I4
+
+ + + +
Property IDs in The Document Summary Information Stream + +

The Document Summary Information stream has two sections with a section + format ID of 0xD5CDD5022E9C101B939708002B2CF9AE for the first + one. The following table defines the meaning of the property IDs in the + first section. See the preceding section for interpreting the table.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Property IDProperty nameProperty ID stringVT type
0DictionaryPID_DICTIONARY[Special format]
1Code pagePID_CODEPAGEVT_I2
2CategoryPID_CATEGORYVT_LPSTR
3PresentationTargetPID_PRESFORMATVT_LPSTR
4BytesPID_BYTECOUNTVT_I4
5LinesPID_LINECOUNTVT_I4
6ParagraphsPID_PARCOUNTVT_I4
7SlidesPID_SLIDECOUNTVT_I4
8NotesPID_NOTECOUNTVT_I4
9HiddenSlidesPID_HIDDENCOUNTVT_I4
10MMClipsPID_MMCLIPCOUNTVT_I4
11ScaleCropPID_SCALEVT_BOOL
12HeadingPairsPID_HEADINGPAIRVT_VARIANT | VT_VECTOR
13TitlesofPartsPID_DOCPARTSVT_LPSTR | VT_VECTOR
14ManagerPID_MANAGERVT_LPSTR
15CompanyPID_COMPANYVT_LPSTR
16LinksUpTo DatePID_LINKSDIRTYVT_BOOL
+
+
+ + + +
Property Types + + +

A property consists of a DWord type field followed by the + property value. The property type is an integer value and tells how the + data byte following it are to be interpreted. In the Microsoft world it is + also known as the variant.

+ +

The Usage column says where a variant type may occur. Not all + of them are allowed in a property set but just those marked with a [P]. + [V] - may appear in a VARIANT, [T] - may + appear in a TYPEDESC, [P] - may appear in an OLE property + set, [S] - may appear in a Safe Array.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Variant IDVariant TypeUsageDescription
0VT_EMPTY[V] [P]nothing
1VT_NULL[V] [P]SQL style Null
2VT_I2[V] [T] [P] [S]2 byte signed int
3VT_I4[V] [T] [P] [S]4 byte signed int
4VT_R4[V] [T] [P] [S]4 byte real
5VT_R8[V] [T] [P] [S]8 byte real
6VT_CY[V] [T] [P] [S]currency
7VT_DATE[V] [T] [P] [S]date
8VT_BSTR[V] [T] [P] [S]OLE Automation string
9VT_DISPATCH[V] [T] [P] [S]IDispatch *
10VT_ERROR[V] [T] [S]SCODE
11VT_BOOL[V] [T] [P] [S]True=-1, False=0
12VT_VARIANT[V] [T] [P] [S]VARIANT *
13VT_UNKNOWN[V] [T] [S]IUnknown *
14VT_DECIMAL[V] [T] [S]16 byte fixed point
16VT_I1[T]signed char
17VT_UI1[V] [T] [P] [S]unsigned char
18VT_UI2[T] [P]unsigned short
19VT_UI4[T] [P]unsigned short
20VT_I8[T] [P]signed 64-bit int
21VT_UI8[T] [P]unsigned 64-bit int
22VT_INT[T]signed machine int
23VT_UINT[T]unsigned machine int
24VT_VOID[T]C style void
25VT_HRESULT[T]Standard return type
26VT_PTR[T]pointer type
27VT_SAFEARRAY[T](use VT_ARRAY in VARIANT)
28VT_CARRAY[T]C style array
29VT_USERDEFINED[T]user defined type
30VT_LPSTR[T] [P]null terminated string
31VT_LPWSTR[T] [P]wide null terminated string
64VT_FILETIME[P]FILETIME
65VT_BLOB[P]Length prefixed bytes
66VT_STREAM[P]Name of the stream follows
67VT_STORAGE[P]Name of the storage follows
68VT_STREAMED_OBJECT[P]Stream contains an object
69VT_STORED_OBJECT[P]Storage contains an object
70VT_BLOB_OBJECT[P]Blob contains an object
71VT_CF[P]Clipboard format
72VT_CLSID[P]A Class ID
0x1000VT_VECTOR[P]simple counted array
0x2000VT_ARRAY[V]SAFEARRAY*
0x4000VT_BYREF[V]void* for local use
0x8000VT_RESERVED

0xFFFFVT_ILLEGAL

0xFFFVT_ILLEGALMASKED

0xFFFVT_TYPEMASK

+
+ + + +
+ The Dictionary + +

What a dictionary is good for is explained in the HPSF HOW-TO. This chapter explains how it is + organized internally.

+ +

The dictionary has a simple header consisting of a single UInt value. It + tells how many entries the dictionary comprises:

+ + + + + + + + + + + + +
NameData typeDescription
nrEntriesUIntNumber of dictionary entries
+ +

The dictionary entries follow the header. Each one looks like this:

+ + + + + + + + + + + + + + + + + + + + + + +
NameData typeDescription
keyUIntThe unique number of this property, i.e. the PID
lengthUIntThe length of the property name associated with the key
valueStringThe property's name, terminated with a 0x00 character
+ +

The entries are not aligned, i.e. each one follows its predecessor + without any gap or fill characters.

+
+ + + +
References + +

In order to assemble the HPSF description I used information publically + available on the Internet only. The references given below have been very + helpful. If you have any amendments or corrections, please let us know! + Thank you!

+ +
    + +
  1. In + Understanding OLE + documents, Ken Kyler gives an introduction to OLE2 + documents and especially to property sets. He names the property names, + types, and IDs of the Summary Information and Document Summary + Information stream.
  2. + +
  3. The ActiveX + Programmer's Reference at https://www.dwam.net/docs/oleref/ + seems a little outdated, but that's what I have found.
  4. + +
  5. An overview of the VT_ types is in + Variant + Type Definitions.
  6. + +
  7. What is a FILETIME? The answer can be found + under , https://www.vbapi.com/ref/f/filetime.html or + https://www.cs.rpi.edu/courses/fall01/os/FILETIME.html. + In short: The FILETIME structure holds a date and time associated + with a file. The structure identifies a 64-bit integer specifying the + number of 100-nanosecond intervals which have passed since January 1, + 1601. This 64-bit value is split into the two dwords stored in the + structure.
  8. + +
  9. Microsoft provides some public information in the MSDN + Library. Use the search function to try to find what you are + looking for, e.g. "codepage" or "document summary information" etc.
  10. +
+
+
+ +
+ + diff --git a/src/documentation/content/xdocs/components/hpsf/thumbnails.xml b/src/documentation/content/xdocs/components/hpsf/thumbnails.xml new file mode 100644 index 0000000000..3d109fc520 --- /dev/null +++ b/src/documentation/content/xdocs/components/hpsf/thumbnails.xml @@ -0,0 +1,198 @@ + + + + + +
+ HPSF THUMBNAIL HOW-TO + + + +
+ +
The VT_CF Format + +

Thumbnail information is stored as a VT_CF, or Thumbnail Variant. The + Thumbnail Variant is used to store various types of information in a + clipboard. The VT_CF can store information in formats for the Macintosh or + Windows clipboard.

+ +

There are many types of data that can be copied to the clipboard, but the + only types of information needed for thumbnail manipulation are the image + formats.

+ +

The VT_CF structure looks like this:

+ + + + + + + + + + + + + + +
Element:Clipboard SizeClipboard Format TagClipboard Data
Size:32 bit unsigned integer (DWord)32 bit signed integer (DWord)variable length (byte array)
+ +

The Clipboard Size refers to the size (in bytes) of Clipboard Data + (variable size) plus the Clipboard Format (four bytes).

+ +

Clipboard Format Tag has four possible values:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueIdentifierDescription
-1LCFTAG_WINDOWSa built-in Windows© clipboard format value
-2LCFTAG_MACINTOSHa Macintosh clipboard format value
-3LCFTAG_FMTIDa format identifier (FMTID) This is rarely used.
0LCFTAG_NODATANo data This is rarely used.
+
+ + + +
Windows Clipboard Data + +

Windows clipboard data has four image formats for thumbnails:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueIdentifierDescription
3CF_METAFILEPICTWindows metafile format - recommended
8CF_DIBDevice Independent Bitmap
14CF_ENHMETAFILEEnhanced Windows metafile format
2CF_BITMAPBitmap - Obsolete - Use CF_DIB instead
+
+ +
Windows Metafile Format + +

The most common format for thumbnails on the Windows platform is the + Windows metafile format. The Clipboard places and extra header in front of + a the standard Windows Metafile Format data.

+ +

The Clipboard Data byte array looks like this when an image is stored in + Windows' Clipboard WMF format.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IdentifierCF_METAFILEPICTmmwidthheighthandleWMF data
Size32 bit unsigned int16 bit unsigned(?) int16 bit unsigned(?) int16 bit unsigned(?) int16 bit unsigned(?) intbyte array - variable length
DescriptionClipboard WMFMapping ModeImage WidthImage Heighthandle to the WMF data array in memory, or 0standard WMF byte stream
+
+ + +
Device Independent Bitmap +

FIXME: Describe the Device Independent Bitmap + format!

+
+ + + +
Macintosh Clipboard Data +

FIXME: Describe the Macintosh clipboard formats!

+
+ + +
+ + diff --git a/src/documentation/content/xdocs/components/hpsf/todo.xml b/src/documentation/content/xdocs/components/hpsf/todo.xml new file mode 100644 index 0000000000..d18e9b1e9a --- /dev/null +++ b/src/documentation/content/xdocs/components/hpsf/todo.xml @@ -0,0 +1,77 @@ + + + + + +
+ To Do + + + +
+ +
To Do + +

The following functionalities should be added to HPFS:

+ +
    +
  1. + Improve writing support! We need convenience classes and methods for + easily writing summary information streams and document summary + information streams. +
  2. +
  3. + Add resource bundles to + org.apache.poi.hpsf.wellknown to ease + localizations. This would be useful for mapping standard property IDs to + localized strings. Example: The property ID 4 could be mapped to "Author" + in English or "Verfasser" in German. +
  4. +
  5. + Implement reading functionality for those property types that are not + yet supported. HPSF should return proper Java types instead of just byte + arrays. +
  6. +
  7. + Add WMF to java.awt.Image example code in the Thumbnail HOW-TO. +
  8. +
+
+ +
+ + diff --git a/src/documentation/content/xdocs/components/hsmf/index.xml b/src/documentation/content/xdocs/components/hsmf/index.xml new file mode 100644 index 0000000000..74d5671994 --- /dev/null +++ b/src/documentation/content/xdocs/components/hsmf/index.xml @@ -0,0 +1,65 @@ + + + + + +
+ POI-HSMF - Java API To Access Microsoft Outlook MSG Files + Overview + + + + +
+ + +
+ Overview + +

HSMF is the POI Project's pure Java implementation of the Outlook MSG format.

+

At this time, it provides low-level read access to all of the file, along + with a user-facing way to get at the common textual content of MSG files. + to all

+

There is an example MSG textual renderer, which shows how to access the + common parts such as sender, subject, message body and examples. This is + in the + HSMF examples area + of SVN. You may also wish to look at the unit tests for more use guides.

+ + + This code currently lives the + scratchpad area + of the POI SVN repository. To use this component, ensure + you have the Scratchpad Jar on your classpath, or a dependency + defined on the poi-scratchpad artifact - the main POI + jar is not enough! See the + POI Components Map + for more details. + + + This code is subject to change between versions, and being + "scratchpad", doesn't maintain the usual Apache POI backwards + compatibility guarantees. In particular, the way that property + values are fetched is expected to change soon, as part of the + work to improve fixed-length property support. + +
+ +
diff --git a/src/documentation/content/xdocs/components/index.xml b/src/documentation/content/xdocs/components/index.xml new file mode 100644 index 0000000000..e357117773 --- /dev/null +++ b/src/documentation/content/xdocs/components/index.xml @@ -0,0 +1,423 @@ + + + + + +
+ Apache POI™ - Component Overview + + + + + +
+ +
Apache POI Project Components +

The Apache POI project is the master project for developing pure + Java ports of file formats based on Microsoft's OLE 2 Compound + Document Format. OLE 2 Compound Document Format is used by + Microsoft Office Documents, as well as by programs using MFC + property sets to serialize their document objects. +

+

Apache POI is also the master project for developing pure + Java ports of file formats based on Office Open XML (ooxml). + OOXML is part of an ECMA / ISO standardisation effort. This + documentation is quite large, but you can normally find the bit you + need without too much effort! + ECMA-376 standard is here, + and is also under the + Microsoft OSP. +

+ + +
POIFS for OLE 2 Documents +

+ POIFS is the oldest and most stable part of POI. It is our port of the OLE 2 Compound Document Format to + pure Java. It supports both read and write functionality. All of our components for the binary (non-XML) + Microsoft Office formats ultimately rely on it by + definition. Please see the POIFS project page for more information. +

+
+
HSSF and XSSF for Excel Documents +

+ HSSF is our port of the Microsoft Excel 97 (-2003) file format (BIFF8) to pure + Java. XSSF is our port of the Microsoft Excel XML (2007+) file format (OOXML) to + pure Java. SS is a package that provides common support for both formats with a common API. + They both support read and write capability. Please see + the HSSF+XSSF project page for more + information. +

+
+
HWPF and XWPF for Word Documents +

+ HWPF is our port of the Microsoft Word 97 (-2003) file format to pure + Java. It supports read, and limited write capabilities. It also provides + simple text extraction support for the older Word 6 and Word 95 formats. + Please see the HWPF project page for more + information. This component remains in early stages of + development. It can already read and write simple files. +

+

+ We are also working on the XWPF for the WordprocessingML (2007+) format from the + OOXML specification. This provides read and write support for simpler + files, along with text extraction capabilities. +

+
+
HSLF and XSLF for PowerPoint Documents +

+ HSLF is our port of the Microsoft PowerPoint 97(-2003) file format to pure + Java. It supports read and write capabilities. Please see the HSLF project page for more + information. +

+

+ We are also working on the XSLF for the PresentationML (2007+) format from the + OOXML specification. +

+
+
HPSF for OLE 2 Document Properties +

+ HPSF is our port of the OLE 2 property set format to pure + Java. Property sets are mostly use to store a document's properties + (title, author, date of last modification etc.), but they can be used + for application-specific purposes as well. +

+

+ HPSF supports both reading and writing of properties. +

+

+ Please see the HPSF project + page for more information. +

+
+
HDGF and XDGF for Visio Documents +

+ HDGF is our port of the Microsoft Visio 97(-2003) file format to pure + Java. It currently only supports reading at a very low level, and + simple text extraction. Please see the HDGF / Diagram project page for more + information. +

+

+ XDGF is our port of the Microsoft Visio XML (.vsdx) file format to pure + Java. It has slightly more support than HDGF. Please see the XDGF / Diagram project page for more + information. +

+
+
HPBF for Publisher Documents +

+ HPBF is our port of the Microsoft Publisher 98(-2007) file format to pure + Java. It currently only supports reading at a low level for around + half of the file parts, and simple text extraction. Please see the HPBF project page for more + information. +

+
+
HMEF for TNEF (winmail.dat) Outlook Attachments +

+ HMEF is our port of the Microsoft TNEF (Transport Neutral Encoding + Format) file format to pure Java. TNEF is sometimes used by Outlook + for encoding the message, and will typically come through as + winmail.dat. HMEF currently only supports reading at a low level, but + we hope to add text and attachment extraction. Please see the HMEF project page for more + information. +

+
+
HSMF for Outlook Messages +

+ HSMF is our port of the Microsoft Outlook message file format to pure + Java. It currently only some of the textual content of MSG files, and + some attachments. Further support and documentation is coming in slowly. + For now, users are advised to consult the unit tests for example use. + Please see the HSMF project page for more + information. +

+

+ Microsoft has recently added the Outlook file format to its OSP. More information + is now available making implementing this API an easier task. +

+
+
+
Component Map +

+ The Apache POI distribution consists of support for many document file formats. This support is provided + in several Jar files. Not all of the Jars are needed for every format. The following tables + show the relationships between POI components, Maven repository tags, and the project's Jar files. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentApplication typeMaven artifactIdNotes
POIFSOLE2 FilesystempoiRequired to work with OLE2 / POIFS based files
HPSFOLE2 Property Setspoi 
HSSFExcel XLSpoiFor HSSF only, if common SS is needed see below
HSLFPowerPoint PPTpoi-scratchpad 
HWPFWord DOCpoi-scratchpad 
HDGFVisio VSDpoi-scratchpad 
HPBFPublisher PUBpoi-scratchpad 
HSMFOutlook MSGpoi-scratchpad 
DDFEscher common drawingspoi 
HWMFWMF drawingspoi-scratchpad 
OpenXML4JOOXMLpoi-ooxml plus either poi-ooxml-lite or
+ poi-ooxml-full
See notes below for differences between these options
XSSFExcel XLSXpoi-ooxml 
XSLFPowerPoint PPTXpoi-ooxml 
XWPFWord DOCXpoi-ooxml 
XDGFVisio VSDXpoi-ooxml 
Common SLPowerPoint PPT and PPTXpoi-scratchpad and poi-ooxmlSL code is in the core POI jar, but implementations are in poi-scratchpad + and poi-ooxml.
Common SSExcel XLS and XLSXpoi-ooxmlWorkbookFactory and friends all require poi-ooxml, not just core poi
+ +


+ +

+ This table maps artifacts into the jar file name. "version-yyyymmdd" is + the POI version stamp. You can see what the latest stamp is on the + downloads page. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Maven artifactIdPrerequisitesJAR
poilog4j 2.x, + commons-codec, + commons-collections, + commons-math3 + commons-io + poi-version-yyyymmdd.jar
poi-scratchpadpoipoi-scratchpad-version-yyyymmdd.jar
poi-ooxmlpoi, + poi-ooxml-lite, + commons-compress, + SparseBitSet
+ For SVG support: + batik-all, + xml-apis-ext, + xmlgraphics-commons
+ For PDF support: + pdfbox, + fontbox, + rototor graphics2d +
poi-ooxml-version-yyyymmdd.jar
poi-ooxml-litexmlbeanspoi-ooxml-lite-version-yyyymmdd.jar
poi-examplespoi, + poi-scratchpad, + poi-ooxml + poi-examples-version-yyyymmdd.jar
poi-ooxml-full (known as ooxml-schemas)xmlbeans
+ For signing: + bcpkix-jdk18on, + bcprov-jdk18on, + xmlsec, + slf4j-api +
poi-ooxml-full-version-yyyymmdd.jar
+ +

 

+ + Apache commons-math3 and commons-compress were added as a dependency in POI 4.0.0.
+ Zaxxer SparseBitSet was added as a dependency in POI 4.1.2
+ Apache commons-io was added as a dependency in POI 5.1.0 +
+

+ poi-ooxml requires poi-ooxml-lite. This is a substantially smaller + version of the poi-ooxml-full jar (ooxml-schemas-1.4.jar for POI 4.0.0, + ooxml-schemas-1.3.jar for POI 3.14 or to POI 3.17, + ooxml-schemas-1.1.jar for POI 3.7 up to POI 3.13, ooxml-schemas-1.0.jar + for POI 3.5 and 3.6). + The larger poi-ooxml-full (formerly, ooxml-schemas) jar is normally + only required for features that are not fully implemented in poi-ooxml. + There used to also be an ooxml-security jar, which contained + all of the classes relating to encryption and signing. POI 5 no longer needs this jar. + The equivalent classes are now in poi-ooxml-full and poi-ooxml-lite. + This JAR was ooxml-security-1.1.jar for POI 3.14 and POI 4. ooxml-security-1.0.jar + was used prior to that. +

+

+ The OOXML jars require a stax implementation, but now that Apache + POI requires Java 8, that dependency is provided by the JRE and no additional + stax jars are required. The OOXML jars used to require DOM4J, but + the code has now been changed to use JAXP and no additional dom4j + jars are required. By the way, look at this FAQ + if you have problems when using a non-Oracle JDK. +

+

+ The ooxml schemas jars are compiled with Apache XMLBeans. + It is recommended that you use the XMLBeans version that was used to build the POI OOXML schemas. + It may be possible to use newer XMLBeans jars but there are no guarantees, especially if the XMLBeans version + numbers differ a lot. +

+
+
Examples +

+ Small sample programs using the POI API are available in the + src/examples + (viewvc) directory of the source distribution. +

+

+ All of the examples are included in POI distributions as a poi-examples artifact. +

+
+
Running POI on other JVM languages +

+ POI can be run on most languages that run on the JVM. For code examples, + see Running POI on other JVM languages +

+
+
Contributed Software +

+ Besides the "official" components outlined above there is some further + software distributed with POI. This is called "contributed" software. It + is not explicitly recommended or even maintained by the POI team, but + it might still be useful to you. +

+

+ See POI Ruby Bindings and other code in the + poi-contrib module +

+
+ +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/components/logging.xml b/src/documentation/content/xdocs/components/logging.xml new file mode 100644 index 0000000000..10518acca8 --- /dev/null +++ b/src/documentation/content/xdocs/components/logging.xml @@ -0,0 +1,290 @@ + + + + + +
+ Apache POI™ - Logging Framework + + + + +
+ + +
+ Introduction +

+ Logging in POI is used primarily as a debugging mechanism, not a normal runtime + logging system. Logging at levels noisier than WARN is ONLY for autopsy type debugging, and should + NEVER be enabled on a production system. +

+
+
+ POI 5.1.0 and above +

+ Since version 5.1.0 Apache POI uses Apache Log4j v2 directly. +

+

+ Apache POI only depends on log4j-api and allows choosing which logging framework to use. log4j-core is + just one of many options. + If you want to continue to use another SLF4J compatible logging framework, you can deploy the + log4j-to-slf4j jar to + facilitate this. +

+

+ POI tries to name loggers after the canonical name of the containing class. For example, + org.apache.poi.poifs.filesystem.POIFSFileSystem. Use your logging framework's typical + mechanisms for activating and deactivating logging for specific loggers. +

+

+ All loggers are named com.apache.poi.*, so rules applied to com.apache.poi + will affect all POI loggers. +

+
+
+ Logging with Log4j 2 Core +

+ Capturing POI logs using Log4j 2 Core is as simple as including the + log4j-core JAR in + your project. POI also has dependencies on libraries that make use of the SLF4J and Apache Commons + Logging APIs. Gather logs from these dependencies by adding the + Commons Logging Bridge and the + the SLF4J Binding to your + project. +

+

+ The simplest configuration is to capture all POI logs at the same level as your application. You might + want to collect all messages INFO and higher, and are OK with capturing POI messages as well. +

+ + <Configuration ...> + <Loggers> + <Root level="INFO"> + ... + </Root> + </Loggers> + </Configuration> + + +

+ A more recommended configuration is to capture only messages from loggers you opt in to. For example, + you might want to capture all messages from com.example.myapplication at INFO + but only POI messages at WARN or more severe. +

+ + <Configuration ...> + <Loggers> + <Logger name="com.example.myapplication" level="INFO" /> + <Logger name="org.apache.poi" level="WARN" /> + + <Root level="OFF"> + ... + </Root> + </Loggers> + </Configuration> + + +

Another strategy you may decide to use is to capture all messages except those coming from POI.

+ + <Configuration ...> + <Loggers> + <Logger name="org.apache.poi" level="OFF" /> + + <Root level="INFO"> + ... + </Root> + </Loggers> + </Configuration> + +
+
+ Log4J SimpleLogger +

+ If your main aim is just to get rid of the scary logging log message from Log4J that says + 'ERROR StatusLogger Log4j2 could not find a logging implementation.', then one option is to + enable the SimpleLogger using a system property. +

+

+ -Dlog4j2.loggerContextFactory=org.apache.logging.log4j.simple.SimpleLoggerContextFactory +

+
+
+ Logging with SLF4J +

+ If you want to continue to use another SLF4J compatible logging framework, you can deploy the + log4j-to-slf4j jar + and the intended slf4j-bridges to facilitate this. +

+

+ See https://www.slf4j.org/ for more details about using SLF4J. +

+
+
+ Logging with Logback +

+ Capturing POI logs using Logback requires adding the + Log4j to SLF4J Adapter to + your project, along with the standard Logback dependencies. POI also has dependencies on libraries that + make use of the SLF4J and Apache Commons Logging APIs. Gather logs from these dependencies by adding the + Commons Logging Bridge to your project. +

+ +

+ The simplest configuration is to capture all POI logs at the same level as your application. You might + want to collect all messages INFO and higher, and are OK with capturing POI messages as well. +

+ + <configuration ...> + <root level="INFO"> + ... + </root> + </configuration> + + +

+ A more recommended configuration is to capture only messages from loggers you opt in to. For example, + you might want to capture all messages from com.example.myapplication at INFO + but only POI messages at WARN or more severe. +

+ + <configuration ...> + <logger name="com.example.myapplication" level="INFO" /> + <logger name="org.apache.poi" level="WARN" /> + + <root level="OFF"> + ... + </root> + </configuration> + + +

Another strategy you may decide to use is to capture all messages except those coming from POI.

+ + <configuration ...> + <logger name="org.apache.poi" level="OFF" /> + + <root level="INFO"> + ... + </root> + </configuration> + +
+
+ POI 5.0.0 +

+ POI 5.0.0 switched to using SLF4J for logging. If you want + to enable logging, please read up on the various SLF4J compatible logging frameworks. + Apache Log4j v2 is a good choice. + Logback is also widely used. +

+
+
+ Legacy POI Logging Framework (no longer supported in POI 5.0.0 and above) +

+ Prior to POI 5.0.0, POI used a custom logging framework which allows to configure where logs are sent to. +

+

+ Logging in POI 3 and 4 is used only as a debugging mechanism, not as a normal runtime + logging system. Logging at level debug/info is ONLY for debugging, and should + NEVER be enabled on a production system. +

+

+ The framework is extensible so that you can send log messages to any logging framework + that your application uses. +

+

+ A number of default logging implementations are supported by POI out-of-the-box and can be selected via a + system property. +

+
+
POI 4.x and before: Enable Legacy POI Logging Framework +

+ By default, logging is disabled in POI 3 and 4. Sometimes, it might be useful + to enable logging to see some debug messages printed out which can + help in analyzing problems. +

+

+ You can select the logging framework by setting the system property org.apache.poi.util.POILogger during application startup or by calling System.setProperty(): +

+ + System.setProperty("org.apache.poi.util.POILogger", "org.apache.poi.util.CommonsLogger" ); + +

+ Note: You need to call setProperty() before any POI functionality is invoked as the logger is only initialized during startup. +

+
+
POI 4.x and before: Available Legacy POI Logging Framework implementations +

+ The following logger implementations are provided by POI 3 and 4: +

+ + + + + + + + + + + + + + + + + + + + + +
ClassType
org.apache.poi.util.SystemOutLoggerSends log output to the system console
org.apache.poi.util.NullLoggerDefault logger, does not log anything
org.apache.poi.util.CommonsLoggerAllows to use Apache Commons Logging for logging. This can use JDK1.4 logging, + log4j, logkit, etc. The log4j dependency was removed in POI 5.0.0, so you will need to include this dependency yourself if you need it.
org.apache.poi.util.DummyPOILoggerSimple logger which will keep all log-lines in memory for later analysis (this class is not in the jar, just in the test source). + Used primarily for testing. Note: this may cause a memory leak if used in production application!
+
+
POI 4.x and before: Sending logs to a different log framework +

+ You can send logs to other logging frameworks by implementing the interface org.apache.poi.util.POILogger. +

+
+
POI 4.x and before: Implementation details +

+ Every class uses a POILogger to log, and gets it using a static method + of the POILogFactory . +

+

+ Each class in POI can log using a POILogger, which is an abstract class. + We decided to make our own logging facade because:

+
    +
  1. we need to log many values and we put many methods in this class to facilitate the + programmer, without having him write string concatenations;
  2. +
  3. we need to be able to use POI without any logger package present.
  4. +
+
+ +
+ + Copyright (c) @year@ The Apache Software Foundation All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/components/oxml4j/index.xml b/src/documentation/content/xdocs/components/oxml4j/index.xml new file mode 100644 index 0000000000..06cf00d20a --- /dev/null +++ b/src/documentation/content/xdocs/components/oxml4j/index.xml @@ -0,0 +1,45 @@ + + + + + +
+ POI-OpenXML4J - Java API To Access Office Open XML documents + Overview +
+ + +
+ Overview +

OpenXML4J is the POI Project's pure Java implementation of the Open Packaging Conventions (OPC) defined in + ECMA-376.

+

Every OpenXML file comprises a collection of byte streams called parts, combined into a container called a package. + POI OpenXML4J provides a physical implementation of the OPC that uses the Zip file format.

+
+
+ History +

OpenXML4J was originally developed by + openxml4j.org, + and was contributed to Apache POI in 2008. The original code is available at + https://sourceforge.net/projects/openxml4j/. + Thanks to the support and guidance of Julien Chable

+
+ +
diff --git a/src/documentation/content/xdocs/components/poi-jvm-languages.xml b/src/documentation/content/xdocs/components/poi-jvm-languages.xml new file mode 100644 index 0000000000..b01c0a3deb --- /dev/null +++ b/src/documentation/content/xdocs/components/poi-jvm-languages.xml @@ -0,0 +1,351 @@ + + + + + +
+ JVM languages + + + +
+ + +
Intro +

+ Apache POI can be used with any + JVM language + that can import Java jar files such as Jython, Groovy, Scala, Kotlin, and JRuby. +

+ +
+ + +
Tested Environments +
    +
  • Jython 2.5+ (older versions probably work, but are untested)
  • +
  • Scala 2.x
  • +
  • Groovy 2.4 (anything from 1.6 onwards ought to work, but only the latest 2.4 releases have been tested by us)
  • +
  • Clojure 1.5.1+
  • +
+

If you use POI in a different language (Kotlin, JRuby, ...) and would like to share a Hello POI! example, + please share it.

+

Please let us know if you use POI in an environment not listed here

+
+ + +
Java code +
POILanguageExample.java + + // include poi-{version}-{yyyymmdd}.jar, poi-ooxml-{version}-{yyyymmdd}.jar, + // and poi-ooxml-lite-{version}-{yyyymmdd}.jar on Java classpath + + // Import the POI classes + import java.io.File; + import java.io.FileOutputStream; + import java.io.OutputStream; + import org.apache.poi.ss.usermodel.Cell; + import org.apache.poi.ss.usermodel.Row; + import org.apache.poi.ss.usermodel.Sheet; + import org.apache.poi.ss.usermodel.Workbook; + import org.apache.poi.ss.usermodel.WorkbookFactory; + import org.apache.poi.ss.usermodel.DataFormatter; + + // Read the contents of the workbook + File f = new File("SampleSS.xlsx"); + Workbook wb = WorkbookFactory.create(f); + DataFormatter formatter = new DataFormatter(); + int i = 1; + int numberOfSheets = wb.getNumberOfSheets(); + for ( Sheet sheet : wb ) { + System.out.println("Sheet " + i + " of " + numberOfSheets + ": " + sheet.getSheetName()); + for ( Row row : sheet ) { + System.out.println("\tRow " + row.getRowNum()); + for ( Cell cell : row ) { + System.out.println("\t\t"+ cell.getAddress().formatAsString() + ": " + formatter.formatCellValue(cell)); + } + } + } + + // Modify the workbook + Sheet sh = wb.createSheet("new sheet"); + Row row = sh.createRow(7); + Cell cell = row.createCell(42); + cell.setActiveCell(true); + cell.setCellValue("The answer to life, the universe, and everything"); + + // Save and close the workbook + OutputStream fos = new FileOutputStream("SampleSS-updated.xlsx"); + wb.write(fos); + fos.close(); + +
+
+ +
Jython example + + # Add poi jars onto the python classpath or add them at run time + import sys + for jar in ('poi', 'poi-ooxml', 'poi-ooxml-lite'): + sys.path.append('/path/to/%s-5.4.1.jar') + + from java.io import File, FileOutputStream + from contextlib import closing + + # Import the POI classes + from org.apache.poi.ss.usermodel import WorkbookFactory, DataFormatter + + # Read the contents of the workbook + wb = WorkbookFactory.create(File('SampleSS.xlsx')) + formatter = DataFormatter() + for i, sheet in enumerate(wb, start=1): + print('Sheet %d of %d: %s'.format(i, wb.numberOfSheets, sheet.sheetName)) + for row in sheet: + print('\tRow %i' % row.rowNum) + for cell in row: + print('\t\t%s: %s' % (cell.address, formatter.formatCellValue(cell))) + + # Modify the workbook + sh = wb.createSheet('new sheet') + row = sh.createRow(7) + cell = sh.createCell(42) + cell.activeCell = True + cell.cellValue = 'The answer to life, the universe, and everything' + + # Save and close the workbook + with closing(FileOutputStream('SampleSS-updated.xlsx')) as fos: + wb.write(fos) + wb.close() + +

There are several websites that have examples of using Apache POI in Jython projects: + python.org, + jython.org, and many others. +

+
+ +
Scala example +
build.sbt + + // Add the POI core and OOXML support dependencies into your build.sbt + libraryDependencies ++= Seq( + "org.apache.poi" % "poi" % "5.4.1", + "org.apache.poi" % "poi-ooxml" % "5.4.1", + "org.apache.poi" % "poi-ooxml-lite" % "5.4.1" + ) + +
+
XSSFMain.scala + + // Import the required classes + import org.apache.poi.ss.usermodel.{WorkbookFactory, DataFormatter} + import java.io.{File, FileOutputStream} + + object XSSFMain extends App { + + // Automatically convert Java collections to Scala equivalents + import scala.collection.JavaConversions._ + + // Read the contents of the workbook + val workbook = WorkbookFactory.create(new File("SampleSS.xlsx")) + val formatter = new DataFormatter() + for { + // Iterate and print the sheets + (sheet, i) <- workbook.zipWithIndex + _ = println(s"Sheet $i of ${workbook.getNumberOfSheets}: ${sheet.getSheetName}") + + // Iterate and print the rows + row <- sheet + _ = println(s"\tRow ${row.getRowNum}") + + // Iterate and print the cells + cell <- row + } { + println(s"\t\t${cell.getCellAddress}: ${formatter.formatCellValue(cell)}") + } + + // Add a sheet to the workbook + val sheet = workbook.createSheet("new sheet") + val row = sheet.createRow(7) + val cell = row.createCell(42) + cell.setAsActiveCell() + cell.setCellValue("The answer to life, the universe, and everything") + + // Save the updated workbook as a new file + val fos = new FileOutputStream("SampleSS-updated.xlsx") + workbook.write(fos) + workbook.close() + } + +
+
+ +
Groovy example +
build.gradle + +// Add the POI core and OOXML support dependencies into your gradle build, +// along with all of Groovy so it can run as a standalone script +repositories { + mavenCentral() +} +dependencies { + runtime 'org.codehaus.groovy:groovy-all:2.5.15' + runtime 'org.apache.poi:poi:5.4.1' + runtime 'org.apache.poi:poi-ooxml:5.4.1' +} + +
+
SpreadSheetDemo.groovy + +import org.apache.poi.ss.usermodel.* +import org.apache.poi.ss.util.* +import java.io.File + +if (args.length == 0) { + println "Use:" + println " SpreadSheetDemo <excel-file> [output-file]" + return 1 +} + +File f = new File(args[0]) +DataFormatter formatter = new DataFormatter() +WorkbookFactory.create(f,null,true).withCloseable { workbook -> + println "Has ${workbook.getNumberOfSheets()} sheets" + + // Dump the contents of the spreadsheet + (0..<workbook.getNumberOfSheets()).each { sheetNum -> + println "Sheet ${sheetNum} is called ${workbook.getSheetName(sheetNum)}" + + def sheet = workbook.getSheetAt(sheetNum) + sheet.each { row -> + def nonEmptyCells = row.grep { c -> c.getCellType() != Cell.CELL_TYPE_BLANK } + println " Row ${row.getRowNum()} has ${nonEmptyCells.size()} non-empty cells:" + nonEmptyCells.each { c -> + def cRef = [c] as CellReference + println " * ${cRef.formatAsString()} = ${formatter.formatCellValue(c)}" + } + } + } + + // Add two new sheets and populate + CellStyle headerStyle = makeHeaderStyle(workbook) + Sheet ns1 = workbook.createSheet("Generated 1") + exportHeader(ns1, headerStyle, null, ["ID","Title","Num"] as String[]) + ns1.createRow(1).createCell(0).setCellValue("TODO - Populate with data") + + Sheet ns2 = workbook.createSheet("Generated 2") + exportHeader(ns2, headerStyle, "This is a demo sheet", + ["ID","Title","Date","Author","Num"] as String[]) + ns2.createRow(2).createCell(0).setCellValue(1) + ns2.createRow(3).createCell(0).setCellValue(4) + ns2.createRow(4).createCell(0).setCellValue(1) + + // Save + File output = File.createTempFile("output-", (f.getName() =~ /(\.\w+$)/)[0][0]) + output.withOutputStream { os -> workbook.write(os) } + println "Saved as ${output}" +} + +CellStyle makeHeaderStyle(Workbook wb) { + int HEADER_HEIGHT = 18 + CellStyle style = wb.createCellStyle() + + style.setFillForegroundColor(IndexedColors.AQUA.getIndex()) + style.setFillPattern(FillPatternType.SOLID_FOREGROUND) + + Font font = wb.createFont() + font.setFontHeightInPoints((short)HEADER_HEIGHT) + font.setBold(true) + style.setFont(font) + + return style +} +void exportHeader(Sheet s, CellStyle headerStyle, String info, String[] headers) { + Row r + int rn = 0 + int HEADER_HEIGHT = 18 + // Do they want an info row at the top? + if (info != null && !info.isEmpty()) { + r = s.createRow(rn) + r.setHeightInPoints(HEADER_HEIGHT+1) + rn++ + + Cell c = r.createCell(0) + c.setCellValue(info) + c.setCellStyle(headerStyle) + s.addMergedRegion(new CellRangeAddress(0,0,0,headers.length-1)) + } + // Create the header row, of the right size + r = s.createRow(rn) + r.setHeightInPoints(HEADER_HEIGHT+1) + // Add the column headings + headers.eachWithIndex { col, idx -> + Cell c = r.createCell(idx) + c.setCellValue(col) + c.setCellStyle(headerStyle) + s.autoSizeColumn(idx) + } + // Make all the columns filterable + s.setAutoFilter(new CellRangeAddress(rn, rn, 0, headers.length-1)) +} + +
+
+ +
Clojure example +
SpreadSheetDemo.clj + + +(ns poi.core + (:gen-class) + (:use [clojure.java.io :only [input-stream]]) + (:import [org.apache.poi.ss.usermodel WorkbookFactory DataFormatter])) + + +(defn sheets [wb] (map #(.getSheetAt wb %1) (range 0 (.getNumberOfSheets wb)))) + +(defn print-all [wb] + (let [df (DataFormatter.)] + (doseq [sheet (sheets wb)] + (doseq [row (seq sheet)] + (doseq [cell (seq row)] + (println (.formatAsString (.getAddress cell)) ": " (.formatCellValue df cell))))))) + +(defn -main [& args] + (when-let [name (first args)] + (let [wb (WorkbookFactory/create (input-stream name))] + (print-all wb)))) + +
+
+ +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/components/poi-ruby.xml b/src/documentation/content/xdocs/components/poi-ruby.xml new file mode 100644 index 0000000000..da4201dca6 --- /dev/null +++ b/src/documentation/content/xdocs/components/poi-ruby.xml @@ -0,0 +1,152 @@ + + + + + +
+ POI Ruby Bindings + + + +
+ + +
Intro +

The POI library can now be compiled as a Ruby extension, allowing the API to be called from + Ruby language programs. Ruby users can therefore read and write OLE2 documents, such as Excel files + with ease +

+

The bindings are generated by compiling POI with gcj, + and generating the Ruby wrapper using SWIG. The aim is the keep + the POI api as-is. However, where java standard library objects are used, an effort is made to transform them smoothly + into Ruby objects. Therefore, where the POI API takes an OutputStream, you can pass an IO object. Where the POI works + java.util.Date or java.util.Calendar object, you can work with a Ruby Time object.

+
+ + +
Getting Started +
Pre-Requisites +

The bindings have been developed with GCC 3.4.3 and Ruby 1.8.2. You are unlikely to get correct results with + versions of GCC prior to 3.4 or versions of Ruby prior to 1.8. To compile the Ruby extension, you must have + GCC (compiled with java language support), Ruby development headers, and SWIG. To run, you will need Ruby (obviously!) and + libgcj , presumably from the same version of GCC with which you compiled. +

+
+
Subversion +

+ The POI-Ruby module sits under the POI Subversion + (viewvc). Running make + inside that directory will create a loadable ruby extension poi4r.so in the release subdirectory. Tests + are in the tests/ subdirectory, and should be run from the poi-ruby directory. Please read the tests to figure out the usage. +

+

Note that the makefile, though designed to work across Linux/OS X/Cygwin, has been tested only on linux. + There are likely to be issues on other platform; fixes gratefully accepted!

+
+
Binary +

A version of poi4r.so is available here (broken link). Its been compiled on a linux box + with GCC 3.4.3 and Ruby 1.8.2. It dynamically links to libgcj. No guarantees about working on any other box.

+
+
+ + + + +
+ Usage +

The following ruby code shows some of the things you can do with POI in Ruby

+ + h=Poi4r::HSSFWorkbook.new + #Test Sheet Creation + s=h.createSheet("Sheet1") + + #Test setting cell values + s=h.getSheetAt(0) + r=s.createRow(0) + c=r.createCell(0) + c.setCellValue(1.5) + + c=r.createCell(1) + c.setCellValue("Ruby") + + #Test styles + st = h.createCellStyle() + c=r.createCell(2) + st.setAlignment(Poi4r::HSSFCellStyle.ALIGN_CENTER) + c.setCellStyle(st) + c.setCellValue("centr'd") + + #Date handling + c=r.createCell(3) + t1=Time.now + c.setCellValue(Time.now) + t2= c.getDateCellValue().gmtime + + st=h.createCellStyle(); + st.setDataFormat(Poi4r::HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")) + c.setCellStyle(st) + + #Formulas + c=r.createCell(4) + c.setCellFormula("A1*2") + c.getCellFormula() + + #Writing + h.write(File.new("test.xls","w")) + +

The tc_base_tests.rb file in the tests sub directory of the source distribution + contains examples of simple uses of the API. The quick guide is the best + place to learn HSSF API use. (Note however that none of the Drawing features are implemented in the Ruby binding.) + See also the POI API documentation for more details. +

+
+ +
+ Future Directions +
TODO's +
    +
  • Implement support for reading Excel files (easy)
  • +
  • Expose POIFS API to read raw OLE2 files from Ruby
  • +
  • Expose HPSF API to read property streams
  • +
  • Tests... Tests... Tests...
  • +
+
+
Limitations +
    +
  • Check operations in 64bit machines - Java primitive types are fixed irrespective of machine type, unlike C/C++ types. The wrapping code + that converts C/C++ primitive types to/from Java types is making assumptions on type sizes that MAY be incorrect on wide architectures.
  • +
  • The current implementation is with the POI 2.0 release. The 2.5 release adds support for Excel drawing primitives, and + thus has a dependency on java AWT. Since AWT is not very mature in gcj, leaving it out seemed to be the safer option.
  • +
  • Packaging - The current make file makes no effort to install the extension into the standard ruby directories. This should probably be + packaged as a gem.
  • +
+
+ +
+ + +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/components/poifs/design.xml b/src/documentation/content/xdocs/components/poifs/design.xml new file mode 100644 index 0000000000..b4ab1d54f9 --- /dev/null +++ b/src/documentation/content/xdocs/components/poifs/design.xml @@ -0,0 +1,1099 @@ + + + + + +
+ Apache POI™ - POIFS - Design Document +
+ +
+ POIFS Design Document +

This document describes the design of the POIFS system. It is organized as follows:

+
    +
  • + Scope: + A description of the limitations of this document. +
  • +
  • + Assumptions: + The assumptions on which this design is based. +
  • +
  • + Design Considerations: + The constraints and goals applied to the design. +
  • +
  • + Design: + The design of the POIFS system. +
  • +
+
+
+ Scope +

This document is written as part of an iterative process. As that process is not yet complete, neither is + this document. +

+
+
+ Assumptions +

The design of POIFS is not dependent on the code written for the proof-of-concept prototype POIFS + package. +

+
+
+ Design Considerations +

As usual, the primary considerations in the design of the POIFS assumption involve the classic space-time + tradeoff. In this case, the main consideration has to involve minimizing the memory footprint of POIFS. + POIFS may be called upon to create relatively large documents, and in web application server, it may be + called upon to create several documents simultaneously, and it will likely co-exist with other + Serializer systems, competing with those other systems for space on the server. +

+

We've addressed the risk of being too slow through a proof-of-concept prototype. This prototype for POIFS + involved reading an existing file, decomposing it into its constituent documents, composing a new POIFS + from the constituent documents, and writing the POIFS file back to disk and verifying that the output + file, while not necessarily a byte-for-byte image of the input file, could be read by the application + that generated the input file. This prototype proved to be quite fast, reading, decomposing, and + re-generating a large (300K) file in 2 to 2.5 seconds. +

+

While the POIFS format allows great flexibility in laying out the documents and the other internal data + structures, the layout of the filesystem will be kept as simple as possible. +

+
+
+ Design +

The design of the POIFS is broken down into two parts: discussion of the classes and + interfaces, and discussion of how these classes and interfaces will be used to + convert an appropriate Java InputStream (such as an XML stream) to a POIFS output stream containing an + HSSF document. +

+

+ Classes and Interfaces +

+

The classes and interfaces used in the POIFS are broken down as follows:

+ + + + + + + + + + + + + + + + + + + + + +
PackageContents
+ net.sourceforge.poi.poifs.storage + Block classes and interfaces
+ net.sourceforge.poi.poifs.property + Property classes and interfaces
+ net.sourceforge.poi.poifs.filesystem + Filesystem classes and interfaces
+ net.sourceforge.poi.util + Utility classes and interfaces
+ +
+ Block Classes and Interfaces +

The block classes and interfaces are shownin the following class diagram.

+

+ Block Classes and Interfaces +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class/InterfaceDescription
BATBlockThe BATBlock class represents a single big block containing 128 + BAT entries.
Its _fields array is used to + read and write the BAT entries into the _data array. +
Its createBATBlocks method is used to create an array of BATBlock + instances from an array of int BAT entries. +
+ Its calculateStorageRequirements method calculates the number of BAT blocks + necessary to hold the specified number of BAT entries. +
BigBlockThe BigBlock class is an abstract class representing the common big block + of 512 bytes. It implements BlockWritable, trivially delegating + the writeBlocks method of BlockWritable to its own abstract writeData + method. +
BlockWritableThe BlockWritable interface defines a single method, + writeBlocks, that is used to write an implementation's block data to an + OutputStream. +
DocumentBlockThe DocumentBlock class is used by a + Document + to holds its raw data. It also retains the number of bytes read, as this is used by the + Document class to determine the total size of the data, and is also used internally to + determine whether the block was filled by the + InputStream + or not. +
+ The DocumentBlock constructor is passed an InputStream from which + to fill its _data array. +
+ The size method returns the number of bytes read (_bytes_read) + when the instance was constructed. +
+ The partiallyRead method returns true if the _data array was not + completely filled, which may be interpreted by the Document as having reached the end of + file point.
Typical use of the DocumentBlock class is like this: +
+ +
HeaderBlockThe HeaderBlock class is used to contain the data found in a POIFS header. +
+ Its IntegerField members are used to read and write the + appropriate entries into the + _data + array.
Its + setBATBlocks + , + setPropertyStart + , and + setXBATStart + methods are used to set the appropriate fields in the + _data + array.
The + calculateXBATStorageRequirements + method is used to determine how many XBAT blocks are necessary to accommodate the specified + number of BAT blocks. +
PropertyBlockThe PropertyBlock class is used to contain + Property + instances for the + PropertyTable + class.
It contains an array, _properties of 4 Property instances, which + together comprise the 512 bytes of a BigBlock. +
+ The createPropertyBlockArray method is used to convert a + List + of Property instances into an array of PropertyBlock instances. The number of Property + instances is rounded up to a multiple of 4 by creating empty anonymous inner class + extensions of Property. +
+
+ +
+ Property Classes and Interfaces + +

The property classes and interfaces are shown in the following class diagram. +

+

+ Property Classes and Interfaces +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class/InterfaceDescription
DirectoryThe Directory interface is implemented by the + RootProperty + class. It is not strictly necessary for the initial POIFS implementation, but when the POIFS + supports directory elements, this interface + will be more widely implemented, and so is included in the design at this point to ease the + eventual support of directory elements.
Its methods are a getter/setter pair, + getChildren + , returning an Iterator of + Property + instances; and + addChild + , which will allow the caller to add another Property instance to the Directory's children. +
DocumentPropertyThe DocumentProperty class is a trivial extension of + Property + and is used by Document to keep track of its associated entry in + the + PropertyTable.
Its constructor takes a name and the + document size, on the assumption that the Document will not create a DocumentProperty until + after it has created the storage for the document data and therefore knows how much data + there is. +
FileThe File interface specifies the behavior of reading and writing the next + and previous child fields of a Property. +
PropertyThe Property class is an abstract class that defines the basic data + structure of an element of the + Property Table.
Its ByteField, + ShortField, and + IntegerField + members are used to read and write data into the appropriate locations in the + _raw_data + array.
The + _index + member is used to hold a Propery instance's index in the List of Property + instances maintained by PropertyTable, which is used to + populate the child property of parent + Directory + properties and the next property and previous property of sibling + File + properties.
The + _name + , + _next_file + , and + _previous_file + members are used to help fill the appropriate fields of the _raw_data array.
Setters are + provided for some of the fields (name, property type, node color, child property, size, + index, start block), as well as a few getters (index, child property).
The + preWrite + method is abstract and is used by the owning PropertyTable to iterate through its Property + instances and prepare each for writing.
The + shouldUseSmallBlocks + method returns true if the Property's size is sufficiently small - how small is none of the + caller's business. +
PropertyBlockSee the description in PropertyBlock. +
PropertyTableThe PropertyTable class holds all of the + DocumentProperty + instances and the + RootProperty + instance for a + Filesystem + instance.
It maintains a + List + of its + Property + instances ( + _properties + ), and when prepared to write its data by a call to + preWrite + , it gets and holds an array of + PropertyBlock + instances ( + _blocks) .
It also maintains its start block in its + _start_block + member.
It has a method, + getRoot + , to get the RootProperty, returning it as an implementation of + Directory, and a method to add a Property, + addProperty + , and a method to get its start block, + getStartBlock + . +
RootPropertyThe RootProperty class acts as the Directory for + all of the + DocumentProperty + instance. As such, it is more of a pure directory + entry + than a proper root entry + in the Property Table, but the initial + POIFS implementation does not warrant the additional complexity of a full-blown root entry, + and so it is not modeled in this design.
It maintains a + List + of its children, + _children + , in order to perform its directory-oriented duties. +
+
+ +
+ Filesystem Classes and Interfaces +

The property classes and interfaces are shown in the following class diagram. +

+

+ Filesystem Classes and Interfaces +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class/InterfaceDescription
FilesystemThe Filesystem class is the top-level class that manages the creation of a + POIFS document.
It maintains a + PropertyTable + instance in its + _property_table + member, a + HeaderBlock + instance in its + _header_block + member, and a List of its + Document + instances in its + _documents + member.
It provides methods for a client to create a document ( + createDocument + ), and a method to write the Filesystem to an + OutputStream + ( + writeFilesystem + ). +
BATBlockSee the description in + BATBlock +
BATManagedThe BATManaged interface defines common behavior for objects whose location + in the written file is managed by the Block Allocation + Table.
It defines methods to get a count of the implementation's + BigBlock + instances ( + countBlocks + ), and to set an implementation's start block ( + setStartBlock + ). +
BlockAllocationTableThe BlockAllocationTable is an implementation of the + POIFS Block Allocation Table. It is only created when the + Filesystem + is about to be written to an + OutputStream.
It contains an IntList of block + numbers for all of the + BATManaged + implementations owned by the Filesystem, + _entries + , which is filled by calls to + allocateSpace + .
It fills its array, + _blocks + , of + BATBlock + instances when its + createBATBlocks + method is called. This method has to take into account its own storage requirements, as well + as those of the XBAT blocks, and so calls + BATBlock.calculateStorageRequirements + and + HeaderBlock.calculateXBATStorageRequirements + repeatedly until the counts returned by those methods stabilize.
The + countBlocks + method returns the number of BATBlock instances created by the preceding call to + createBlocks. +
BlockWritableSee the description in + BlockWritable +
DocumentThe Document class is used to contain a document, such as an HSSF workbook. +
It has its own + DocumentProperty + ( + _property + ) and stores its data in a collection of + DocumentBlock + instances ( + _blocks + ).
It has a method, + getDocumentProperty + , to get its DocumentProperty. +
DocumentBlockSee the description in + DocumentBlock +
DocumentPropertySee the description in + DocumentProperty +
HeaderBlockSee the description in + HeaderBlock +
PropertyTableSee the description in + PropertyTable +
+
+ +
+ Utility Classes and Interfaces +

The utility classes and interfaces are shown in the following class diagram. +

+

+ Utility Classes and Interfaces +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class/InterfaceDescription
BitFieldThe BitField class is used primarily by HSSF code to manage bit-mapped + fields of HSSF records. It is not likely to be used in the POIFS code itself and is only + included here for the sake of complete documentation of the POI utility classes. +
ByteFieldThe ByteField class is an implementation of + FixedField + for the purpose of managing reading and writing to a byte-wide field in an array of + bytes. +
FixedFieldThe FixedField interface defines a set of methods for reading a field from + an array of + bytes + or from an + InputStream, and for writing a field to an array of + bytes. Implementations typically require an offset in their constructors that, + for the purposes of reading and writing to an array of + bytes, makes sure that the correct bytes in the array are read or + written. +
HexDumpThe HexDump class is a debugging class that can be used to dump an array of + bytes + to an OutputStream. The static method + dump + takes an array of bytes, a long offset that is used to label the + output, an open + OutputStream, and an + int + index that specifies the starting index within the array of + bytes.
The data is displayed 16 bytes per line, with each byte displayed in + hexadecimal format and again in printable form, if possible (a byte is considered printable + if its value is in the range of 32 ... 126).
Here is an example of a small array of + bytes + with an offset of 0x110: +
+ +
IntegerFieldThe IntegerField class is an implementation of + FixedField + for the purpose of managing reading and writing to an integer-wide field in an array + of bytes. +
IntListThe IntList class is a work-around for functionality missing in Java (see + + https://developer.java.sun.com/developer/bugParade/bugs/4487555.html + + for details); it is a simple growable array of ints that gets around the + requirement of wrapping and unwrapping ints in + Integer + instances in order to use the + java.util.List + interface. +
+ IntList + mimics the functionality of the + java.util.List + interface as much as possible. +
LittleEndianThe LittleEndian class provides a set of static methods for reading and + writing + shorts, + ints, longs, and doubles in and out of + byte + arrays, and out of + InputStreams, preserving the Intel byte ordering and encoding of these values. +
LittleEndianConstsThe + LittleEndianConsts + interface defines the width of a + short, int, + long, and + double + as stored by Intel processors. +
LongFieldThe LongField class is an implementation of + FixedField + for the purpose of managing reading and writing to a long-wide field in an array of + bytes. +
ShortFieldThe ShortField class is an implementation of + FixedField + for the purpose of managing reading and writing to a short-wide field in an array of + bytes. +
ShortListThe ShortList class is a work-around for functionality missing in Java (see + + https://developer.java.sun.com/developer/bugParade/bugs/4487555.html + + for details); it is a simple growable array of shorts that gets around the + requirement of wrapping and unwrapping shorts in + Short + instances in order to use the + java.util.List + interface. +
+ ShortList + mimics the functionality of the + java.util.List + interface as much as possible. +
StringUtilThe StringUtil class manages the processing of Unicode strings. +
+
+
+ +
+ Scenarios +

This section describes the scenarios of how the POIFS classes and interfaces will be used to convert an + appropriate XML stream to a POIFS output stream containing an HSSF document. +

+

It is broken down as suggested by the following scenario diagram: +

+

+ POIFS LifeCycle +

+ + + + + + + + + + + + + + + + + +
StepDescription
1 + The Filesystem is created by the client application. + +
2The client application tells the Filesystem to create a document, + providing an + InputStream + and the name of the document. This may be repeated several times. +
3 + The client application asks the Filesystem to write its data to + an OutputStream. + +
+ +
+ Initialization +

Initialization of the POIFS system is shown in the following scenario diagram: +

+

+ Initialization +

+ + + + + + + + + + + + + + + + + +
StepDescription
1The + Filesystem + object, which is created for each request to convert an appropriate XML stream to a POIFS + output stream containing an HSSF document, creates its + PropertyTable. +
2The + PropertyTable + creates its + RootProperty + instance, making the RootProperty the first + Property + in its List of Property instances. +
3The + Filesystem + creates its + HeaderBlock + instance. It should be noted that the decision to create the HeaderBlock at Filesystem + initialization is arbitrary; creation of the HeaderBlock could easily and harmlessly be + postponed to the appropriate moment in + writing the filesystem. +
+
+ +
+ Creating a Document +

Creating and adding a document to a POIFS system is shown in the following scenario diagram: +

+

+ Add Document +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepDescription
1The + Filesystem + instance creates a new + Document + instance. It will store the newly created Document in a + List + of + BATManaged + instances. +
2The Document reads data from the provided + InputStream, storing the data in + DocumentBlock + instances. It keeps track of the byte count as it reads the data. +
3The Document creates a + DocumentProperty + to keep track of its property data. The byte count is stored in the newly created + DocumentProperty instance. +
4The + Filesystem + requests the newly created + DocumentProperty + from the newly created + Document + instance. +
5The + Filesystem + sends the newly created + DocumentProperty + to the Filesystem's + PropertyTable + so that the PropertyTable can add the DocumentProperty to its + List + of + Property + instances. +
6The Filesystem gets the + RootProperty + from its PropertyTable. +
7The Filesystem adds the newly created + DocumentProperty + to the RootProperty. +
+

Although typical deployment of the POIFS system will only entail adding a single + Document + (the workbook) to the Filesystem, there is nothing in the design to + prevent multiple Documents from being added to the Filesystem. This flexibility can be employed to + write summary information document(s) in addition to the workbook. +

+
+ +
+ Writing the Filesystem +

Writing the filesystem is shown in the following scenario diagram: +

+

+ Writing the Filesystem +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepDescription
1The Filesystem adds the + PropertyTable + to its List of + BATManaged + instances and calls the PropertyTable's + preWrite + method. The action taken by the PropertyTable is shown in + the PropertyTable preWrite scenario diagram. +
2The + Filesystem + creates the BlockAllocationTable. +
3The Filesystem gets the block count from the + BATManaged + instance. + These three steps are repeated for each + BATManaged + instance in the Filesystem's + List + of BATManaged instances (i.e., the Documents, in order of their + addition to the Filesystem, followed by the PropertyTable). +
4The + Filesystem + sends the block count to the + BlockAllocationTable, which adds the appropriate entries to is + IntList + of entries, returning the starting block for the newly added entries. +
5The + Filesystem + gives the start block number to the + BATManaged + instance. If the BATManaged instance is a Document, it sets the + start block field in its + DocumentProperty. +
6The + Filesystem + tells the + BlockAllocationTable + to create its BatBlocks. +
7The + Filesystem + gives the BAT information to the HeaderBlock so that it can set + its BAT fields and, if necessary, create XBAT blocks. +
8If the filesystem is unusually large (over 7MB), the + HeaderBlock + will create XBAT blocks to contain the BAT data that it cannot hold directly. In this case, + the + Filesystem + tells the HeaderBlock where those additional blocks will be stored. +
9The + Filesystem + gives the + PropertyTable + start block to the HeaderBlock. +
10The + Filesystem + tells the + BlockWritable + instance to write its blocks to the provided + OutputStream.
This step is repeated for each BlockWritable instance, in + this order: +
+
    +
  1. + The HeaderBlock. +
  2. +
  3. + Each Document, in the order in which it was added to + the Filesystem. +
  4. +
  5. + The PropertyTable. +
  6. +
  7. + The + BlockAllocationTable +
  8. +
  9. + The XBAT blocks created by the + HeaderBlock, if any. +
  10. +
+
+
+ +
+ PropertyTable preWrite scenario diagram +

+ PropertyTable preWrite scenario diagram +

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
StepDescription
1The + PropertyTable + calls + setIndex + for each of its + Property + instances, so that each Property now knows its index within the PropertyTable's List + of Property instances. +
2The + PropertyTable + requests the + PropertyBlock + class to create an array of + PropertyBlock + instances. +
3The + PropertyBlock + calculates the number of empty + Property + instances it needs to create and creates them. The algorithm for the number to create is: +
+ +
4The + PropertyBlock + creates the required number of + PropertyBlock + instances from the + List + of + Property + instances, including the newly created empty + Property + instances. +
5The + PropertyTable + calls + preWrite + on each of its + Property + instances. For + DocumentProperty + instances, this call is a no-op. For the RootProperty, the + action taken is shown in the RootProperty preWrite scenario + diagram. +
+
+ +
+ RootProperty preWrite scenario diagram +

+ RootProperty preWrite scenario diagram +

+ + + + + + + + + + + + + + + + + + +
StepDescription
1The + RootProperty + sets its child property with the index of the child Property that is + first in its List of children. +
2The + RootProperty + sets its child's next property field with the index of the child's next sibling in the + RootProperty's + List + of children. If the child is the last in the + List, its next property field is set to -1. + These two steps are repeated for each File in + the + RootProperty's + List + of children. +
3The + RootProperty + sets its child's previous property field with a value of + -1. +
+
+
+ +
\ No newline at end of file diff --git a/src/documentation/content/xdocs/components/poifs/embeded.xml b/src/documentation/content/xdocs/components/poifs/embeded.xml new file mode 100644 index 0000000000..30852e199d --- /dev/null +++ b/src/documentation/content/xdocs/components/poifs/embeded.xml @@ -0,0 +1,95 @@ + + + + +
+ Apache POI™ - POIFS - Documents embedded in other documents + Overview + + + + +
+ +
Overview +

It is possible for one OLE 2 based document to have other + OLE 2 documents embedded in it. For example, an Excel file + may have a Word document and a PowerPoint slideshow + embedded as part of it.

+

Normally, these other documents are stored in subdirectories + of the OLE 2 (POIFS) filesystem. The exact location of the + embedded documents will vary depending on the type of the + master document, and the exact directory names will differ + each time. To figure out exactly which directory to look + in, you will either need to process the appropriate OLE 2 + linking entry in the master document, or simple iterate + over all the directories in the filesystem.

+

As a general rule, you will find the same OLE 2 entries + in the subdirectories, as you would've found at the root + of the filesystem were a document to not be embedded.

+ +
Files embedded in Excel +

Excel normally stores embedded files in subdirectories + of the filesystem root. Typically these subdirectories + are named starting with MBD, with 8 hex characters following.

+
+ +
Files embedded in Word +

Word normally stores embedded files in subdirectories + of the ObjectPool directory, itself a subdirectory of the + filesystem root. Typically these subdirectories and named + starting with an underscore, followed by 10 numbers.

+
+ +
Files embedded in PowerPoint +

PowerPoint does not normally store embedded files + in the OLE2 layer. Instead, they are held within records + of the main PowerPoint file. +
See the HSLF Tutorial + for how to retrieve embedded OLE objects from a presentation

+
+
+ +
Listing POIFS contents +

POIFS provides a simple tool for listing the contents of + OLE2 files. This can allow you to see what your POIFS file + contents, and hence if it has any embedded documents in it, + and where.

+

The tool to use is org.apache.poi.poifs.dev.POIFSLister. + This tool may be run from the command line, and takes a filename + as its parameter. It will print out all the directories and + files contained within the POIFS file.

+
+ +
Opening embedded files +

All of the POIDocument classes (HSSFWorkbook, HSLFSlideShow, + HWPFDocument and HDGFDiagram) can either be opened from + a POIFSFileSystem, or from a specific directory within a + POIFSFileSystem. So, to open embedded files, simply locate the + appropriate DirectoryNode that represents the subdirectory + of interest, and pass this + the overall POIFSFileSystem to + the constructor.

+

I you want to extract the textual contents of the embedded file, + then open the appropriate POIDocument, and then pass this to + the extractor class, instead of simply passing the POIFSFilesystem + to the extractor.

+
+ +
diff --git a/src/documentation/content/xdocs/components/poifs/fileformat.xml b/src/documentation/content/xdocs/components/poifs/fileformat.xml new file mode 100644 index 0000000000..0452c9adc3 --- /dev/null +++ b/src/documentation/content/xdocs/components/poifs/fileformat.xml @@ -0,0 +1,703 @@ + + + + +
+ POIFS File System Internals + + + +
+ +
POIFS File System Internals +
Introduction +

POIFS file systems are essentially normal files stored on a + Java-compatible platform's native file system. They are + typically identified by names ending in a four character + extension noting what type of data they contain. For + example, a file ending in ".xls" would likely + contain spreadsheet data, and a file ending in + ".doc" would probably contain a word processing + document. POIFS file systems are called "file + system", because they contain multiple embedded files + in a manner similar to traditional file systems. Along + functional lines, it would be more accurate to call these + POIFS archives. For the remainder of this document it is + referred to as a file system in order to avoid confusion + with the "files" it contains.

+

POIFS file systems are compatible with those document + formats used by a well-known software company's popular + office productivity suite and programs outputting + compatible data. Because the POIFS file system does not + provide compression, encryption or any other worthwhile + feature, its not a good choice unless you require + interoperability with these programs.

+

The POIFS file system does not encode the documents + themselves. For example, if you had a word processor file + with the extension ".doc", you would actually + have a POIFS file system with a document file archived + inside of that file system.

+

Note - this document is a good overview and explanation of + the file format, but for the very nitty-gritty details, + you should refer to + [MS-CFB].pdf + in the (now public) Microsoft Documentation.

+
+
Document Conventions +

This document utilizes the numeric types as described by + the Java Language Specification, which can be found at + https://java.sun.com. In + short:

+
    +
  • A byte is an 8 bit signed integer ranging from + -128 to 127.
  • +
  • A short is a 16 bit signed integer ranging from + -32768 to 32767
  • +
  • An int is a 32 bit signed integer ranging from + -2147483648 to 2147483647
  • +
  • A long is a 64 bit signed integer ranging from + -9.22E18 to 9.22E18.
  • +
+

The Java Language Specification spells out a number of + other types that are not referred to by this document.

+

Where this document makes references to "endian + conversion" it is referring to the byte order of + stored numbers. Numbers in "little-endian order" + are stored with the least significant byte first. In + order to properly read a short, for example, you'd read two + bytes and then shift the second byte 8 bits to the left + before performing an or operation to it + against the first byte. The following code illustrates this + method:

+ +public int getShort (byte[] rec) +{ + return ((rec[1] << 8) | (rec[0] & 0x00ff)); +} +
+
File System Walkthrough +

This is a walkthrough of a POIFS file system and how it is + put together. It is not intended to give a concise + description but to give a "big picture" of the + general structure and how it's interpreted.

+

A POIFS file system begins with a header. This header + identifies locations in the file by function and provides a + sanity check identifying a file as a POIFS file system.

+

The first 64 bits of the header compose a magic number + identifier. This identifier tells the client software + that this is indeed a POIFS file system and that it should + be treated as such. This is a "sanity check" to + make sure this is a POIFS file system and not some other + format. The header also contains an array of block + numbers. These block numbers refer to blocks in the + file. When these blocks are read together they form the + Block Allocation Table. The header also contains a + pointer to the first element in the property table, + also known as the root element, and a pointer to the + small Block Allocation Table (SBAT).

+

The block allocation table or BAT, along with + the property table, specify which blocks in the file + system belong to which files. After the header block, the + file system is divided into identically sized blocks of + data, numbered from 0 to however many blocks there are in + the file system. For each file in the file system, its + entry in the property table includes the index of the first + block in the array of blocks. Each block's index into the + array of blocks is also its index into the BAT, and the + integer value stored at that index in the BAT gives the + index of the next block in the array (and thus the index of + the next BAT value). A special value is stored in the BAT + to indicate "end of file".

+

The property table is essentially the directory + storage for the file system. It consists of the name of the + file or directory, its start block in both the file + system and BAT, and its actual size. The first + property in the property table is the root + element. It has two purposes: to be a directory entry + (the root of the directory tree, to be specific), and to + hold the start block for the small block data.

+

Small block data is a special file that contains the data + for small files (less than 4K bytes). It subdivides its + blocks into smaller blocks and there is a special small + block allocation table that, like the main BAT for larger + files, is used to map a small file to its small blocks.

+
+
Header Block +

The POIFS file system begins with a header + block. The first 64 bits of the header form a long + file type id or magic number identifier of + 0xE11AB1A1E011CFD0L. This is basically a + sanity check. If this isn't the first thing in the header + (and consequently the file system) then this is not a + POIFS file system and should be read with some other + library.

+

It's important to know the most important parts of the + header. These are discussed in the rest of this + section.

+
BATs +

At offset 0x2C is an int specifying the number + of elements in the BAT array. The array at + 0x4C an array of ints. This array contains the + indices of every block in the Block Allocation + Table.

+
+
XBATs +

Very large POIFS archives may have more blocks than can + be addressed by the BAT blocks enumerated in the header + block. How large? Well, the BAT array in the header can + contain up to 109 BAT block indices; each BAT block + references up to 128 blocks, and each block is 512 + bytes, so we're talking about 109 * 128 * 512 = + 6.8MB. That's a pretty respectable document! But, you + could have much more data than that, and in today's + world of cheap gigabyte drives, why not? So, the BAT + may be extended in that event. The integer value at + offset 0x44 of the header is the index of the + first extended BAT (XBAT) block. At offset + 0x48 of the header, there is an int value that + specifies how many XBAT blocks there are. The XBAT + blocks begin at the specified index into the array of + blocks making up the POIFS file system, and are chained + for the specified count of XBAT blocks.

+

Each XBAT block contains the indices of up to 127 BAT + blocks, so the document size can be expanded by another + ~8MB for each XBAT block. The BAT blocks indexed by an + XBAT block are appended to the end of the list of BAT + blocks enumerated in the header block. Thus the BAT + blocks enumerated in the header block are BAT blocks 0 + through 108, the BAT blocks enumerated in the first + XBAT block are BAT blocks 109 through 235, the BAT + blocks enumerated in the second XBAT block are BAT + blocks 236 through 362, and so on.

+

While a normal BAT block holds 128 entries, each XBAT + only references 127 BAT blocks. The last, 128th entry + in an XBAT is the offset to the next XBAT block in the + chain (or -1 if this is the last XBAT).

+

Through the use of XBAT blocks, the limit on the + overall document size is that imposed by the 4-byte + block indices; if the indices are unsigned ints, the + maximum file size is 2 terabytes, 1 terabyte if the + indices are treated as signed ints. Either way, I have + yet to see a disk drive large enough to accommodate + such a file on the shelves at the local office supply + stores.

+
+
SBATs +

If a file contained in a POIFS archive is smaller than + 4096 bytes, it is stored in small blocks. Small blocks + are 64 bytes in length and are contained within big + blocks, up to 8 to a big block. As the main BAT is used + to navigate the array of big blocks, so the small + block allocation table is used to navigate the + array of small blocks. The SBAT's start block index is + found at offset 0x3C of the header block, and + remaining blocks constituting the SBAT are found by + walking the main BAT as if it were an ordinary file in + the POIFS file system (this process is described + below).

+
+
Property Table Start Index +

An integer at address 0x30 specifies the start + index of the property table. This integer is specified + as a "block index". The Property Table + is stored, as is almost everything in a POIFS file + system, in big blocks and walked via the BAT. The + Property Table is described below.

+
+
+
Property Table +

The property table is essentially nothing more than the + directory system. Properties are 128 byte records + contained within the 512 byte blocks. The first property + is always the Root Entry. The following applies to + individual properties within a property table:

+
    +
  • At offset 0x00 in the property is the + "name". This is stored as an + uncompressed 16 bit unicode string. In short every + other byte corresponds to an "ASCII" + character. The size of this string is stored at offset + 0x40 (string size) as a short.
  • +
  • At offset 0x42 is the property type + (byte). The type is 1 for directory, 2 for file or 5 + for the Root Entry.
  • +
  • At offset 0x43 is the node color + (byte). The color is either 1, (black), or 0, + (red). Properties are apparently meant to be arranged + in a red-black binary tree, subject to the following + rules: +
      +
    1. The root of the tree is always black
    2. +
    3. Two consecutive nodes cannot both be red
    4. +
    5. A property is less than another property if its + name length is less than the other property's name + length
    6. +
    7. If two properties have the same name length, the + sort order is determined by the sort order of the + properties' names.
    8. +
  • +
  • At offset 0x44 is the index (int) of the + previous property.
  • +
  • At offset 0x48 is the index (int) of the + next property.
  • +
  • At offset 0x4C is the index (int) of the + first directory entry. This is used by + directory entries.
  • +
  • At offset 0x74 is an integer giving the + start block for the file described by this + property. This index corresponds to an index in the + array of indices that is the Block Allocation Table + (or the Small Block Allocation Table) as well as the + index of the first block in the file. This is used by + files and the root entry.
  • +
  • At offset 0x78 is an integer giving the total + actual size of the file pointed at by this + property. If the file size is less than 4096, the file + is stored in small blocks and the SBAT is used to walk + the small blocks making up the file. If the file size + is 4096 or larger, the file is stored in big blocks + and the main BAT is used to walk the big blocks making + up the file. The exception to this rule is the Root + Entry, which, regardless of its size, is + always stored in big blocks and the main BAT is + used to walk the big blocks making up this special + file.
  • +
+
+
Root Entry +

The Root Entry in the Property Table + contains the information necessary to read and write + small files, which are files less than 4096 bytes + long. The start block field of the Root Entry is the + start index of the Small Block Array, which is + read like any other file in the POIFS file system. Since + the SBAT cannot be used without the Small Block Array, + the Root Entry MUST be read or written using the Block + Allocation Table. The blocks making up the Small + Block Array are divided into 64-byte small blocks, up to + the size indicated in the Root Entry (which should always + be a multiple of 64).

+
+
Walking the Nodes of the Property Table +

The individual properties form a directory tree, with the + Root Entry as the directory tree's root, as shown + in the accompanying drawing. Note the numbers in + parentheses in each node; they represent the node's index + in the array of properties. The NEXT_PROP, + PREVIOUS_PROP, and CHILD_PROP fields hold + these indices, and are used to navigate the tree.

+

property set

+

Each directory entry (i.e., a property whose type is + directory or root entry) uses its + CHILD_PROP field to point to one of its + subordinate (child) properties. It doesn't seem to matter + which of its children it points to. Thus in the previous + drawing, the Root Entry's CHILD_PROP field may contain 1, + 4, or the index of one of its other children. Similarly, + the directory node (index 1) may have, in its CHILD_PROP + field, 2, 3, or the index of one of its other + children.

+

The children of a given directory property point to each + other in a similar fashion by using their + NEXT_PROP and PREVIOUS_PROP fields.

+

Unused NEXT_PROP, PREVIOUS_PROP, and + CHILD_PROP fields contain the marker value of + -1. All file properties have a value of -1 for their + CHILD_PROP fields for example.

+
+
Block Allocation Table +

The BAT blocks are pointed at by the bat array + contained in the header and supplemented, if necessary, + by the XBAT blocks. These blocks form a large + table of integers. These integers are block numbers. The + Block Allocation Table holds chains of integers. + These chains are terminated with -2. The elements in + these chains refer to blocks in the files. The starting + block of a file is NOT specified in the BAT. It is + specified by the property for a given file. The + elements in this BAT are both the block number (within + the file minus the header) and the number of the + next BAT element in the chain. This can be thought of as + a linked list of blocks. The BAT array contains the links + from one block to the next, including the end of chain + marker.

+

Here's an example: Let's assume that the BAT begins as + follows:

+

BAT[ 0 ] = 2

+

BAT[ 1 ] = 5

+

BAT[ 2 ] = 3

+

BAT[ 3 ] = 4

+

BAT[ 4 ] = 6

+

BAT[ 5 ] = -2

+

BAT[ 6 ] = 7

+

BAT[ 7 ] = -2

+

...

+

Now, if we have a file whose Property Table entry says it + begins with index 0, we walk the BAT array and see that + the file consists of blocks 0 (because the start block is + 0), 2 (because BAT[ 0 ] is 2), 3 (BAT[ 2 ] is 3), 4 (BAT[ + 3 ] is 4), 6 (BAT[ 4 ] is 6), and 7 (BAT[ 6 ] is 7). It + ends at block 7 because BAT[ 7 ] is -2, which is the end + of chain marker.

+

Similarly, a file beginning at index 1 consists of + blocks 1 and 5.

+

Other special numbers in a BAT array are:

+
    +
  • -1, which indicates an unused block
  • +
  • -3, which indicates a "special" block, such + as a block used to make up the Small Block Array, the + Property Table, the main BAT, or the SBAT
  • +
+
+
File System Structures +

The following outlines the basic file system structures.

+
Header (block 1) -- 512 (0x200) bytes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescriptionOffsetLengthDefault value or const
FILETYPEMagic number identifying this as a POIFS file + system.0x0000Long0xE11AB1A1E011CFD0
UK1Unknown constant0x0008Integer0
UK2Unknown Constant0x000CInteger0
UK3Unknown Constant0x0014Integer0
UK4Unknown Constant (revision?)0x0018Short0x003B
UK5Unknown Constant (version?)0x001AShort0x0003
UK6Unknown Constant0x001CShort-2
LOG_2_BIG_BLOCK_SIZELog, base 2, of the big block size0x001EShort9 (2 ^ 9 = 512 bytes)
LOG_2_SMALL_BLOCK_SIZELog, base 2, of the small block size0x0020Integer6 (2 ^ 6 = 64 bytes)
UK7Unknown Constant0x0024Integer0
UK8Unknown Constant0x0028Integer0
BAT_COUNTNumber of elements in the BAT array0x002CIntegerrequired
PROPERTIES_STARTBlock index of the first block of the property + table0x0030Integerrequired
UK9Unknown Constant0x0034Integer0
UK10Unknown Constant0x0038Integer0x00001000
SBAT_STARTBlock index of first big block containing the small + block allocation table (SBAT)0x003CInteger-2
SBAT_Block_CountNumber of big blocks holding the SBAT0x0040Integer1
XBAT_STARTBlock index of the first block in the Extended Block + Allocation Table (XBAT)0x0044Integer-2
XBAT_COUNTNumber of elements in the Extended Block Allocation + Table (to be added to the BAT)0x0048Integer0
BAT_ARRAYArray of block indices constituting the Block + Allocation Table (BAT)0x004C, 0x0050, 0x0054 ... 0x01FCInteger[]-1 for unused elements, at least first element must + be filled.
N/AHeader block data not otherwise described in this + tableN/AN/A-1
+
+
+ Block Allocation Table Block -- 512 (0x200) bytes + + + + + + + + + + + + + + + +
+ Field + + Description + + Offset + + Length + + Default value or const +
BAT_ELEMENTAny given element in the BAT block0x0000, 0x0004, 0x0008, ... 0x01FCInteger + -1 = unused
+ -2 = end of chain
+ -3 = special (e.g., BAT block)
+ All other values point to the next element in the + chain and the next index of a block composing the + file. +
+
+
Property Block -- 512 (0x200) byte block + + + + + + + + + + + + + + + +
FieldDescriptionOffsetLengthDefault value or const
Properties[]This block contains the properties.0x0000, 0x0080, 0x0100, 0x0180128 bytesAll unused space is set to -1.
+
+
Property -- 128 (0x80) byte block + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescriptionOffsetLengthDefault value or const
NAMEA unicode null-terminated uncompressed 16bit string + (lose the high bytes) containing the name of the + property.0x00, 0x02, 0x04, ... 0x3EShort[]0x0000 for unused elements, field required, 32 + (0x40) element max
NAME_SIZENumber of characters in the NAME field0x40ShortRequired
PROPERTY_TYPEProperty type (directory, file, or root)0x42Byte1 (directory), 2 (file), or 5 (root entry)
NODE_COLORNode color0x43Byte0 (red) or 1 (black)
PREVIOUS_PROPPrevious property index0x44Integer-1
NEXT_PROPNext property index0x48Integer-1
CHILD_PROPFirst child property index0x4cInteger-1
SECONDS_1Seconds component of the created timestamp?0x64Integer0
DAYS_1Days component of the created timestamp?0x68Integer0
SECONDS_2Seconds component of the modified timestamp?0x6CInteger0
DAYS_2Days component of the modified timestamp?0x70Integer0
START_BLOCKStarting block of the file, used as the first block + in the file and the pointer to the next block from + the BAT0x74IntegerRequired
SIZEActual size of the file this property points + to. (used to truncate the blocks to the real + size).0x78Integer0
+
+
+
+ +
diff --git a/src/documentation/content/xdocs/components/poifs/how-to.xml b/src/documentation/content/xdocs/components/poifs/how-to.xml new file mode 100644 index 0000000000..8899994806 --- /dev/null +++ b/src/documentation/content/xdocs/components/poifs/how-to.xml @@ -0,0 +1,649 @@ + + + +
+ How To Use the POIFS APIs + + + +
+ +
+ How To Use the POIFS APIs +

This document describes how to use the POIFS APIs to read, write, and modify files that employ a + POIFS-compatible data structure to organize their content. +

+
+ Target Audience +

This document is intended for Java developers who need to use the POIFS APIs to read, write, or + modify files that employ a POIFS-compatible data structure to organize their content. It is not + necessary for developers to understand the POIFS data structures, and an explanation of those data + structures is beyond the scope of this document. It is expected that the members of the target + audience will understand the rudiments of a hierarchical file system, and familiarity with the event + pattern employed by Java APIs such as AWT would be helpful. +

+
+
+ Glossary +

This document attempts to be consistent in its terminology, which is defined here:

+
+
Directory
+
A special file that may contain other directories and documents.
+
DirectoryEntry
+
Representation of a directory within another directory.
+
Document
+
A file containing data, such as word processing data or a spreadsheet workbook.
+
DocumentEntry
+
Representation of a document within a directory.
+
Entry
+
Representation of a file in a directory.
+
File
+
A named entity, managed and contained by the file system.
+
File System
+
The POIFS data structures, plus the contained directories and documents, which are maintained in + a hierarchical directory structure. +
+
Root Directory
+
The directory at the base of a file system. All file systems have a root directory. The POIFS + APIs will not allow the root directory to be removed or renamed, but it can be accessed for the + purpose of reading its contents or adding files (directories and documents) to it. +
+
+
+
+ +
+ The different ways of working with POIFS +

The POIFS API provides ways to read, modify and write files and streams that employ a POIFS-compatible + data structure to organize their content. The following use cases are covered: +

+ +
+ +
+ Reading a File System + +

This section covers reading a file system. There are two ways to read a file system; these techniques are + sketched out in the following table, and then explained in greater depth in the sections following the + table. +

+
+
Conventional Reading with POIFSFileSystem
+
+
    +
  • Simpler API similar to reading a conventional file system.
  • +
  • Can read documents in any order.
  • +
  • Well tested read and write support.
  • +
  • If created from an InputStream, all files are resident in memory. (If created + from a File, only certain key structures are) +
  • +
+
+
Event-Driven Reading
+
+
    +
  • Reduced footprint -- only the documents you care about are processed.
  • +
  • Improved performance -- no time is wasted reading the documents you're not + interested in. +
  • +
  • More complicated API.
  • +
  • Need to know in advance which documents you want to read.
  • +
  • No control over the order in which the documents are read.
  • +
  • No way to go back and get additional documents except to re-read the file + system, which may not be possible, e.g., if the file system is being read from an input + stream that lacks random access support. +
  • +
+
+
+ +
+ Conventional Reading with POIFSFileSystem + +

In this technique for reading, certain key structures are loaded into memory, and the entire + directory tree can be walked by the application, reading specific documents at leisure. +

+

If you create a POIFSFileSystem instance from a File, the memory footprint is very small. However, if + you createa a POIFSFileSystem instance from an input stream, then the whole contents must be + buffered into memory to allow random access. As such, you should budget on memory use of up to 20% + of the file size when using a File, or up to 120% of the file size when using an InputStream. +

+ +
+ Preparation +

Before an application can read a file from the file system, the file system needs to be opened + and core parts processed. This is done using the + org.apache.poi.poifs.filesystem.POIFSFileSystem + class. Once the file system has been loaded into memory, the application may need the root + directory. The following code fragment will accomplish this preparation stage: +

+ +

Assuming no exception was thrown, the file system can then be read.

+
+
+ Reading the Directory Tree +

Once the file system has been loaded into memory and the root directory has been obtained, the + root directory can be read. The following code fragment shows how to read the entries in an + org.apache.poi.poifs.filesystem.DirectoryEntry + instance: +

+ +
+
+ Reading a Specific Document +

There are a couple of ways to read a document, depending on whether the document resides in the + root directory or in another directory. Either way, you will obtain an + org.apache.poi.poifs.filesystem.DocumentInputStream + instance. +

+
+ DocumentInputStream +

The DocumentInputStream class is a simple implementation of InputStream that makes a few + guarantees worth noting: +

+
    +
  • + available() + always returns the number of bytes in the document from your current position in the + document. +
  • +
  • + markSupported() + returns true. +
  • +
  • + mark(int limit) + ignores the limit parameter; basically the method marks the current position in the + document. +
  • +
  • + reset() + takes you back to the position when mark() was last called, or to the + beginning of the document if mark() has not been called. +
  • +
  • + skip(long n) + will take you to your current position + n (but not past the end of the document). +
  • +
+

The behavior of available means you can read in a document in a single read call + like this: +

+ +

The combination of mark, reset, and skip provide the + basic mechanisms needed for random access of the document contents. +

+
+
+ Reading a Document From the Root Directory +

If the document resides in the root directory, you can obtain a DocumentInputStream + like this: +

+ +
+
+ Reading a Document From an Arbitrary Directory +

A more generic technique for reading a document is to obtain an + org.apache.poi.poifs.filesystem.DirectoryEntry + instance for the directory containing the desired document (recall that you can use + getRoot() + to obtain the root directory from its file system). From that DirectoryEntry, you can + then obtain a DocumentInputStream like this: +

+ +
+
+
+ +
+ Event-Driven Reading + +

The event-driven API for reading documents is a little more complicated and requires that your + application know, in advance, which files it wants to read. The benefit of using this API is that + each document is in memory just long enough for your application to read it, and documents that you + never read at all are not in memory at all. When you're finished reading the documents you wanted, + the file system has no data structures associated with it at all and can be discarded. +

+
+ Preparation +

The preparation phase involves creating an instance of + org.apache.poi.poifs.eventfilesystem.POIFSReader + and to then register one or more + org.apache.poi.poifs.eventfilesystem.POIFSReaderListener + instances with the POIFSReader. +

+ +
+
+ POIFSReaderListener +

+ org.apache.poi.poifs.eventfilesystem.POIFSReaderListener + is an interface used to register for documents. When a matching document is read by the + org.apache.poi.poifs.eventfilesystem.POIFSReader, the POIFSReaderListener instance + receives an org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent instance, which + contains an open DocumentInputStream and information about the document. +

+

A POIFSReaderListener instance can register for individual documents, or it can + register for all documents; once it has registered for all documents, subsequent (and previous!) + registration requests for individual documents are ignored. There is no way to unregister + a POIFSReaderListener. +

+

Thus, it is possible to register a single POIFSReaderListener for multiple documents + - one, some, or all documents. It is guaranteed that a single POIFSReaderListener will + receive exactly one notification per registered document. There is no guarantee as to the order + in which it will receive notification of its documents, as future implementations of + POIFSReader + are free to change the algorithm for walking the file system's directory structure. +

+

It is also permitted to register more than one POIFSReaderListener for the same + document. There is no guarantee of ordering for notification of POIFSReaderListener instances + that have registered for the same document when POIFSReader processes that + document. +

+

It is guaranteed that all notifications occur in the same thread. A future enhancement may be + made to provide multi-threaded notifications, but such an enhancement would very probably be + made in a new reader class, a ThreadedPOIFSReader perhaps. +

+

The following describes the three ways to register a POIFSReaderListener for a + document or set of documents: +

+
+
registers listener for all documents. +
+
registerListener(POIFSReaderListener listener) +
+
registers listener for a document with the specified name in the root + directory. +
+
registerListener(POIFSReaderListener listener, String name) +
+
registers listener for a document with the specified name in the directory + described by + path +
+
registerListener(POIFSReaderListener listener, POIFSDocumentPath path, + String name) +
+
+
+
+ POIFSDocumentPath +

The org.apache.poi.poifs.filesystem.POIFSDocumentPath class is used to describe a + directory in a POIFS file system. Since there are no reserved characters in the name of a file + in a POIFS file system, a more traditional string-based solution for describing a directory, + with special characters delimiting the components of the directory name, is not feasible. The + constructors for the class are used as follows: +

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ Constructor example + + Directory described +
new POIFSDocumentPath()The root directory.
new POIFSDocumentPath(null)The root directory.
new POIFSDocumentPath(new String[ 0 ])The root directory.
new POIFSDocumentPath(new String[ ] { "foo", "bar"} )in Unix terminology, "/foo/bar".
new POIFSDocumentPath(new POIFSDocumentPath(new String[] { "foo" }), new String[ ] { + "fu", "bar"} ) + in Unix terminology, "/foo/fu/bar".
+
+
+ Processing POIFSReaderEvent Events +

Processing org.apache.poi.poifs.eventfilesystem.POIFSReaderEvent events is + relatively easy. After all of the POIFSReaderListener instances have been + registered with POIFSReader, the POIFSReader.read(InputStream stream) method + is called. +

+

Assuming that there are no problems with the data, as the POIFSReader processes the + documents in the specified InputStream's data, it calls registered + POIFSReaderListener + instances' processPOIFSReaderEvent method with a POIFSReaderEvent + instance. +

+

The POIFSReaderEvent instance contains information to identify the document (a + POIFSDocumentPath + object to identify the directory that the document is in, and the document name), and an + open DocumentInputStream instance from which to read the document. +

+
+
+
+ +
+ Writing a File System + +

Writing a file system is very much like reading a file system in that there are multiple ways to do so. + You can load an existing file system into memory and modify it (removing files, renaming files) and/or + add new files to it, and write it, or you can start with a new, empty file system: +

+ + POIFSFileSystem fs = new POIFSFileSystem(); + +
+ The Naming of Names +

There are two restrictions on the names of files in a file system that must be considered when + creating files: +

+
    +
  1. The name of the file must not exceed 31 characters. If it does, the POIFS API will silently + truncate the name to fit. +
  2. +
  3. The name of the file must be unique within its containing directory. This seems pretty obvious, + but if it isn't spelled out, there'll be hell to pay, to be sure. Uniqueness, of course, is + determined after the name has been truncated, if the original name was too long to + begin with. +
  4. +
+
+
+ Creating a Document +

A document can be created by acquiring a DirectoryEntry and calling one of the two + createDocument + methods: +

+ +
+
createDocument(String name, InputStream stream)
+
+
    +
  • Simple API
  • +
  • Increased memory footprint (document is in memory until file system is + written). +
  • +
+
+
createDocument(String name, int size, POIFSWriterListener writer)
+
+
    +
  • Decreased memory footprint (only very small documents are held in memory, + and then only for a short time). +
  • +
  • More complex API.
  • +
  • Determining document size in advance may be difficult.
  • +
  • Lose control over when document is to be written.
  • +
+
+
+ +

Unlike reading, you don't have to choose between the in-memory and event-driven writing models; both + can co-exist in the same file system. +

+

Writing is initiated when the POIFSFileSystem instance's writeFilesystem() method + is called with an OutputStream to write to. +

+

The event-driven model is quite similar to the event-driven model for reading, in that the file + system calls your org.apache.poi.poifs.filesystem.POIFSWriterListener when it's time to + write your document, just as the POIFSReader calls your POIFSReaderListener + when it's time to read your document. Internally, when writeFilesystem() is + called, the final POIFS data structures are created and are written to the specified + OutputStream. When the file system needs to write a document out that was created with + the event-driven model, it calls the POIFSWriterListener back, calling its + processPOIFSWriterEvent() + method, passing an org.apache.poi.poifs.filesystem.POIFSWriterEvent instance. + This object contains the POIFSDocumentPath and name of the document, its size, and an + open org.apache.poi.poifs.filesystem.DocumentOutputStream to which to write. A + DocumentOutputStream + is a wrapper over the OutputStream that was provided to the + POIFSFileSystem + to write to, and has the responsibility of making sure that the document your application + writes fits within the size you specified for it. +

+

If you are using a POIFSFileSystem loaded from a + File + with readOnly set to false, it is also possible to do an in-place write. Simply call + writeFilesystem() + to have the (limited) in-memory structures synced with the disk, then close() to + finish. +

+
+
+ Creating a Directory +

Creating a directory is similar to creating a document, except that there's only one way to do so: +

+ + DirectoryEntry createdDir = existingDir.createDirectory(name); + +
+
+ Using POIFSFileSystem Directly To Create a Document Or Directory +

As with reading documents, it is possible to create a new document or directory in the root directory + by using convenience methods of POIFSFileSystem. +

+ + + + + + + + + + + + + + + + + +
+ DirectoryEntry Method Signature + + POIFSFileSystem Method Signature +
createDocument(String name, InputStream stream)createDocument(InputStream stream, String name)
createDocument(String name, int size, POIFSWriterListener writer)createDocument(String name, int size, POIFSWriterListener writer)
createDirectory(String name)createDirectory(String name)
+
+
+ +
+ Modifying a File System + +

It is possible to modify an existing POIFS file system, whether it's one your application has loaded into + memory, or one which you are creating on the fly. +

+
+ Removing a Document +

Removing a document is simple: you get the Entry corresponding to the document and call + its delete() method. This is a boolean method, but should always return + true, indicating that the operation succeeded. +

+
+
+ Removing a Directory +

Removing a directory is also simple: you get the Entry corresponding to the directory + and call its delete() method. This is a boolean method, but, unlike deleting a + document, may not always return true, indicating that the operation succeeded. Here are + the reasons why the operation may fail: +

+
    +
  • The directory still has files in it (to check, call isEmpty() on its + DirectoryEntry; is the return value false?) +
  • +
  • The directory is the root directory. You cannot remove the root directory.
  • +
+
+
+ Changing a File's contents +

There are two ways available to change the contents of an existing file within a POIFS file system. + One is using a DocumentOutputStream, the other is with + POIFSDocument.replaceContents +

+

If you have available to you an InputStream to read the new File contents from, then the + easiest way is via + POIFSDocument.replaceContents. You would do something like: +

+ +

Alternately, if you either have a byte array, or you need to write as you go along, then the + OutputStream interface provided by + DocumentOutputStream + will likely be a better bet. Your code would want to look somewhat like: +

+ +

For an example of an in-place change to one stream within a file, you can see the example + + org/apache/poi/hpsf/examples/ModifyDocumentSummaryInformation.java + +

+
+
+ Renaming a File +

Regardless of whether the file is a directory or a document, it can be renamed, with one exception - + the root directory has a special name that is expected by the components of a major software + vendor's office suite, and the POIFS API will not let that name be changed. Renaming is done by + acquiring the file's corresponding Entry instance and calling its renameTo method, + passing in the new name. +

+

Like delete, renameTo returns true if the operation succeeded, + otherwise false. Reasons for failure include these: +

+
    +
  • The new name is the same as another file in the same directory. And don't forget - if the new + name is longer than 31 characters, it will be silently truncated. In its original + length, the new name may have been unique, but truncated to 31 characters, it may not be unique + any longer. +
  • +
  • You tried to rename the root directory.
  • +
+
+
+ +
diff --git a/src/documentation/content/xdocs/components/poifs/index.xml b/src/documentation/content/xdocs/components/poifs/index.xml new file mode 100644 index 0000000000..986419d6f9 --- /dev/null +++ b/src/documentation/content/xdocs/components/poifs/index.xml @@ -0,0 +1,58 @@ + + + + +
+ Apache POI™ - POIFS - Java implementation of the OLE 2 Compound Document format + Overview + + + + +
+ +
Overview +

POIFS is a pure Java implementation of the OLE 2 Compound + Document format.

+

By definition, all APIs developed by the POI project are + based somehow on the POIFS API.

+

A common confusion is on just what POIFS buys you or what OLE + 2 Compound Document format is exactly. POIFS does not buy you + DOC, or XLS, but is necessary to generate or read DOC or XLS + files. You see, all file formats based on the OLE 2 Compound + Document Format have a common structure. The OLE 2 Compound + Document Format is essentially a convoluted archive + format. Think of POIFS as a "zip" library. Once you can get + the data in a zip file you still need to interpret the + data. As a general rule, while all of our formats use + POIFS, most of them attempt to abstract you from it. There + are some circumstances where this is not possible, but as a + general rule this is true.

+

If you're an end user type just looking to generate XLS + files, then you'd be looking for HSSF not POIFS; however, if + you have legacy code that uses MFC property sets, POIFS is + for you! Regardless, you may or may not need to know how to + use POIFS but ultimately if you use technologies that come + from the POI project, you're using POIFS underneath. Perhaps + we should have a branding campaign "POIFS Inside!". ;-)

+ +
+ +
diff --git a/src/documentation/content/xdocs/components/poifs/usecases.xml b/src/documentation/content/xdocs/components/poifs/usecases.xml new file mode 100644 index 0000000000..597f77ef4b --- /dev/null +++ b/src/documentation/content/xdocs/components/poifs/usecases.xml @@ -0,0 +1,653 @@ + + + + +
+ POIFS Use Cases + + + +
+ +
POIFS Use Cases +
Use Case 1: Read existing file system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Primary Actor:POIFS client
Scope:POIFS
Level:Summary
Stakeholders and Interests: + POIFS client- wants to read content of file + system
+ POIFS - understands POIFS file system +
Precondition:None
Minimal Guarantee:None
Main Success Guarantee: + 1. POIFS client requests POIFS to read a POIFS file + system, providing an + InputStream + containing POIFS file system in question.
+ 2. POIFS reads from the + InputStream in + 512 byte blocks.
+ 3. POIFS verifies that the first block begins with + the well known signature + ( + 0xE11AB1A1E011CFD0)
+ 4. POIFS reads the Block Allocation Table from the + first block and, if necessary, from the XBAT + blocks.
+ 5. POIFS obtains the start block of the Property + Table and reads the Property Table (use case 9, + read file)
+ 6. POIFS reads the individual entries in the Property + Table
+ 7. POIFS obtains the start block of the Small Block + Allocation Table and reads the Small Block + Allocation Table (use case 9, read file)
+ 8. POIFS obtains the start block of the Small Block + store from the first entry in the Property Table + and reads the Small Block Array (use case 9, read + file)
+
Extensions: + 2a. If the last block read is not a 512 byte + block, the + InputStream is not that of + a POIFS file system, and POIFS throws an + appropriate exception. +
+ 3a. If the signature is incorrect, the + InputStream is not that of a POIFS + file system, and POIFS throws an appropriate + exception.
+
+
+
Use Case 2: Write file system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Primary Actor:POIFS client
Scope:POIFS
Level:Summary
Stakeholders and Interests: + POIFS client- wants to write file system out.
+ POIFS - knows how to write file system out. +
Precondition: + File system has been read (use case 1, read + existing file system) and subsequently modified + (use case 4, replace file in file system; use case + 5, delete file from file system; or use case 6, + write new file to file system; in any + combination) +
or
+ File system has been created (use case 3, create + new file system) +
Minimal Guarantee:None
Main Success Guarantee: + 1. POIFS client provides an + OutputStream + to write the file system to. +
+ 2. POIFS gets the sizes of the Property Table and + each file in the file system.
+ 3. If any files in the file system requires storage + in a Small Block Array, POIFS creates a Small + Block Array of sufficient size to hold all of the + small files.
+ 4. POIFS calculates the number of big blocks needed + to hold all of the large files, the Property + Table, and, if necessary, the Small Block Array + and the Small Block Allocation Table.
+ 5. POIFS creates a set of big blocks sufficient to + store the Block Allocation Table
+ 6. POIFS creates and writes the header block
+ 7. POIFS writes out the XBAT blocks, if needed.
+ 8. POIFS writes out the Small Block Array, if + needed
+ 9. POIFS writes out the Small Block Allocation Table, + if needed
+ 10. POIFS writes out the Property Table
+ 11. POIFS writes out the large files, if needed
+ 12. POIFS closes the OutputStream. +
Extensions: + 6a. Exceptions writing to the + OutputStream will be propagated back + to the POIFS client. +
+ 7a. Exceptions writing to the + OutputStream will be propagated back + to the POIFS client. +
+ 8a. Exceptions writing to the + OutputStream will be propagated back + to the POIFS client. +
+ 9a. Exceptions writing to the + OutputStream will be propagated back + to the POIFS client. +
+ 10a. Exceptions writing to the + OutputStream will be propagated back + to the POIFS client. +
+ 11a. Exceptions writing to the + OutputStream will be propagated back + to the POIFS client. +
+ 12a. Exceptions closing the + OutputStream will be propagated back + to the POIFS client. +
+
+
+
Use Case 3: Create new file system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Primary Actor:POIFS client
Scope:POIFS
Level:Summary
Stakeholders and Interests: + POIFS client- wants to create a new file + system
+ POIFS - knows how to create a new file system +
Precondition:None
Minimal Guarantee:None
Main Success Guarantee: + POIFS creates an empty Property Table. +
Extensions:None
+
+
Use Case 4: Replace file in file system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Primary Actor:POIFS client
Scope:POIFS
Level:Summary
Stakeholders and Interests: + 1. POIFS client- wants to replace an existing file in + the file system
+ 2. POIFS - knows how to manage the file system +
Precondition: + Either +

+ The file system has been read (use case 1, read + existing file system) and a file has been + extracted from the file system (use case 7, read + existing file from file system) +

or

+ The file system has been created (use case 3, + create new file system) and a file has been + written to the file system (use case 6, write new + file to file system) +
Minimal Guarantee:None
Main Success Guarantee: + 1. POIFS discards storage of the existing file.
+ 2. POIFS updates the existing file's entry in the + Property Table
+ 3. POIFS stores the new file's data +
Extensions: + 1a. POIFS throws an exception if the file does not + exist. +
+
+
Use Case 5: Delete file from file system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Primary Actor:POIFS client
Scope:POIFS
Level:Summary
Stakeholders and Interests: + * POIFS client- wants to remove a file from a file + system
+ * POIFS - knows how to manage the file system +
Precondition: + Either

+ The file system has been read (use case 1, read + existing file system) and a file has been + extracted from the file system (use case 7, read + existing file from file system)
+
+ or
+
+ The file system has been created (use case 3, + create new file system) and a file has been + written to the file system (use case 6, write new + file to file system) +
Minimal Guarantee:None
Main Success Guarantee: + 1. POIFS discards the specified file's storage.
+ 2. POIFS discards the file's Property Table + entry. +
Extensions: + 1a. POIFS throws an exception if the file does not + exist. +
+
+
Use Case 6: Write new file to file system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Primary Actor:POIFS client
Scope:POIFS
Level:Summary
Stakeholders and Interests: + * POIFS client- wants to add a new file to the file + system
+ * POIFS - knows how to manage the file system +
Precondition:The specified file does not yet exist in the file + system
Minimal Guarantee:None
Main Success Guarantee: + 1. The POIFS client provides a file name
+ 2. POIFS creates a new Property Table entry for the + new file
+ 3. POIFS provides the POIFS client with an + OutputStream to write to.
+ 4. The POIFS client writes data to the provided + OutputStream.
+ 5. The POIFS client closes the provided + OutputStream
+ 6. POIFS updates the Property Table entry with the + new file's size +
Extensions: + 1a. POIFS throws an exception if a file with the + specified name already exists in the file + system.
+ 1b. POIFS throws an exception if the file name is + too long. The limit on file name length is 31 + characters. +
+
+
Use Case 7: Read existing file from file system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Primary Actor:POIFS client
Scope:POIFS
Level:Summary
Stakeholders and Interests: + * POIFS client- wants to read a file from the file + system
+ * POIFS - knows how to manage the file system +
Precondition: + * The file system has been read (use case 1, read + existing file system) or has been created and + written to (use case 3, create new file system; + use case 6, write new file to file system).
+ * The specified file exists in the file system. +
Minimal Guarantee:None
Main Success Guarantee: + * The POIFS client provides the name of a file to be read
+ * POIFS provides an InputStream to read from.
+ * The POIFS client reads from the InputStream.
+ * The POIFS client closes the InputStream. +
Extensions:1a. POIFS throws an exception if no file with the + specified name exists.
+
+
Use Case 8: Read file system directory + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Primary Actor:POIFS client
Scope:POIFS
Level:Summary
Stakeholders and Interests: + * POIFS client- wants to know what files exist in + the file system
+ * POIFS - knows how to manage the file system +
Precondition:The file system has been read (use case 1, read + existing file system) or created (use case 3, create + new file system)
Minimal Guarantee:None
Main Success Guarantee: + 1. The POIFS client requests the file system + directory. + 2. POIFS returns an Iterator. The + Iterator will not include the root + entry in the Property Table, and may be an + Iterator over an empty + Collection. +
Extensions:None
+
+
Use Case 9: Read file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Primary Actor:POIFS
Scope:POIFS
Level:Summary
Stakeholders and Interests: + POIFS - POIFS needs to read a file, or something + resembling a file (i.e., the Property Table, the + Small Block Array, or the Small Block Allocation + Table) +
Precondition:None
Minimal Guarantee:None
Main Success Guarantee: + 1. POIFS begins with a start block, a file size, and + a flag indicating whether to use the Big Block + Allocation Table or the Small Block Allocation + Table
+ 2. POIFS returns an InputStream.
+ 3. Reads from the InputStream are + performed by walking the specified Block + Allocation Table and reading the blocks + indicated.
+ 4. POIFS closes the InputStream when + finished reading the file, or its client wants to + close the InputStream. +
Extensions:3a. An exception will be thrown if the specified Block + Allocation Table is corrupt, as evidenced by an index + pointing to a non-existent block, or by a chain + extending past the known size of the file.
+
+
Use Case 10: Rename existing file in the file system + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Primary Actor:POIFS client
Scope:POIFS
Level:Summary
Stakeholders and Interests: + * POIFS client- wants to rename an existing file in + the file system.
+ * POIFS - knows how to manage the file system. +
Precondition: + * The file system is has been read (use case 1, read + existing file system) or has been created and + written to (use case 3, create new file system; + use case 6, write new file to file system.
+ * The specified file exists in the file system.
+ * The new name for the file does not duplicate + another file in the file system. +
Minimal Guarantee:None
Main Success Guarantee: + 1. POIFS updates the Property Table entry for the + specified file with its new name. +
Extensions: + * 1a. If the old file name is not in the file + system, POIFS throws an exception.
+ * 1b. If the new file name already exists in the + file system, POIFS throws an exception.
+ * 1c. If the new file name is too long (the limit is + 31 characters), POIFS throws an exception. +
+
+
+ +
diff --git a/src/documentation/content/xdocs/components/slideshow/how-to-shapes.xml b/src/documentation/content/xdocs/components/slideshow/how-to-shapes.xml new file mode 100644 index 0000000000..f1183c357d --- /dev/null +++ b/src/documentation/content/xdocs/components/slideshow/how-to-shapes.xml @@ -0,0 +1,642 @@ + + + + + +
+ Busy Developers' Guide to HSLF drawing layer + + + +
+ +
Busy Developers' Guide to HSLF drawing layer +
Index of Features + +
+
Features + +
New Presentation + + //create a new empty slide show + HSLFSlideShow ppt = new HSLFSlideShow(); + + //add first slide + HSLFSlide s1 = ppt.createSlide(); + + //add second slide + HSLFSlide s2 = ppt.createSlide(); + + //save changes in a file + FileOutputStream out = new FileOutputStream("slideshow.ppt"); + ppt.write(out); + out.close(); + +
+ +
How to retrieve or change slide size + + HSLFSlideShow ppt = new HSLFSlideShow(new HSLFSlideShowImpl("slideshow.ppt")); + //retrieve page size. Coordinates are expressed in points (72 dpi) + java.awt.Dimension pgsize = ppt.getPageSize(); + int pgx = pgsize.width; //slide width + int pgy = pgsize.height; //slide height + + //set new page size + ppt.setPageSize(new java.awt.Dimension(1024, 768)); + //save changes + FileOutputStream out = new FileOutputStream("slideshow.ppt"); + ppt.write(out); + out.close(); + +
+ +
How to get shapes contained in a particular slide +

+ The following code demonstrates how to iterate over shapes for each slide. +

+ + HSLFSlideShow ppt = new HSLFSlideShow(new HSLFSlideShowImpl("slideshow.ppt")); + // get slides + for (HSLFSlide slide : ppt.getSlides()) { + for (HSLFShape sh : slide.getShapes()) { + // name of the shape + String name = sh.getShapeName(); + + // shapes's anchor which defines the position of this shape in the slide + java.awt.Rectangle anchor = sh.getAnchor(); + + if (sh instanceof Line) { + Line line = (Line) sh; + // work with Line + } else if (sh instanceof HSLFAutoShape) { + HSLFAutoShape shape = (HSLFAutoShape) sh; + // work with AutoShape + } else if (sh instanceof HSLFTextBox) { + HSLFTextBox shape = (HSLFTextBox) sh; + // work with TextBox + } else if (sh instanceof HSLFPictureShape) { + HSLFPictureShape shape = (HSLFPictureShape) sh; + // work with Picture + } + } + } + +
+ +
Drawing a shape on a slide + + To work with graphic objects HSLF uses Java2D classes + that may throw exceptions if graphical environment is not available. In case if graphical environment + is not available, you must tell Java that you are running in headless mode and + set the following system property: java.awt.headless=true + (either via -Djava.awt.headless=true startup parameter or via System.setProperty("java.awt.headless", "true")). + +

+ When you add a shape, you usually specify the dimensions of the shape and the position + of the upper left corner of the bounding box for the shape relative to the upper left + corner of the slide. Distances in the drawing layer are measured in points (72 points = 1 inch). +

+ + HSLFSlideShow ppt = new HSLFSlideShow(); + + HSLFSlide slide = ppt.createSlide(); + + //Line shape + Line line = new Line(); + line.setAnchor(new java.awt.Rectangle(50, 50, 100, 20)); + line.setLineColor(new Color(0, 128, 0)); + line.setLineCompound(LineCompound.DOUBLE); + slide.addShape(line); + + //TextBox + HSLFTextBox txt = new HSLFTextBox(); + txt.setText("Hello, World!"); + txt.setAnchor(new java.awt.Rectangle(300, 100, 300, 50)); + + // use TextRun to work with the text format + HSLFTextParagraph tp = txt.getTextParagraphs().get(0); + tp.setAlignment(TextAlign.RIGHT); + HSLFTextRun rt = tp.getTextRuns().get(0); + rt.setFontSize(32.); + rt.setFontFamily("Arial"); + rt.setBold(true); + rt.setItalic(true); + rt.setUnderlined(true); + rt.setFontColor(Color.red); + + slide.addShape(txt); + + // Autoshape + // 32-point star + HSLFAutoShape sh1 = new HSLFAutoShape(ShapeType.STAR_32); + sh1.setAnchor(new java.awt.Rectangle(50, 50, 100, 200)); + sh1.setFillColor(Color.red); + slide.addShape(sh1); + + //Trapezoid + HSLFAutoShape sh2 = new HSLFAutoShape(ShapeType.TRAPEZOID); + sh2.setAnchor(new java.awt.Rectangle(150, 150, 100, 200)); + sh2.setFillColor(Color.blue); + slide.addShape(sh2); + + FileOutputStream out = new FileOutputStream("slideshow.ppt"); + ppt.write(out); + out.close(); + +
+ +
How to work with pictures + +

+ Currently, HSLF API supports the following types of pictures: +

+
    +
  • Windows Metafiles (WMF)
  • +
  • Enhanced Metafiles (EMF)
  • +
  • JPEG Interchange Format
  • +
  • Portable Network Graphics (PNG)
  • +
  • Macintosh PICT
  • +
+ + + HSLFSlideShow ppt = new HSLFSlideShow(new HSLFSlideShowImpl("slideshow.ppt")); + + // extract all pictures contained in the presentation + int idx = 1; + for (HSLFPictureData pict : ppt.getPictureData()) { + // picture data + byte[] data = pict.getData(); + + PictureData.PictureType type = pict.getType(); + String ext = type.extension; + FileOutputStream out = new FileOutputStream("pict_" + idx + ext); + out.write(data); + out.close(); + idx++; + } + + // add a new picture to this slideshow and insert it in a new slide + HSLFPictureData pd = ppt.addPicture(new File("clock.jpg"), PictureData.PictureType.JPEG); + + HSLFPictureShape pictNew = new HSLFPictureShape(pd); + + // set image position in the slide + pictNew.setAnchor(new java.awt.Rectangle(100, 100, 300, 200)); + + HSLFSlide slide = ppt.createSlide(); + slide.addShape(pictNew); + + // now retrieve pictures containes in the first slide and save them on disk + idx = 1; + slide = ppt.getSlides().get(0); + for (HSLFShape sh : slide.getShapes()) { + if (sh instanceof HSLFPictureShape) { + HSLFPictureShape pict = (HSLFPictureShape) sh; + HSLFPictureData pictData = pict.getPictureData(); + byte[] data = pictData.getData(); + PictureData.PictureType type = pictData.getType(); + FileOutputStream out = new FileOutputStream("slide0_" + idx + type.extension); + out.write(data); + out.close(); + idx++; + } + } + + FileOutputStream out = new FileOutputStream("slideshow.ppt"); + ppt.write(out); + out.close(); + +
+ +
How to set slide title + + HSLFSlideShow ppt = new HSLFSlideShow(); + HSLFSlide slide = ppt.createSlide(); + HSLFTextBox title = slide.addTitle(); + title.setText("Hello, World!"); + + // save changes + FileOutputStream out = new FileOutputStream("slideshow.ppt"); + ppt.write(out); + out.close(); + +

+ Below is the equivalent code in PowerPoint VBA: +

+ + Set myDocument = ActivePresentation.Slides(1) + myDocument.Shapes.AddTitle.TextFrame.TextRange.Text = "Hello, World!" + +
+ +
How to modify background of a slide master + + HSLFSlideShow ppt = new HSLFSlideShow(); + HSLFSlideMaster master = ppt.getSlideMasters().get(0); + + HSLFFill fill = master.getBackground().getFill(); + HSLFPictureData pd = ppt.addPicture(new File("background.png"), PictureData.PictureType.PNG); + fill.setFillType(HSLFFill.FILL_PICTURE); + fill.setPictureData(pd); + +
+
How to modify background of a slide + + HSLFSlideShow ppt = new HSLFSlideShow(); + HSLFSlide slide = ppt.createSlide(); + + // This slide has its own background. + // Without this line it will use master's background. + slide.setFollowMasterBackground(false); + HSLFFill fill = slide.getBackground().getFill(); + HSLFPictureData pd = ppt.addPicture(new File("background.png"), PictureData.PictureType.PNG); + fill.setFillType(HSLFFill.FILL_PATTERN); + fill.setPictureData(pd); + +
+
How to modify background of a shape + + HSLFSlideShow ppt = new HSLFSlideShow(); + HSLFSlide slide = ppt.createSlide(); + + HSLFShape shape = new HSLFAutoShape(ShapeType.RECT); + shape.setAnchor(new java.awt.Rectangle(100, 100, 200, 200)); + HSLFFill fill = shape.getFill(); + fill.setFillType(HSLFFill.FILL_SHADE); + fill.setBackgroundColor(Color.red); + fill.setForegroundColor(Color.green); + + slide.addShape(shape); + +
+ +
How to create bulleted lists + + HSLFSlideShow ppt = new HSLFSlideShow(); + + HSLFSlide slide = ppt.createSlide(); + + HSLFTextBox shape = new HSLFTextBox(); + HSLFTextParagraph tp = shape.getTextParagraphs().get(0); + tp.setBullet(true); + tp.setBulletChar('\u263A'); //bullet character + tp.setIndent(0.); //bullet offset + tp.setLeftMargin(50.); //text offset (should be greater than bullet offset) + HSLFTextRun rt = tp.getTextRuns().get(0); + shape.setText( + "January\r" + + "February\r" + + "March\r" + + "April"); + rt.setFontSize(42.); + slide.addShape(shape); + + shape.setAnchor(new java.awt.Rectangle(50, 50, 500, 300)); //position of the text box in the slide + slide.addShape(shape); + + FileOutputStream out = new FileOutputStream("bullets.ppt"); + ppt.write(out); + out.close(); + +
+ +
How to read hyperlinks from a slide show + + FileInputStream is = new FileInputStream("slideshow.ppt"); + HSLFSlideShow ppt = new HSLFSlideShow(is); + is.close(); + + for (HSLFSlide slide : ppt.getSlides()) { + //read hyperlinks from the text runs + for (List<HSLFTextParagraph> txt : slide.getTextParagraphs()) { + for (HSLFTextParagraph para : txt) { + for (HSLFTextRun run : para) { + HSLFHyperlink link = run.getHyperlink(); + if (link != null) { + String title = link.getLabel(); + String address = link.getAddress(); + String text = run.getRawText(); + } + } + } + } + + //in PowerPoint you can assign a hyperlink to a shape without text, + //for example to a Line object. The code below demonstrates how to + //read such hyperlinks + for (HSLFShape sh : slide.getShapes()) { + if (sh instanceof HSLFSimpleShape) { + HSLFHyperlink link = ((HSLFSimpleShape)sh).getHyperlink(); + if(link != null) { + String title = link.getLabel(); + String address = link.getAddress(); + } + } + } + } + +
+ +
How to create tables + + //table data + String[][] data = { + {"INPUT FILE", "NUMBER OF RECORDS"}, + {"Item File", "11,559"}, + {"Vendor File", "300"}, + {"Purchase History File", "10,000"}, + {"Total # of requisitions", "10,200,038"} + }; + + HSLFSlideShow ppt = new HSLFSlideShow(); + + HSLFSlide slide = ppt.createSlide(); + //create a table of 5 rows and 2 columns + HSLFTable table = new HSLFTable(5, 2); + for (int i = 0; i < data.length; i++) { + for (int j = 0; j < data[i].length; j++) { + HSLFTableCell cell = table.getCell(i, j); + cell.setText(data[i][j]); + + HSLFTextRun rt = cell.getTextParagraphs().get(0).getTextRuns().get(0); + rt.setFontFamily("Arial"); + rt.setFontSize(10.); + + cell.setVerticalAlignment(VerticalAlignment.MIDDLE); + cell.setHorizontalCentered(true); + } + } + + //set table borders + Line border = table.createBorder(); + border.setLineColor(Color.black); + border.setLineWidth(1.0); + table.setAllBorders(border); + + //set width of the 1st column + table.setColumnWidth(0, 300); + //set width of the 2nd column + table.setColumnWidth(1, 150); + + slide.addShape(table); + table.moveTo(100, 100); + + FileOutputStream out = new FileOutputStream("hslf-table.ppt"); + ppt.write(out); + out.close(); + +
+ + +
How to remove shapes from a slide + + for (HSLFShape shape : slide.getShapes()) { + // remove the shape + boolean ok = slide.removeShape(shape); + if (ok) { + // the shape was removed. Do something. + } + } + +
+ +
How to retrieve embedded OLE objects + + for (HSLFShape shape : slide.getShapes()) { + if (shape instanceof OLEShape) { + OLEShape ole = (OLEShape) shape; + HSLFObjectData data = ole.getObjectData(); + String name = ole.getInstanceName(); + if ("Worksheet".equals(name)) { + HSSFWorkbook wb = new HSSFWorkbook(data.getData()); + } else if ("Document".equals(name)) { + HWPFDocument doc = new HWPFDocument(data.getData()); + } + } + } + +
+ + +
How to retrieve embedded sounds + + FileInputStream is = new FileInputStream(args[0]); + HSLFSlideShow ppt = new HSLFSlideShow(is); + is.close(); + + for (HSLFSoundData sound : ppt.getSoundData()) { + // save *WAV sounds on disk + if (sound.getSoundType().equals(".WAV")) { + FileOutputStream out = new FileOutputStream(sound.getSoundName()); + out.write(sound.getData()); + out.close(); + } + } + +
+ + +
How to create shapes of arbitrary geometry + + HSLFSlideShow ppt = new HSLFSlideShow(); + HSLFSlide slide = ppt.createSlide(); + + java.awt.geom.GeneralPath path = new java.awt.geom.GeneralPath(); + path.moveTo(100, 100); + path.lineTo(200, 100); + path.curveTo(50, 45, 134, 22, 78, 133); + path.curveTo(10, 45, 134, 56, 78, 100); + path.lineTo(100, 200); + path.closePath(); + + HSLFFreeformShape shape = new HSLFFreeformShape(); + shape.setPath(path); + slide.addShape(shape); + +
+ + +
How to draw into a slide using Graphics2D + + Current implementation of the PowerPoint Graphics2D driver is not fully compliant with the java.awt.Graphics2D specification. + Some features like clipping, drawing of images are not yet supported. + + + HSLFSlideShow ppt = new HSLFSlideShow(); + HSLFSlide slide = ppt.createSlide(); + + // draw a simple bar graph + // bar chart data. + // The first value is the bar color, + // the second is the width + Object[] def = new Object[]{ + Color.yellow, new Integer(100), + Color.green, new Integer(150), + Color.gray, new Integer(75), + Color.red, new Integer(200), + }; + + // all objects are drawn into a shape group so we need to create one + + HSLFGroupShape group = new HSLFGroupShape(); + // define position of the drawing in the slide + Rectangle bounds = new java.awt.Rectangle(200, 100, 350, 300); + // if you want to draw in the entire slide area then define the anchor + // as follows: + // Dimension pgsize = ppt.getPageSize(); + // java.awt.Rectangle bounds = new java.awt.Rectangle(0, 0, + // pgsize.width, pgsize.height); + + group.setAnchor(bounds); + slide.addShape(group); + + // draw a simple bar chart + Graphics2D graphics = new PPGraphics2D(group); + int x = bounds.x + 50, y = bounds.y + 50; + graphics.setFont(new Font("Arial", Font.BOLD, 10)); + for (int i = 0, idx = 1; i < def.length; i += 2, idx++) { + graphics.setColor(Color.black); + int width = ((Integer) def[i + 1]).intValue(); + graphics.drawString("Q" + idx, x - 20, y + 20); + graphics.drawString(width + "%", x + width + 10, y + 20); + graphics.setColor((Color) def[i]); + graphics.fill(new Rectangle(x, y, width, 30)); + y += 40; + } + graphics.setColor(Color.black); + graphics.setFont(new Font("Arial", Font.BOLD, 14)); + graphics.draw(bounds); + graphics.drawString("Performance", x + 70, y + 40); + + FileOutputStream out = new FileOutputStream("hslf-graphics2d.ppt"); + ppt.write(out); + out.close(); + +
+ + +
Export PowerPoint slides into java.awt.Graphics2D +

+ HSLF provides a way to export slides into images. You can capture slides into java.awt.Graphics2D object (or any other) + and serialize it into a PNG or JPEG format. Please note, although HSLF attempts to render slides as close to PowerPoint as possible, + the output may look differently from PowerPoint due to the following reasons: +

+
    +
  • Java2D renders fonts differently vs PowerPoint. There are always some differences in the way the font glyphs are painted
  • +
  • HSLF uses java.awt.font.LineBreakMeasurer to break text into lines. PowerPoint may do it in a different way.
  • +
  • If a font from the presentation is not available, then the JDK default font will be used.
  • +
+

+ Current Limitations: +

+
    +
  • Some types of shapes are not yet supported (WordArt, complex auto-shapes)
  • +
  • Only Bitmap images (PNG, JPEG, DIB) can be rendered in Java
  • +
+ + FileInputStream is = new FileInputStream("slideshow.ppt"); + HSLFSlideShow ppt = new HSLFSlideShow(is); + is.close(); + + Dimension pgsize = ppt.getPageSize(); + + int idx = 1; + for (HSLFSlide slide : ppt.getSlides()) { + + BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB); + Graphics2D graphics = img.createGraphics(); + // clear the drawing area + graphics.setPaint(Color.white); + graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height)); + + // render + slide.draw(graphics); + + // save the output + FileOutputStream out = new FileOutputStream("slide-" + idx + ".png"); + javax.imageio.ImageIO.write(img, "png", out); + out.close(); + + idx++; + } + +
+ +
+ +
How to extract Headers / Footers from an existing presentation + + FileInputStream is = new FileInputStream("slideshow.ppt"); + HSLFSlideShow ppt = new HSLFSlideShow(is); + is.close(); + + // presentation-scope headers / footers + HeadersFooters hdd = ppt.getSlideHeadersFooters(); + if (hdd.isFooterVisible()) { + String footerText = hdd.getFooterText(); + } + + // per-slide headers / footers + for (HSLFSlide slide : ppt.getSlides()) { + HeadersFooters hdd2 = slide.getHeadersFooters(); + if (hdd2.isFooterVisible()) { + String footerText = hdd2.getFooterText(); + } + if (hdd2.isUserDateVisible()) { + String customDate = hdd2.getDateTimeText(); + } + if (hdd2.isSlideNumberVisible()) { + int slideNUm = slide.getSlideNumber(); + } + } + +
+
How to set Headers / Footers + + HSLFSlideShow ppt = new HSLFSlideShow(); + + // presentation-scope headers / footers + HeadersFooters hdd = ppt.getSlideHeadersFooters(); + hdd.setSlideNumberVisible(true); + hdd.setFootersText("Created by POI-HSLF"); + +
+
+ +
diff --git a/src/documentation/content/xdocs/components/slideshow/index.xml b/src/documentation/content/xdocs/components/slideshow/index.xml new file mode 100644 index 0000000000..6c2b1c5d39 --- /dev/null +++ b/src/documentation/content/xdocs/components/slideshow/index.xml @@ -0,0 +1,72 @@ + + + + + +
+ POI-HSLF and and POI-XLSF - Java API To Access Microsoft Powerpoint Format Files + Overview + + + + + +
+ + +
+ POI-HSLF + +

HSLF is the POI Project's pure Java implementation of the Powerpoint '97(-2007) file format.

+

HSLF provides a way to read, create or modify PowerPoint presentations. In particular, it provides: +

+
    +
  • api for data extraction (text, pictures, embedded objects, sounds)
  • +
  • usermodel api for creating, reading and modifying ppt files
  • +
+ + This code currently lives the + scratchpad area + of the POI SVN repository. To use this component, ensure + you have the Scratchpad Jar on your classpath, or a dependency + defined on the poi-scratchpad artifact - the main POI + jar is not enough! See the + POI Components Map + for more details. + +

The quick guide documentation provides + information on using this API. Comments and fixes gratefully accepted on the POI + dev mailing lists.

+
+
+ POI-XSLF +

+ XSLF is the POI Project's pure Java implementation of the PowerPoint 2007 OOXML (.xlsx) file format. + Whilst HSLF and XSLF provide similar features, there is not a common interface across the two of them at this time. +

+

+ Please note that XSLF is still in early development and is a subject to incompatible changes in future. +

+

+ A quick guide is available in the XSLF Cookbook +

+
+ +
diff --git a/src/documentation/content/xdocs/components/slideshow/ppt-file-format.xml b/src/documentation/content/xdocs/components/slideshow/ppt-file-format.xml new file mode 100644 index 0000000000..202df1d436 --- /dev/null +++ b/src/documentation/content/xdocs/components/slideshow/ppt-file-format.xml @@ -0,0 +1,367 @@ + + + + + +
+ POI-HSLF - A Guide to the PowerPoint File Format + Overview + + + + +
+ + +
Records, Containers and Atoms +

+ PowerPoint documents are made up of a tree of records. A record may + contain either other records (in which case it is a Container), + or data (in which case it's an Atom). A record can't hold both. +

+

+ PowerPoint documents don't have one overall container record. Instead, + there are a number of different container records to be found at + the top level. +

+

+ Any numbers or strings stored in the records are always stored in + Little Endian format (least important bytes first). This is the case + no matter what platform the file was written on - be that a + Little Endian or a Big Endian system. +

+

+ PowerPoint may have Escher (DDF) records embedded in it. These + are always held as the children of a PPDrawing record (record + type 1036). Escher records have the same format as PowerPoint + records. +

+
+ +
Record Headers +

+ All records, be they containers or atoms, have the same standard + 8 byte header. It is: +

+
  • 1/2 byte container flag
  • +
  • 1.5 byte option field
  • +
  • 2 byte record type
  • +
  • 4 byte record length
+

+ If the first byte of the header, BINARY_AND with 0x0f, is 0x0f, + then the record is a container. Otherwise, it's an atom. The rest + of the first two bytes are used to store the "options" for the + record. Most commonly, this is used to indicate the version of + the record, but the exact usage is record specific. +

+

+ The record type is a little endian number, which tells you what + kind of record you're dealing with. Each different kind of record + has its own value that gets stored here. PowerPoint records have + a type that's normally less than 6000 (decimal). Escher records + normally have a type between 0xF000 and 0xF1FF. +

+

+ The record length is another little endian number. For an atom, + it's the size of the data part of the record, i.e. the length + of the record less its 8 byte record header. For a + container, it's the size of all the records that are children of + this record. That means that the size of a container record is the + length, plus 8 bytes for its record header. +

+
+ +
CurrentUserAtom, UserEditAtom and PersistPtrIncrementalBlock +

aka Records that care about the byte level position of other records

+

+ A small number of records contain byte level position offsets to other + records. If you change the position of any records in the file, then + there's a good chance that you will need to update some of these + special records. +

+

+ First up, CurrentUserAtom. This is actually stored in a different + OLE2 (POIFS) stream to the main PowerPoint document. It contains + a few bits of information on who lasted edited the file. Most + importantly, at byte 8 of its contents, it stores (as a 32 bit + little endian number) the offset in the main stream to the most + recent UserEditAtom. +

+

+ The UserEditAtom contains two byte level offsets (again as 32 bit + little endian numbers). At byte 12 is the offset to the + PersistPtrIncrementalBlock associated with this UserEditAtom + (each UserEditAtom has one and only one PersistPtrIncrementalBlock). + At byte 8, there's the offset to the previous UserEditAtom. If this + is 0, then you're at the first one. +

+

+ Every time you do a non full save in PowerPoint, it tacks on another + UserEditAtom and another PersistPtrIncrementalBlock. The + CurrentUserAtom is updated to point to this new UserEditAtom, and the + new UserEditAtom points back to the previous UserEditAtom. You then + end up with a chain, starting from the CurrentUserAtom, linking + back through all the UserEditAtoms, until you reach the first one + from a full save. +

+ +/-------------------------------\ +| CurrentUserAtom (own stream) | +| OffsetToCurrentEdit = 10562 |==\ +\-------------------------------/ | + | +/==================================/ +| /-----------------------------------\ +| | PersistPtrIncrementalBlock @ 6144 | +| \-----------------------------------/ +| /---------------------------------\ | +| | UserEditAtom @ 6176 | | +| | LastUserEditAtomOffset = 0 | | +| | PersistPointersOffset = 6144 |==================/ +| \---------------------------------/ +| | /-----------------------------------\ +| \====================\ | PersistPtrIncrementalBlock @ 8646 | +| | \-----------------------------------/ +| /---------------------------------\ | | +| | UserEditAtom @ 8674 | | | +| | LastUserEditAtomOffset = 6176 |=/ | +| | PersistPointersOffset = 8646 |==================/ +| \---------------------------------/ +| | /------------------------------------\ +| \====================\ | PersistPtrIncrementalBlock @ 10538 | +| | \------------------------------------/ +| /---------------------------------\ | | +\==| UserEditAtom @ 10562 | | | + | LastUserEditAtomOffset = 8674 |=/ | + | PersistPointersOffset = 10538 |==================/ + \---------------------------------/ + +

+ The PersistPtrIncrementalBlock contains byte offsets to all the + Slides, Notes, Documents and MasterSlides in the file. The first + PersistPtrIncrementalBlock will point to all the ones that + were present the first time the file was saved. Subsequent + PersistPtrIncrementalBlocks will contain pointers to all the ones + that were changed in that edit. To find the offset to a given + sheet in the latest version, then start with the most recent + PersistPtrIncrementalBlock. If this knows about the sheet, use the + offset it has. If it doesn't, then work back through older + PersistPtrIncrementalBlocks until you find one which does, and + use that. +

+

+ Each PersistPtrIncrementalBlock can contain a number of entries + blocks. Each block holds information on a sequence of sheets. + Each block starts with a 32 bit little endian integer. Once read + into memory, the lower 20 bits contain the starting number for the + sequence of sheets to be described. The higher 12 bits contain + the count of the number of sheets described. Following that is + one 32 bit little endian integer for each sheet in the sequence, + the value being the offset to that sheet. If there is any data + left after parsing a block, then it corresponds to the next block. +

+ +hex on disk decimal description +----------- ------- ----------- +0000 0 No options +7217 6002 Record type is 6002 +2000 0000 32 Length of data is 32 bytes +0100 5000 5242881 Count is 5 (12 highest bits) + Starting number is 1 (20 lowest bits) +0000 0000 0 Sheet (1+0)=1 starts at offset 0 +900D 0000 3472 Sheet (1+1)=2 starts at offset 3472 +E403 0000 996 Sheet (1+2)=3 starts at offset 996 +9213 0000 5010 Sheet (1+3)=4 starts at offset 5010 +BE15 0000 5566 Sheet (1+4)=5 starts at offset 5566 +0900 1000 1048585 Count is 1 (12 highest bits) + Starting number is 9 (20 lowest bits) +4418 0000 6212 Sheet (9+0)=9 starts at offset 9212 + +
+ +
Paragraph and Text Styling +

+ There are quite a number of records that affect the styling + of text, and a smaller number that are responsible for the + styling of paragraphs. +

+

+ By default, a given set of text will inherit paragraph and text + stylings from the appropriate master sheet. If anything differs + from the master sheet, then appropriate styling records will + follow the text record. +

+

+ (We don't currently know enough about master sheet styling + to write about it) +

+

+ Normally, powerpoint will have one text record (TextBytesAtom + or TextCharsAtom) for every paragraph, with a preceding + TextHeaderAtom to describe what sort of paragraph it is. + If any of the stylings differ from the master's, then a + StyleTextPropAtom will follow the text record. This contains + the paragraph style information, and the styling information + for each section of the text which has a different style. + (More on StyleTextPropAtom later) +

+

+ For every font used, a FontEntityAtom must exist for that font. + The FontEntityAtoms live inside a FontCollection record, and + there's one of those inside Environment record inside the + Document record. (More on Fonts to be discovered) +

+
+ +
StyleTextPropAtom +

+ If the text or paragraph stylings for a given text record + differ from those of the appropriate master, then there will + be one of these records. +

+

+ This record is made up of two lists of lists. Firstly, + there's a list of paragraph stylings - each made up of the + number of characters it applies two, followed by the matching + styling elements. Following that is the equivalent for + character stylings. +

+

+ Each styling list (in either list) starts with the number + of characters it applies to, stored in a 2 byte little + endian number. If it is a paragraph styling, it will be + followed by a 2 byte number (of unknown use). After this is + a four byte number, which is a mask indicating which stylings + will follow. You then have an entry for each of the stylings + indicated in the mask. Finally, you move onto the next set + of stylings. +

+

+ Each styling has a specific mask flag to indicate its + presence. (The list may be found towards the top of + org.apache.poi.hslf.record.StyleTextPropAtom.java, and is + too long to sensibly include here). For each styling entry + will occur in the order of its mask value (so one with mask + 1 will come first, followed by the next highest mask value). + Depending on the styling, it is either made up of a 2 byte + or 4 byte numeric value. The meaning of the value will + depend on the styling (eg for font.size, it is the font + size in points). +

+

+ Some stylings are actually mask stylings. For these, the + value will be a 4 byte number. This is then processed as + mask, to indicate a number of different sub-stylings. + The styling for bold/italic/underline is one such example. +

+ +hex on disk decimal description +----------- ------- ----------- + +0000 0 No options +A10F 4001 Record type is 4001 +8000 0000 128 Length of data is 128 bytes +1E00 0000 30 The paragraph styling applies to 30 characters +0000 0 Paragraph options are 0 +0018 0000 6144 0x0800=Text Alignment, 0x1000=Line Spacing +0000 0 Text Alignment = Left +5000 80 Line Spacing = 80 + +1C00 0000 28 The paragraph styling applies to 28 characters +0000 0 Paragraph options are 0 +0010 0000 4096 0x1000=Line Spacing +5000 80 Line Spacing = 80 + +1900 0000 25 The paragraph styling applies to 25 characters +0000 0 Paragraph options are 0 +0018 0000 6144 0x0800=Text Alignment, 0x1000=Line Spacing +0200 0 Text Alignment = Right +5000 80 Line Spacing = 80 + +6100 0000 61 The paragraph styling applies to 61 characters + (includes final CR) +0000 0 Paragraph options are 0 +0018 0000 6144 0x0800=Text Alignment, 0x1000=Line Spacing +0000 0 Text Alignment = Left +5000 80 Line Spacing = 80 + +1E00 0000 30 The character styling applies to 30 characters +0100 0200 131073 0x0001=Char Props Mask, 0x20000=Font Size +0100 1 Char Props 0x0001=Bold +1400 20 Font Size = 20 + +1C00 0000 28 The character styling applies to 28 characters +0200 0600 393218 0x0002=Char Props Mask, 0x20000=Font Size, 0x40000=Font Color +0200 2 Char Props 0x0002=Italic +1400 20 Font Size = 20 +0000 0005 83886080 Blue + +1900 0000 25 The character styling applies to 25 characters +0000 0600 393216 0x20000=Font Size, 0x40000=Font Color +1400 20 Font Size = 20 +FF33 00FE 4261426175 Red + +6000 0000 96 The character styling applies to 96 characters +0400 0300 196612 0x0004=Char Props Mask, 0x10000=Font Index, 0x20000=Font Size +0400 4 Char Props 0x0004=Underlined +0100 1 Font Index = 1 (2nd Font in table) +1800 24 Font Size = 24 + +
+ +
Fonts in PowerPoint +

+ PowerPoint stores information about the fonts used in FontEntityAtoms, + which live inside Document.Environment.FontCollection. For every different + font used, a FontEntityAtom must exist for that font. There is always at + least one FontEntityAtom in Document.Environment.FontCollection, + which describes the default font. +

+
+ +
FontEntityAtom +

+ The instance field of the record header contains the zero based index of the + font. Font index entries in StyleTextPropAtoms will refer to their required + font via this index. +

+

+ The length of FontEntityAtoms is always 68 bytes. The first 64 bytes of + it hold the typeface name of the font to be used. This is stored as + a null-terminated string, and encoded as little endian unicode. (The + length of the string must not exceed 32 characters including the null + termination, so the typeface name cannot exceed 31 characters). +

+ +

+ After the typeface name there are 4 bytes of bitmask flags. The details of these + can be found in the Windows API, under the LOGFONT structure. + The 65th byte is the output precision, which defines how closely the system chosen + font must match the requested font, in terms of height, width, pitch etc. + The 66th byte is the clipping precision, which defines how to clip characters + that occur partly outside the clipping region. + The 67th byte is the output quality, which defines how closely the system + must match the logical font's attributes to those of the physical font used. + The 68th (and final) byte is the pitch and family, which is used by the + system when matching fonts. +

+
+ +
diff --git a/src/documentation/content/xdocs/components/slideshow/ppt-wmf-emf-renderer.xml b/src/documentation/content/xdocs/components/slideshow/ppt-wmf-emf-renderer.xml new file mode 100644 index 0000000000..9ff550d943 --- /dev/null +++ b/src/documentation/content/xdocs/components/slideshow/ppt-wmf-emf-renderer.xml @@ -0,0 +1,210 @@ + + + + +
+ Rendering slideshows, WMF, EMF and EMF+ +
+ + Please be aware, that the documentation on this page reflects the current development, which might not + have been released. If you rely on an unreleased feature, either use a + nightly development build or feel free to ask on the + mailing list for the release schedule. +
+ Rendering slideshows, WMF, EMF and EMF+ +

+ For rendering slideshow (HSLF/XSLF), WMF, EMF and EMF+ pictures, POI provides an utility class + + PPTX2PNG: +

+ + + + Options: + -scale scale factor + -fixSide specify side (long,short,width,height) to fix - use as amount of pixels + -slide 1-based index of a slide to render + -format png,gif,jpg,svg,pdf (log,null for testing) + -outdir output directory, defaults to origin of the ppt/pptx file + -outfile output filename, defaults to "${basename}-${slideno}.${format}" + -outpat output filename pattern, defaults to "${basename}-${slideno}.${format}" + patterns: basename, slideno, format, ext + -dump dump the annotated records to a file + -quiet do not write to console (for normal processing) + -ignoreParse ignore parsing error and continue with the records read until the error + -extractEmbedded extract embedded parts + -inputType default input file type (OLE2,WMF,EMF), default is OLE2 = Powerpoint + some files (usually wmf) don't have a header, i.e. an identifiable file magic + -textAsShapes text elements are saved as shapes in SVG, necessary for variable spacing + often found in math formulas + -charset sets the default charset to be used, defaults to Windows-1252 + -emfHeaderBounds force the usage of the emf header bounds to calculate the bounding box + + -fontdir (PDF only) font directories separated by ";" - use $HOME for current users home dir + defaults to the usual plattform directories + -fontTtf (PDF only) regex to match the .ttf filenames + -fontMap ";"-separated list of font mappings : + ]]> + + +
+ Instructions to run +

+ Download the current nightly + and for SVG/PDF the additional dependencies.

+

Execute the java command (Unix-paths needs to be replaced for Windows - use "-charset" for non-western WMF/EMFs):

+ + java -cp poi-5.4.1.jar:poi-ooxml-5.4.1.jar:poi-ooxml-lite-5.4.1.jar:poi-scratchpad-5.4.1.jar:lib/*:ooxml-lib/*:auxiliary/* org.apache.poi.xslf.util.PPTX2PNG -format png -fixside long -scale 1000 -charset GBK file.pptx + +

+ If you want to use the renderer on the module path (JPMS) there a currently a few more steps necessary: +

+
    +
  • Create a build project using Maven, Gradle or your favorite build tool.
  • +
  • Alternatively, download the jars from https://repo1.maven.org/maven2/org/apache/poi/
  • +
  • Exclude poi-ooxml-full-5.4.1.jar,poi-javadoc-5.4.1.jar and auxiliary/xml-apis-1.4.01.jar (Java 11+) into new subdirectory "unused"
  • +
  • Move all other jars in current directory into a new subdirectory "poi"
  • +
  • Remove auxiliary/batik-script-1.14.jar:/META-INF/services/org.apache.batik.script.InterpreterFactory - see BATIK-1260
  • +
  • Invoke PPTX2PNG: + + java --module-path poi:lib:auxiliary:ooxml-lib --module org.apache.poi.ooxml/org.apache.poi.xslf.util.PPTX2PNG -format png -fixside long -scale 1000 file.pptx + +
  • +
+ + JDK 1.8 is by default using the PiscesRenderingEngine and affected by + Busy loop hangs. + To workaround this, use the MarlinRenderingEngine which is experimental provided starting from + openjdk8u252 (JDK-8143849) + via -Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine or for older jdk builds, + preload the marlin jar. + +
+ +
+
+ Integrate rendering in your code +
+ #1 - Use PPTX2PNG via file or stdin +

For file system access, you need to save your slideshow/WMF/EMF/EMF+ first to disc and then call + PPTX2PNG.main() + with the corresponding parameters. +

+ +

for stdin access, you need to redirect System.in before: +

+ +
+
+ #2 - Render WMF / EMF / EMF+ via the *Picture classes + 1500) { + width *= 1500/max; + height *= 1500/max; + } + + BufferedImage bufImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + Graphics2D g = bufImg.createGraphics(); + g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); + g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); + + wmf.draw(g, new Rectangle2D.Double(0,0,width,height)); + + g.dispose(); + + ImageIO.write(bufImg, "PNG", new File("bla.png")); + } + ]]> + +
+
+ #3 - Render slideshows directly + ss = SlideShowFactory.create(file, null, true)) { + Dimension pgsize = ss.getPageSize(); + int width = (int) (pgsize.width * scale); + int height = (int) (pgsize.height * scale); + + for (Slide slide : ss.getSlides()) { + BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + Graphics2D graphics = img.createGraphics(); + + // default rendering options + graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); + graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); + graphics.setRenderingHint(Drawable.BUFFERED_IMAGE, new WeakReference<>(img)); + + graphics.scale(scale, scale); + + // draw stuff + slide.draw(graphics); + + ImageIO.write(img, "PNG", new File("output.png")); + graphics.dispose(); + img.flush(); + } + } + ]]> +
+
+ +
\ No newline at end of file diff --git a/src/documentation/content/xdocs/components/slideshow/quick-guide.xml b/src/documentation/content/xdocs/components/slideshow/quick-guide.xml new file mode 100644 index 0000000000..88d85d877c --- /dev/null +++ b/src/documentation/content/xdocs/components/slideshow/quick-guide.xml @@ -0,0 +1,133 @@ + + + + + +
+ POI-HSLF - A Quick Guide + Overview + + + +
+ + +
Basic Text Extraction +

For basic text extraction, make use of + org.apache.poi.sl.extractor.SlideShowExtractor. + It accepts a slideshow which can be created from a file or stream via org.apache.poi.sl.usermodel.SlideShowFactory. + The getText() method can be used to get the text from the slides. +

+
+ +
Specific Text Extraction +

To get specific bits of text, first create a org.apache.poi.hslf.usermodel.HSLFSlideShow +(from a org.apache.poi.hslf.usermodel.HSLFSlideShowImpl, which accepts a file or an input +stream). Use getSlides() and getNotes() to get the slides and notes. +These can be queried to get their page ID (though they should be returned +in the right order).

+

You can then call getTextParagraphs() on these, to get +their blocks of text. (A list of HSLFTextParagraph normally holds all the text in a +given area of the page, eg in the title bar, or in a box). +From the HSLFTextParagraph, you can extract the text, and check +what type of text it is (eg Body, Title). You can also call +getTextRuns(), which will return the +HSLFTextRuns that make up the TextParagraph. A +HSLFTextRun is a text fragment, having the same character formatting. +The paragraph formatting is defined in the parent HSLFTextParagraph. +

+
+ +
Poor Quality Text Extraction +

If speed is the most important thing for you, you don't care + about getting duplicate blocks of text, you don't care about + getting text from master sheets, and you don't care about getting + old text, then + org.apache.poi.hslf.extractor.QuickButCruddyTextExtractor + might be of use.

+

QuickButCruddyTextExtractor doesn't use the normal record + parsing code, instead it uses a tree structure blind search + method to get all text holding records. You will get all the text, + including lots of text you normally wouldn't ever want. However, + you will get it back very very fast!

+

There are two ways of getting the text back. + getTextAsString() will return a single string with all + the text in it. getTextAsVector() will return a + vector of strings, one for each text record found in the file. +

+
+ +
Changing Text +

It is possible to change the text via + HSLFTextParagraph.setText(List<HSLFTextParagraph>,String) or + HSLFTextRun.setText(String). It is possible to add additional TextRuns + with HSLFTextParagraph.appendText(List<HSLFTextParagraph>,String,boolean) + or HSLFTextParagraph.addTextRun(HSLFTextRun)

+

When calling HSLFTextParagraph.setText(List<HSLFTextParagraph>,String), all + the text will end up with the same formatting. When calling + HSLFTextRun.setText(String), the text will retain + the old formatting of that HSLFTextRun. +

+
+ +
Adding Slides +

You may add new slides by calling + HSLFSlideShow.createSlide(), which will add a new slide + to the end of the SlideShow. It is possible to re-order slides with HSLFSlideShow.reorderSlide(...). +

+
+ +
Guide to key classes +
    +
  • org.apache.poi.hslf.usermodel.HSLFSlideShowImpl + Handles reading in and writing out files. Calls + org.apache.poi.hslf.record.record to build a tree + of all the records in the file, which it allows access to. +
  • +
  • org.apache.poi.hslf.record.Record + Base class of all records. Also provides the main record generation + code, which will build up a tree of records for a file. +
  • +
  • org.apache.poi.hslf.usermodel.HSLFSlideShow + Builds up model entries from the records, and presents a user facing + view of the file +
  • +
  • org.apache.poi.hslf.usermodel.HSLFSlide + A user facing view of a Slide in a slideshow. Allows you to get at the + Text of the slide, and at any drawing objects on it. +
  • +
  • org.apache.poi.hslf.usermodel.HSLFTextParagraph + A list of HSLFTextParagraphs holds all the text in a given area of the Slide, and will + contain one or more HSLFTextRuns. +
  • +
  • org.apache.poi.hslf.usermodel.HSLFTextRun + Holds a run of text, all having the same character stylings. It is possible to modify text, and/or text stylings. +
  • +
  • org.apache.poi.sl.extractor.SlideShowExtractor + Uses the model code to allow extraction of text from files +
  • +
  • org.apache.poi.hslf.extractor.QuickButCruddyTextExtractor + Uses the record code to extract all the text from files very fast, + but including deleted text (and other bits of Crud). +
  • +
+
+ +
diff --git a/src/documentation/content/xdocs/components/slideshow/xslf-cookbook.xml b/src/documentation/content/xdocs/components/slideshow/xslf-cookbook.xml new file mode 100644 index 0000000000..8bde9a2697 --- /dev/null +++ b/src/documentation/content/xdocs/components/slideshow/xslf-cookbook.xml @@ -0,0 +1,304 @@ + + + + + +
+ XSLF Cookbook + + + +
+ +
XSLF Cookbook +

+ This page offers a short introduction into the XSLF API. More examples can be found in the + XSLF Examples + in the POI SVN repository. +

+ + Please note that XSLF is still in early development and is a subject to incompatible changes in a future release. + +
Index of Features + +
+
Cookbook + +
New Presentation +

+ The following code creates a new .pptx slide show and adds a blank slide to it: +

+ + //create a new empty slide show + XMLSlideShow ppt = new XMLSlideShow(); + + //add first slide + XSLFSlide blankSlide = ppt.createSlide(); + +
+ +
Read an existing presentation and append a slide to it + + XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("slideshow.pptx")); + + //append a new slide to the end + XSLFSlide blankSlide = ppt.createSlide(); + +
+ + +
Create a new slide from a predefined slide layout + + XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("slideshow.pptx")); + + // first see what slide layouts are available : + System.out.println("Available slide layouts:"); + for(XSLFSlideMaster master : ppt.getSlideMasters()){ + for(XSLFSlideLayout layout : master.getSlideLayouts()){ + System.out.println(layout.getType()); + } + } + + // blank slide + XSLFSlide blankSlide = ppt.createSlide(); + + // there can be multiple masters each referencing a number of layouts + // for demonstration purposes we use the first (default) slide master + XSLFSlideMaster defaultMaster = ppt.getSlideMasters().get(0); + + // title slide + XSLFSlideLayout titleLayout = defaultMaster.getLayout(SlideLayout.TITLE); + // fill the placeholders + XSLFSlide slide1 = ppt.createSlide(titleLayout); + XSLFTextShape title1 = slide1.getPlaceholder(0); + title1.setText("First Title"); + + // title and content + XSLFSlideLayout titleBodyLayout = defaultMaster.getLayout(SlideLayout.TITLE_AND_CONTENT); + XSLFSlide slide2 = ppt.createSlide(titleBodyLayout); + + XSLFTextShape title2 = slide2.getPlaceholder(0); + title2.setText("Second Title"); + + XSLFTextShape body2 = slide2.getPlaceholder(1); + body2.clearText(); // unset any existing text + body2.addNewTextParagraph().addNewTextRun().setText("First paragraph"); + body2.addNewTextParagraph().addNewTextRun().setText("Second paragraph"); + body2.addNewTextParagraph().addNewTextRun().setText("Third paragraph"); + +
+ + +
Delete slide + + XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("slideshow.pptx")); + + ppt.removeSlide(0); // 0-based index of a slide to be removed + +
+ + +
Re-order slides + + XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("slideshow.pptx")); + List<XSLFSlide> slides = ppt.getSlides(); + + XSLFSlide thirdSlide = slides.get(2); + ppt.setSlideOrder(thirdSlide, 0); // move the third slide to the beginning + +
+ + +
How to retrieve or change slide size + + XMLSlideShow ppt = new XMLSlideShow(); + //retrieve page size. Coordinates are expressed in points (72 dpi) + java.awt.Dimension pgsize = ppt.getPageSize(); + int pgx = pgsize.width; //slide width in points + int pgy = pgsize.height; //slide height in points + + //set new page size + ppt.setPageSize(new java.awt.Dimension(1024, 768)); + +
+ +
How to read shapes contained in a particular slide +

+ The following code demonstrates how to iterate over shapes for each slide. +

+ + XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("slideshow.pptx")); + // get slides + for (XSLFSlide slide : ppt.getSlides()) { + for (XSLFShape sh : slide.getShapes()) { + // name of the shape + String name = sh.getShapeName(); + + // shapes's anchor which defines the position of this shape in the slide + if (sh instanceof PlaceableShape) { + java.awt.geom.Rectangle2D anchor = ((PlaceableShape)sh).getAnchor(); + } + + if (sh instanceof XSLFConnectorShape) { + XSLFConnectorShape line = (XSLFConnectorShape) sh; + // work with Line + } else if (sh instanceof XSLFTextShape) { + XSLFTextShape shape = (XSLFTextShape) sh; + // work with a shape that can hold text + } else if (sh instanceof XSLFPictureShape) { + XSLFPictureShape shape = (XSLFPictureShape) sh; + // work with Picture + } + } + } + +
+ +
Add Image to Slide + + XMLSlideShow ppt = new XMLSlideShow(); + XSLFSlide slide = ppt.createSlide(); + + byte[] pictureData = IOUtils.toByteArray(new FileInputStream("image.png")); + + XSLFPictureData pd = ppt.addPicture(pictureData, PictureData.PictureType.PNG); + XSLFPictureShape pic = slide.createPicture(pd); + +
+ + +
Read Images contained within a presentation + + XMLSlideShow ppt = new XMLSlideShow(new FileInputStream("slideshow.pptx")); + for(XSLFPictureData data : ppt.getAllPictures()){ + byte[] bytes = data.getData(); + String fileName = data.getFileName(); + + } + +
+ + +
Basic text formatting + + XMLSlideShow ppt = new XMLSlideShow(); + XSLFSlide slide = ppt.createSlide(); + + XSLFTextBox shape = slide.createTextBox(); + XSLFTextParagraph p = shape.addNewTextParagraph(); + + XSLFTextRun r1 = p.addNewTextRun(); + r1.setText("The"); + r1.setFontColor(Color.blue); + r1.setFontSize(24.); + + XSLFTextRun r2 = p.addNewTextRun(); + r2.setText(" quick"); + r2.setFontColor(Color.red); + r2.setBold(true); + + XSLFTextRun r3 = p.addNewTextRun(); + r3.setText(" brown"); + r3.setFontSize(12.); + r3.setItalic(true); + r3.setStrikethrough(true); + + XSLFTextRun r4 = p.addNewTextRun(); + r4.setText(" fox"); + r4.setUnderline(true); + +
+ +
How to create a hyperlink + + XMLSlideShow ppt = new XMLSlideShow(); + XSLFSlide slide = ppt.createSlide(); + + // assign a hyperlink to a text run + XSLFTextBox shape = slide.createTextBox(); + XSLFTextRun r = shape.addNewTextParagraph().addNewTextRun(); + r.setText("Apache POI"); + XSLFHyperlink link = r.createHyperlink(); + link.setAddress("https://poi.apache.org"); + +
+ +
PPTX2PNG is an application that converts each slide of a .pptx slideshow into a PNG image + +Usage: PPTX2PNG [options] <pptx file> +Options: + -scale <float> scale factor (default is 1.0) + -slide <integer> 1-based index of a slide to render. Default is to render all slides. + +

How it works:

+

+ The XSLFSlide object implements a draw(Graphics2D graphics) method that recursively paints all shapes + in the slide into the supplied graphics canvas: +

+ + slide.draw(graphics); + +

+ where graphics is a class implementing java.awt.Graphics2D. In PPTX2PNG the graphic canvas is derived from + java.awt.image.BufferedImage, i.e. the destination is an image in memory, but in general case you can pass + any compliant implementation of java.awt.Graphics2D. + Find more information in the designated render page, e.g. on how to render SVG images. +

+
+ +
+ Merge multiple presentations together + + XMLSlideShow ppt = new XMLSlideShow(); + String[] inputs = {"presentations1.pptx", "presentation2.pptx"}; + for(String arg : inputs){ + FileInputStream is = new FileInputStream(arg); + XMLSlideShow src = new XMLSlideShow(is); + is.close(); + + for(XSLFSlide srcSlide : src.getSlides()){ + ppt.createSlide().importContent(srcSlide); + } + } + + FileOutputStream out = new FileOutputStream("merged.pptx"); + ppt.write(out); + out.close(); + +
+ +
+
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/chart.xml b/src/documentation/content/xdocs/components/spreadsheet/chart.xml new file mode 100644 index 0000000000..8e4194af9a --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/chart.xml @@ -0,0 +1,1532 @@ + + + + + +
+ Chart record information + + + +
+ +
Introduction +

+ This document is intended as a work in progress for describing + our current understanding of how the chart records are + written to produce a valid chart. +

+
+
Bar chart +

+ The following records detail the records written for a + 'simple' bar chart. +

+ + + ============================================ + rectype = 0xec, recsize = 0xc8 + -BEGIN DUMP--------------------------------- + 00000000 0F 00 02 F0 C0 00 00 00 10 00 08 F0 08 00 00 00 ................ + 00000010 02 00 00 00 02 04 00 00 0F 00 03 F0 A8 00 00 00 ................ + 00000020 0F 00 04 F0 28 00 00 00 01 00 09 F0 10 00 00 00 ....(........... + 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 00000040 02 00 0A F0 08 00 00 00 00 04 00 00 05 00 00 00 ................ + 00000050 0F 00 04 F0 70 00 00 00 92 0C 0A F0 08 00 00 00 ....p........... + 00000060 02 04 00 00 00 0A 00 00 93 00 0B F0 36 00 00 00 ............6... + 00000070 7F 00 04 01 04 01 BF 00 08 00 08 00 81 01 4E 00 ..............N. + 00000080 00 08 83 01 4D 00 00 08 BF 01 10 00 11 00 C0 01 ....M........... + 00000090 4D 00 00 08 FF 01 08 00 08 00 3F 02 00 00 02 00 M.........?..... + 000000A0 BF 03 00 00 08 00 00 00 10 F0 12 00 00 00 00 00 ................ + 000000B0 04 00 C0 02 0A 00 F4 00 0E 00 66 01 20 00 E9 00 ..........f. ... + 000000C0 00 00 11 F0 00 00 00 00 ........ + -END DUMP----------------------------------- + recordid = 0xec, size =200 + [UNKNOWN RECORD:ec] + .id = ec + [/UNKNOWN RECORD] + + ============================================ + rectype = 0x5d, recsize = 0x1a + -BEGIN DUMP--------------------------------- + 00000000 15 00 12 00 05 00 02 00 11 60 00 00 00 00 B8 03 .........`...... + 00000010 87 03 00 00 00 00 00 00 00 00 .......... + -END DUMP----------------------------------- + recordid = 0x5d, size =26 + [UNKNOWN RECORD:5d] + .id = 5d + [/UNKNOWN RECORD] + + ============================================ + rectype = 0x809, recsize = 0x10 + -BEGIN DUMP--------------------------------- + 00000000 00 06 20 00 FE 1C CD 07 C9 40 00 00 06 01 00 00 .. ......@...... + -END DUMP----------------------------------- + recordid = 0x809, size =16 + [BOF RECORD] + .version = 600 + .type = 20 + .build = 1cfe + .buildyear = 1997 + .history = 40c9 + .requiredversion = 106 + [/BOF RECORD] + + ============================================ + rectype = 0x14, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x14, size =0 + [HEADER] + .length = 0 + .header = null + [/HEADER] + + ============================================ + rectype = 0x15, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x15, size =0 + [FOOTER] + .footerlen = 0 + .footer = null + [/FOOTER] + + ============================================ + rectype = 0x83, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 00 00 .. + -END DUMP----------------------------------- + recordid = 0x83, size =2 + [HCENTER] + .hcenter = false + [/HCENTER] + + ============================================ + rectype = 0x84, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 00 00 .. + -END DUMP----------------------------------- + recordid = 0x84, size =2 + [VCENTER] + .vcenter = false + [/VCENTER] + + ============================================ + rectype = 0xa1, recsize = 0x22 + -BEGIN DUMP--------------------------------- + 00000000 00 00 12 00 01 00 01 00 01 00 04 00 00 00 B8 03 ................ + 00000010 00 00 00 00 00 00 E0 3F 00 00 00 00 00 00 E0 3F .......?.......? + 00000020 0F 00 .. + -END DUMP----------------------------------- + recordid = 0xa1, size =34 + [PRINTSETUP] + .papersize = 0 + .scale = 18 + .pagestart = 1 + .fitwidth = 1 + .fitheight = 1 + .options = 4 + .ltor = false + .landscape = false + .valid = true + .mono = false + .draft = false + .notes = false + .noOrientat = false + .usepage = false + .hresolution = 0 + .vresolution = 952 + .headermargin = 0.5 + .footermargin = 0.5 + .copies = 15 + [/PRINTSETUP] + + + ============================================ + rectype = 0x33, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 03 00 .. + -END DUMP----------------------------------- + recordid = 0x33, size =2 + [UNKNOWN RECORD:33] + .id = 33 + [/UNKNOWN RECORD] + + ============================================ + rectype = 0x1060, recsize = 0xa + -BEGIN DUMP--------------------------------- + 00000000 A0 23 08 16 C8 00 00 00 05 00 .#........ + -END DUMP----------------------------------- + recordid = 0x1060, size =10 + [FBI] + .xBasis = 0x23A0 (9120 ) + .yBasis = 0x1608 (5640 ) + .heightBasis = 0x00C8 (200 ) + .scale = 0x0000 (0 ) + .indexToFontTable = 0x0005 (5 ) + [/FBI] + + ============================================ + rectype = 0x1060, recsize = 0xa + -BEGIN DUMP--------------------------------- + 00000000 A0 23 08 16 C8 00 01 00 06 00 .#........ + -END DUMP----------------------------------- + recordid = 0x1060, size =10 + [FBI] + .xBasis = 0x23A0 (9120 ) + .yBasis = 0x1608 (5640 ) + .heightBasis = 0x00C8 (200 ) + .scale = 0x0001 (1 ) + .indexToFontTable = 0x0006 (6 ) + [/FBI] + + ============================================ + rectype = 0x12, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 00 00 .. + -END DUMP----------------------------------- + recordid = 0x12, size =2 + [PROTECT] + .rowheight = 0 + [/PROTECT] + + ============================================ + Offset 0xf22 (3874) + rectype = 0x1001, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 00 00 .. + -END DUMP----------------------------------- + recordid = 0x1001, size =2 + [UNITS] + .units = 0x0000 (0 ) + [/UNITS] + + ============================================ + Offset 0xf28 (3880) + rectype = 0x1002, recsize = 0x10 + -BEGIN DUMP--------------------------------- + 00000000 00 00 00 00 00 00 00 00 58 66 D0 01 40 66 22 01 ........Xf..@f". + -END DUMP----------------------------------- + recordid = 0x1002, size =16 + [CHART] + .x = 0x00000000 (0 ) + .y = 0x00000000 (0 ) + .width = 0x01D06658 (30434904 ) + .height = 0x01226640 (19031616 ) + [/CHART] + + ============================================ + Offset 0xf3c (3900) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + ============================================ + Offset 0xf40 (3904) + rectype = 0xa0, recsize = 0x4 + -BEGIN DUMP--------------------------------- + 00000000 01 00 01 00 .... + -END DUMP----------------------------------- + recordid = 0xa0, size =4 + [SCL] + .numerator = 0x0001 (1 ) + .denominator = 0x0001 (1 ) + [/SCL] + + + ============================================ + Offset 0xf48 (3912) + rectype = 0x1064, recsize = 0x8 + -BEGIN DUMP--------------------------------- + 00000000 00 00 01 00 00 00 01 00 ........ + -END DUMP----------------------------------- + recordid = 0x1064, size =8 + [PLOTGROWTH] + .horizontalScale = 0x00010000 (65536 ) + .verticalScale = 0x00010000 (65536 ) + [/PLOTGROWTH] + + ============================================ + Offset 0xf54 (3924) + rectype = 0x1032, recsize = 0x4 + -BEGIN DUMP--------------------------------- + 00000000 00 00 02 00 .... + -END DUMP----------------------------------- + recordid = 0x1032, size =4 + [FRAME] + .borderType = 0x0000 (0 ) + .options = 0x0002 (2 ) + .autoSize = false + .autoPosition = true + [/FRAME] + + ============================================ + Offset 0xf5c (3932) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + ============================================ + Offset 0xf60 (3936) + rectype = 0x1007, recsize = 0xc + -BEGIN DUMP--------------------------------- + 00000000 00 00 00 00 00 00 FF FF 09 00 4D 00 ..........M. + -END DUMP----------------------------------- + recordid = 0x1007, size =12 + [LINEFORMAT] + .lineColor = 0x00000000 (0 ) + .linePattern = 0x0000 (0 ) + .weight = 0xFFFF (-1 ) + .format = 0x0009 (9 ) + .auto = true + .drawTicks = false + .unknown = false + .colourPaletteIndex = 0x004D (77 ) + [/LINEFORMAT] + + ============================================ + Offset 0xf70 (3952) + rectype = 0x100a, recsize = 0x10 + -BEGIN DUMP--------------------------------- + 00000000 FF FF FF 00 00 00 00 00 01 00 01 00 4E 00 4D 00 ............N.M. + -END DUMP----------------------------------- + recordid = 0x100a, size =16 + [AREAFORMAT] + .foregroundColor = 0x00FFFFFF (16777215 ) + .backgroundColor = 0x00000000 (0 ) + .pattern = 0x0001 (1 ) + .formatFlags = 0x0001 (1 ) + .automatic = true + .invert = false + .forecolorIndex = 0x004E (78 ) + .backcolorIndex = 0x004D (77 ) + [/AREAFORMAT] + + ============================================ + Offset 0xf84 (3972) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + ============================================ + Offset 0xf88 (3976) + rectype = 0x1003, recsize = 0xc + -BEGIN DUMP--------------------------------- + 00000000 01 00 01 00 20 00 1F 00 01 00 00 00 .... ....... + -END DUMP----------------------------------- + recordid = 0x1003, size =12 + [SERIES] + .categoryDataType = 0x0001 (1 ) + .valuesDataType = 0x0001 (1 ) + .numCategories = 0x0020 (32 ) + .numValues = 0x001F (31 ) + .bubbleSeriesType = 0x0001 (1 ) + .numBubbleValues = 0x0000 (0 ) + [/SERIES] + + ============================================ + Offset 0xf98 (3992) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + + ============================================ + Offset 0xf9c (3996) + rectype = 0x1051, recsize = 0x8 + -BEGIN DUMP--------------------------------- + 00000000 00 01 00 00 00 00 00 00 ........ + -END DUMP----------------------------------- + recordid = 0x1051, size =8 + [AI] + .linkType = 0x00 (0 ) + .referenceType = 0x01 (1 ) + .options = 0x0000 (0 ) + .customNumberFormat = false + .indexNumberFmtRecord = 0x0000 (0 ) + .formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@1ee3914 ) + [/AI] + + ============================================ + Offset 0xfa8 (4008) + rectype = 0x1051, recsize = 0x13 + -BEGIN DUMP--------------------------------- + 00000000 01 02 00 00 00 00 0B 00 3B 00 00 00 00 1E 00 01 ........;....... + 00000010 00 01 00 ... + -END DUMP----------------------------------- + recordid = 0x1051, size =19 + [AI] + .linkType = 0x01 (1 ) + .referenceType = 0x02 (2 ) + .options = 0x0000 (0 ) + .customNumberFormat = false + .indexNumberFmtRecord = 0x0000 (0 ) + .formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@e5855a ) + [/AI] + + ============================================ + Offset 0xfbf (4031) + rectype = 0x1051, recsize = 0x13 + -BEGIN DUMP--------------------------------- + 00000000 02 02 00 00 69 01 0B 00 3B 00 00 00 00 1F 00 00 ....i...;....... + 00000010 00 00 00 ... + -END DUMP----------------------------------- + recordid = 0x1051, size =19 + [AI] + .linkType = 0x02 (2 ) + .referenceType = 0x02 (2 ) + .options = 0x0000 (0 ) + .customNumberFormat = false + .indexNumberFmtRecord = 0x0169 (361 ) + .formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@95fd19 ) + [/AI] + + ============================================ + Offset 0xfd6 (4054) + rectype = 0x1051, recsize = 0x8 + -BEGIN DUMP--------------------------------- + 00000000 03 01 00 00 00 00 00 00 ........ + -END DUMP----------------------------------- + recordid = 0x1051, size =8 + [AI] + .linkType = 0x03 (3 ) + .referenceType = 0x01 (1 ) + .options = 0x0000 (0 ) + .customNumberFormat = false + .indexNumberFmtRecord = 0x0000 (0 ) + .formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@11b9fb1 ) + [/AI] + + ============================================ + Offset 0xfe2 (4066) + rectype = 0x1006, recsize = 0x8 + -BEGIN DUMP--------------------------------- + 00000000 FF FF 00 00 00 00 00 00 ........ + -END DUMP----------------------------------- + recordid = 0x1006, size =8 + [DATAFORMAT] + .pointNumber = 0xFFFF (-1 ) + .seriesIndex = 0x0000 (0 ) + .seriesNumber = 0x0000 (0 ) + .formatFlags = 0x0000 (0 ) + .useExcel4Colors = false + [/DATAFORMAT] + + ============================================ + Offset 0xfee (4078) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + ============================================ + Offset 0xff2 (4082) + rectype = 0x105f, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 00 00 .. + -END DUMP----------------------------------- + recordid = 0x105f, size =2 + [UNKNOWN RECORD] + .id = 105f + [/UNKNOWN RECORD] + + ============================================ + Offset 0xff8 (4088) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + ============================================ + Offset 0xffc (4092) + rectype = 0x1045, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 00 00 .. + -END DUMP----------------------------------- + recordid = 0x1045, size =2 + [SeriesToChartGroup] + .chartGroupIndex = 0x0000 (0 ) + [/SeriesToChartGroup] + + ============================================ + Offset 0x1002 (4098) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + ============================================ + Offset 0x1006 (4102) + rectype = 0x1044, recsize = 0x4 + -BEGIN DUMP--------------------------------- + 00000000 0A 00 00 00 .... + -END DUMP----------------------------------- + recordid = 0x1044, size =4 + [SHTPROPS] + .flags = 0x000A (10 ) + .chartTypeManuallyFormatted = false + .plotVisibleOnly = true + .doNotSizeWithWindow = false + .defaultPlotDimensions = true + .autoPlotArea = false + .empty = 0x00 (0 ) + [/SHTPROPS] + + ============================================ + Offset 0x100e (4110) + rectype = 0x1024, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 02 00 .. + -END DUMP----------------------------------- + recordid = 0x1024, size =2 + [DEFAULTTEXT] + .categoryDataType = 0x0002 (2 ) + [/DEFAULTTEXT] + + ============================================ + Offset 0x1014 (4116) + rectype = 0x1025, recsize = 0x20 + -BEGIN DUMP--------------------------------- + 00000000 02 02 01 00 00 00 00 00 DB FF FF FF C4 FF FF FF ................ + 00000010 00 00 00 00 00 00 00 00 B1 00 4D 00 50 2B 00 00 ..........M.P+.. + -END DUMP----------------------------------- + recordid = 0x1025, size =32 + [TEXT] + .horizontalAlignment = 0x02 (2 ) + .verticalAlignment = 0x02 (2 ) + .displayMode = 0x0001 (1 ) + .rgbColor = 0x00000000 (0 ) + .x = 0xFFFFFFDB (-37 ) + .y = 0xFFFFFFC4 (-60 ) + .width = 0x00000000 (0 ) + .height = 0x00000000 (0 ) + .options1 = 0x00B1 (177 ) + .autoColor = true + .showKey = false + .showValue = false + .vertical = false + .autoGeneratedText = true + .generated = true + .autoLabelDeleted = false + .autoBackground = true + .rotation = 0 + .showCategoryLabelAsPercentage = false + .showValueAsPercentage = false + .showBubbleSizes = false + .showLabel = false + .indexOfColorValue = 0x004D (77 ) + .options2 = 0x2B50 (11088 ) + .dataLabelPlacement = 0 + .textRotation = 0x0000 (0 ) + [/TEXT] + + ============================================ + Offset 0x1038 (4152) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + + ============================================ + Offset 0x103c (4156) + rectype = 0x104f, recsize = 0x14 + -BEGIN DUMP--------------------------------- + 00000000 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 00000010 00 00 00 00 .... + -END DUMP----------------------------------- + recordid = 0x104f, size =20 + [UNKNOWN RECORD] + .id = 104f + [/UNKNOWN RECORD] + + ============================================ + Offset 0x1054 (4180) + rectype = 0x1026, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 05 00 .. + -END DUMP----------------------------------- + recordid = 0x1026, size =2 + [FONTX] + .fontIndex = 0x0005 (5 ) + [/FONTX] + + ============================================ + Offset 0x105a (4186) + rectype = 0x1051, recsize = 0x8 + -BEGIN DUMP--------------------------------- + 00000000 00 01 00 00 00 00 00 00 ........ + -END DUMP----------------------------------- + recordid = 0x1051, size =8 + [AI] + .linkType = 0x00 (0 ) + .referenceType = 0x01 (1 ) + .options = 0x0000 (0 ) + .customNumberFormat = false + .indexNumberFmtRecord = 0x0000 (0 ) + .formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@913fe2 ) + [/AI] + + ============================================ + Offset 0x1066 (4198) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + ============================================ + Offset 0x106a (4202) + rectype = 0x1024, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 03 00 .. + -END DUMP----------------------------------- + recordid = 0x1024, size =2 + [DEFAULTTEXT] + .categoryDataType = 0x0003 (3 ) + [/DEFAULTTEXT] + + ============================================ + Offset 0x1070 (4208) + rectype = 0x1025, recsize = 0x20 + -BEGIN DUMP--------------------------------- + 00000000 02 02 01 00 00 00 00 00 DB FF FF FF C4 FF FF FF ................ + 00000010 00 00 00 00 00 00 00 00 B1 00 4D 00 50 2B 00 00 ..........M.P+.. + -END DUMP----------------------------------- + recordid = 0x1025, size =32 + [TEXT] + .horizontalAlignment = 0x02 (2 ) + .verticalAlignment = 0x02 (2 ) + .displayMode = 0x0001 (1 ) + .rgbColor = 0x00000000 (0 ) + .x = 0xFFFFFFDB (-37 ) + .y = 0xFFFFFFC4 (-60 ) + .width = 0x00000000 (0 ) + .height = 0x00000000 (0 ) + .options1 = 0x00B1 (177 ) + .autoColor = true + .showKey = false + .showValue = false + .vertical = false + .autoGeneratedText = true + .generated = true + .autoLabelDeleted = false + .autoBackground = true + .rotation = 0 + .showCategoryLabelAsPercentage = false + .showValueAsPercentage = false + .showBubbleSizes = false + .showLabel = false + .indexOfColorValue = 0x004D (77 ) + .options2 = 0x2B50 (11088 ) + .dataLabelPlacement = 0 + .textRotation = 0x0000 (0 ) + [/TEXT] + + ============================================ + Offset 0x1094 (4244) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + ============================================ + Offset 0x1098 (4248) + rectype = 0x104f, recsize = 0x14 + -BEGIN DUMP--------------------------------- + 00000000 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 00000010 00 00 00 00 .... + -END DUMP----------------------------------- + recordid = 0x104f, size =20 + [UNKNOWN RECORD] + .id = 104f + [/UNKNOWN RECORD] + + ============================================ + Offset 0x10b0 (4272) + rectype = 0x1026, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 06 00 .. + -END DUMP----------------------------------- + recordid = 0x1026, size =2 + [FONTX] + .fontIndex = 0x0006 (6 ) + [/FONTX] + + ============================================ + Offset 0x10b6 (4278) + rectype = 0x1051, recsize = 0x8 + -BEGIN DUMP--------------------------------- + 00000000 00 01 00 00 00 00 00 00 ........ + -END DUMP----------------------------------- + recordid = 0x1051, size =8 + [AI] + .linkType = 0x00 (0 ) + .referenceType = 0x01 (1 ) + .options = 0x0000 (0 ) + .customNumberFormat = false + .indexNumberFmtRecord = 0x0000 (0 ) + .formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@1f934ad ) + [/AI] + + ============================================ + Offset 0x10c2 (4290) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + ============================================ + Offset 0x10c6 (4294) + rectype = 0x1046, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 01 00 .. + -END DUMP----------------------------------- + recordid = 0x1046, size =2 + [AXISUSED] + .numAxis = 0x0001 (1 ) + [/AXISUSED] + + ============================================ + Offset 0x10cc (4300) + rectype = 0x1041, recsize = 0x12 + -BEGIN DUMP--------------------------------- + 00000000 00 00 DF 01 00 00 DD 00 00 00 B3 0B 00 00 56 0B ..............V. + 00000010 00 00 .. + -END DUMP----------------------------------- + recordid = 0x1041, size =18 + [AXISPARENT] + .axisType = 0x0000 (0 ) + .x = 0x000001DF (479 ) + .y = 0x000000DD (221 ) + .width = 0x00000BB3 (2995 ) + .height = 0x00000B56 (2902 ) + [/AXISPARENT] + + ============================================ + Offset 0x10e2 (4322) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + ============================================ + Offset 0x10e6 (4326) + rectype = 0x104f, recsize = 0x14 + -BEGIN DUMP--------------------------------- + 00000000 02 00 02 00 3A 00 00 00 5E 00 00 00 58 0D 00 00 ....:...^...X... + 00000010 E5 0E 00 00 .... + -END DUMP----------------------------------- + recordid = 0x104f, size =20 + [UNKNOWN RECORD] + .id = 104f + [/UNKNOWN RECORD] + + ============================================ + Offset 0x10fe (4350) + rectype = 0x101d, recsize = 0x12 + -BEGIN DUMP--------------------------------- + 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 00000010 00 00 .. + -END DUMP----------------------------------- + recordid = 0x101d, size =18 + [AXIS] + .axisType = 0x0000 (0 ) + .reserved1 = 0x00000000 (0 ) + .reserved2 = 0x00000000 (0 ) + .reserved3 = 0x00000000 (0 ) + .reserved4 = 0x00000000 (0 ) + [/AXIS] + + ============================================ + Offset 0x1114 (4372) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + ============================================ + Offset 0x1118 (4376) + rectype = 0x1020, recsize = 0x8 + -BEGIN DUMP--------------------------------- + 00000000 01 00 01 00 01 00 01 00 ........ + -END DUMP----------------------------------- + recordid = 0x1020, size =8 + [CATSERRANGE] + .crossingPoint = 0x0001 (1 ) + .labelFrequency = 0x0001 (1 ) + .tickMarkFrequency = 0x0001 (1 ) + .options = 0x0001 (1 ) + .valueAxisCrossing = true + .crossesFarRight = false + .reversed = false + [/CATSERRANGE] + + ============================================ + Offset 0x1124 (4388) + rectype = 0x1062, recsize = 0x12 + -BEGIN DUMP--------------------------------- + 00000000 1C 90 39 90 02 00 00 00 01 00 00 00 00 00 1C 90 ..9............. + 00000010 FF 00 .. + -END DUMP----------------------------------- + recordid = 0x1062, size =18 + [AXCEXT] + .minimumCategory = 0x901C (-28644 ) + .maximumCategory = 0x9039 (-28615 ) + .majorUnitValue = 0x0002 (2 ) + .majorUnit = 0x0000 (0 ) + .minorUnitValue = 0x0001 (1 ) + .minorUnit = 0x0000 (0 ) + .baseUnit = 0x0000 (0 ) + .crossingPoint = 0x901C (-28644 ) + .options = 0x00FF (255 ) + .defaultMinimum = true + .defaultMaximum = true + .defaultMajor = true + .defaultMinorUnit = true + .isDate = true + .defaultBase = true + .defaultCross = true + .defaultDateSettings = true + [/AXCEXT] + + ============================================ + Offset 0x113a (4410) + rectype = 0x101e, recsize = 0x1e + -BEGIN DUMP--------------------------------- + 00000000 02 00 03 01 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 00000010 00 00 00 00 00 00 00 00 23 00 4D 00 2D 00 ........#.M.-. + -END DUMP----------------------------------- + recordid = 0x101e, size =30 + [TICK] + .majorTickType = 0x02 (2 ) + .minorTickType = 0x00 (0 ) + .labelPosition = 0x03 (3 ) + .background = 0x01 (1 ) + .labelColorRgb = 0x00000000 (0 ) + .zero1 = 0x0000 (0 ) + .zero2 = 0x0000 (0 ) + .options = 0x0023 (35 ) + .autoTextColor = true + .autoTextBackground = true + .rotation = 0 + .autorotate = true + .tickColor = 0x004D (77 ) + .zero3 = 0x002D (45 ) + [/TICK] + + ============================================ + Offset 0x115c (4444) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + ============================================ + Offset 0x1160 (4448) + rectype = 0x101d, recsize = 0x12 + -BEGIN DUMP--------------------------------- + 00000000 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 00000010 00 00 .. + -END DUMP----------------------------------- + recordid = 0x101d, size =18 + [AXIS] + .axisType = 0x0001 (1 ) + .reserved1 = 0x00000000 (0 ) + .reserved2 = 0x00000000 (0 ) + .reserved3 = 0x00000000 (0 ) + .reserved4 = 0x00000000 (0 ) + [/AXIS] + + + ============================================ + Offset 0x1176 (4470) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + ============================================ + Offset 0x117a (4474) + rectype = 0x101f, recsize = 0x2a + -BEGIN DUMP--------------------------------- + 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 00000020 00 00 00 00 00 00 00 00 1F 01 .......... + -END DUMP----------------------------------- + recordid = 0x101f, size =42 + [VALUERANGE] + .minimumAxisValue = (0.0 ) + .maximumAxisValue = (0.0 ) + .majorIncrement = (0.0 ) + .minorIncrement = (0.0 ) + .categoryAxisCross = (0.0 ) + .options = 0x011F (287 ) + .automaticMinimum = true + .automaticMaximum = true + .automaticMajor = true + .automaticMinor = true + .automaticCategoryCrossing = true + .logarithmicScale = false + .valuesInReverse = false + .crossCategoryAxisAtMaximum = false + .reserved = true + [/VALUERANGE] + + ============================================ + Offset 0x11a8 (4520) + rectype = 0x101e, recsize = 0x1e + -BEGIN DUMP--------------------------------- + 00000000 02 00 03 01 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 00000010 00 00 00 00 00 00 00 00 23 00 4D 00 00 00 ........#.M... + -END DUMP----------------------------------- + recordid = 0x101e, size =30 + [TICK] + .majorTickType = 0x02 (2 ) + .minorTickType = 0x00 (0 ) + .labelPosition = 0x03 (3 ) + .background = 0x01 (1 ) + .labelColorRgb = 0x00000000 (0 ) + .zero1 = 0x0000 (0 ) + .zero2 = 0x0000 (0 ) + .options = 0x0023 (35 ) + .autoTextColor = true + .autoTextBackground = true + .rotation = 0 + .autorotate = true + .tickColor = 0x004D (77 ) + .zero3 = 0x0000 (0 ) + [/TICK] + + ============================================ + Offset 0x11ca (4554) + rectype = 0x1021, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 01 00 .. + -END DUMP----------------------------------- + recordid = 0x1021, size =2 + [AXISLINEFORMAT] + .axisType = 0x0001 (1 ) + [/AXISLINEFORMAT] + + ============================================ + Offset 0x11d0 (4560) + rectype = 0x1007, recsize = 0xc + -BEGIN DUMP--------------------------------- + 00000000 00 00 00 00 00 00 FF FF 09 00 4D 00 ..........M. + -END DUMP----------------------------------- + recordid = 0x1007, size =12 + [LINEFORMAT] + .lineColor = 0x00000000 (0 ) + .linePattern = 0x0000 (0 ) + .weight = 0xFFFF (-1 ) + .format = 0x0009 (9 ) + .auto = true + .drawTicks = false + .unknown = false + .colourPaletteIndex = 0x004D (77 ) + [/LINEFORMAT] + + ============================================ + Offset 0x11e0 (4576) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + ============================================ + Offset 0x11e4 (4580) + rectype = 0x1035, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1035, size =0 + [PLOTAREA] + [/PLOTAREA] + + ============================================ + Offset 0x11e8 (4584) + rectype = 0x1032, recsize = 0x4 + -BEGIN DUMP--------------------------------- + 00000000 00 00 03 00 .... + -END DUMP----------------------------------- + recordid = 0x1032, size =4 + [FRAME] + .borderType = 0x0000 (0 ) + .options = 0x0003 (3 ) + .autoSize = true + .autoPosition = true + [/FRAME] + + ============================================ + Offset 0x11f0 (4592) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + ============================================ + Offset 0x11f4 (4596) + rectype = 0x1007, recsize = 0xc + -BEGIN DUMP--------------------------------- + 00000000 80 80 80 00 00 00 00 00 00 00 17 00 ............ + -END DUMP----------------------------------- + recordid = 0x1007, size =12 + [LINEFORMAT] + .lineColor = 0x00808080 (8421504 ) + .linePattern = 0x0000 (0 ) + .weight = 0x0000 (0 ) + .format = 0x0000 (0 ) + .auto = false + .drawTicks = false + .unknown = false + .colourPaletteIndex = 0x0017 (23 ) + [/LINEFORMAT] + + ============================================ + Offset 0x1204 (4612) + rectype = 0x100a, recsize = 0x10 + -BEGIN DUMP--------------------------------- + 00000000 C0 C0 C0 00 00 00 00 00 01 00 00 00 16 00 4F 00 ..............O. + -END DUMP----------------------------------- + recordid = 0x100a, size =16 + [AREAFORMAT] + .foregroundColor = 0x00C0C0C0 (12632256 ) + .backgroundColor = 0x00000000 (0 ) + .pattern = 0x0001 (1 ) + .formatFlags = 0x0000 (0 ) + .automatic = false + .invert = false + .forecolorIndex = 0x0016 (22 ) + .backcolorIndex = 0x004F (79 ) + [/AREAFORMAT] + + ============================================ + Offset 0x1218 (4632) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + ============================================ + Offset 0x121c (4636) + rectype = 0x1014, recsize = 0x14 + -BEGIN DUMP--------------------------------- + 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 00000010 00 00 00 00 .... + -END DUMP----------------------------------- + recordid = 0x1014, size =20 + [CHARTFORMAT] + .xPosition = 0 + .yPosition = 0 + .width = 0 + .height = 0 + .grBit = 0 + [/CHARTFORMAT] + + ============================================ + Offset 0x1234 (4660) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + ============================================ + Offset 0x1238 (4664) + rectype = 0x1017, recsize = 0x6 + -BEGIN DUMP--------------------------------- + 00000000 00 00 96 00 00 00 ...... + -END DUMP----------------------------------- + recordid = 0x1017, size =6 + [BAR] + .barSpace = 0x0000 (0 ) + .categorySpace = 0x0096 (150 ) + .formatFlags = 0x0000 (0 ) + .horizontal = false + .stacked = false + .displayAsPercentage = false + .shadow = false + [/BAR] + + ============================================ + Offset 0x1242 (4674) + rectype = 0x1022, recsize = 0xa + -BEGIN DUMP--------------------------------- + 00000000 00 00 00 00 00 00 00 00 0F 00 .......... + -END DUMP----------------------------------- + recordid = 0x1022, size =10 + [UNKNOWN RECORD] + .id = 1022 + [/UNKNOWN RECORD] + + ============================================ + Offset 0x1250 (4688) + rectype = 0x1015, recsize = 0x14 + -BEGIN DUMP--------------------------------- + 00000000 D6 0D 00 00 1E 06 00 00 B5 01 00 00 D5 00 00 00 ................ + 00000010 03 01 1F 00 .... + -END DUMP----------------------------------- + recordid = 0x1015, size =20 + [LEGEND] + .xAxisUpperLeft = 0x00000DD6 (3542 ) + .yAxisUpperLeft = 0x0000061E (1566 ) + .xSize = 0x000001B5 (437 ) + .ySize = 0x000000D5 (213 ) + .type = 0x03 (3 ) + .spacing = 0x01 (1 ) + .options = 0x001F (31 ) + .autoPosition = true + .autoSeries = true + .autoXPositioning = true + .autoYPositioning = true + .vertical = true + .dataTable = false + [/LEGEND] + + ============================================ + Offset 0x1268 (4712) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + ============================================ + Offset 0x126c (4716) + rectype = 0x104f, recsize = 0x14 + -BEGIN DUMP--------------------------------- + 00000000 05 00 02 00 D6 0D 00 00 1E 06 00 00 00 00 00 00 ................ + 00000010 00 00 00 00 .... + -END DUMP----------------------------------- + recordid = 0x104f, size =20 + [UNKNOWN RECORD] + .id = 104f + [/UNKNOWN RECORD] + + ============================================ + Offset 0x1284 (4740) + rectype = 0x1025, recsize = 0x20 + -BEGIN DUMP--------------------------------- + 00000000 02 02 01 00 00 00 00 00 DB FF FF FF C4 FF FF FF ................ + 00000010 00 00 00 00 00 00 00 00 B1 00 4D 00 70 37 00 00 ..........M.p7.. + -END DUMP----------------------------------- + recordid = 0x1025, size =32 + [TEXT] + .horizontalAlignment = 0x02 (2 ) + .verticalAlignment = 0x02 (2 ) + .displayMode = 0x0001 (1 ) + .rgbColor = 0x00000000 (0 ) + .x = 0xFFFFFFDB (-37 ) + .y = 0xFFFFFFC4 (-60 ) + .width = 0x00000000 (0 ) + .height = 0x00000000 (0 ) + .options1 = 0x00B1 (177 ) + .autoColor = true + .showKey = false + .showValue = false + .vertical = false + .autoGeneratedText = true + .generated = true + .autoLabelDeleted = false + .autoBackground = true + .rotation = 0 + .showCategoryLabelAsPercentage = false + .showValueAsPercentage = false + .showBubbleSizes = false + .showLabel = false + .indexOfColorValue = 0x004D (77 ) + .options2 = 0x3770 (14192 ) + .dataLabelPlacement = 0 + .textRotation = 0x0000 (0 ) + [/TEXT] + + ============================================ + Offset 0x12a8 (4776) + rectype = 0x1033, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1033, size =0 + [BEGIN] + [/BEGIN] + + ============================================ + Offset 0x12ac (4780) + rectype = 0x104f, recsize = 0x14 + -BEGIN DUMP--------------------------------- + 00000000 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ + 00000010 00 00 00 00 .... + -END DUMP----------------------------------- + recordid = 0x104f, size =20 + [UNKNOWN RECORD] + .id = 104f + [/UNKNOWN RECORD] + + ============================================ + Offset 0x12c4 (4804) + rectype = 0x1051, recsize = 0x8 + -BEGIN DUMP--------------------------------- + 00000000 00 01 00 00 00 00 00 00 ........ + -END DUMP----------------------------------- + recordid = 0x1051, size =8 + [AI] + .linkType = 0x00 (0 ) + .referenceType = 0x01 (1 ) + .options = 0x0000 (0 ) + .customNumberFormat = false + .indexNumberFmtRecord = 0x0000 (0 ) + .formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@1d05c81 ) + [/AI] + + ============================================ + Offset 0x12d0 (4816) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + + ============================================ + Offset 0x12d4 (4820) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + ============================================ + Offset 0x12d8 (4824) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + ============================================ + Offset 0x12dc (4828) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + ============================================ + Offset 0x12e0 (4832) + rectype = 0x1034, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0x1034, size =0 + [END] + [/END] + + ============================================ + rectype = 0x200, recsize = 0xe + -BEGIN DUMP--------------------------------- + 00000000 00 00 00 00 1F 00 00 00 00 00 01 00 00 00 .............. + -END DUMP----------------------------------- + recordid = 0x200, size =14 + [DIMENSIONS] + .firstrow = 0 + .lastrow = 1f + .firstcol = 0 + .lastcol = 1 + .zero = 0 + [/DIMENSIONS] + + ============================================ + rectype = 0x1065, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 02 00 .. + -END DUMP----------------------------------- + recordid = 0x1065, size =2 + [SINDEX] + .index = 0x0002 (2 ) + [/SINDEX] + + ============================================ + rectype = 0x1065, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 01 00 .. + -END DUMP----------------------------------- + recordid = 0x1065, size =2 + [SINDEX] + .index = 0x0001 (1 ) + [/SINDEX] + + ============================================ + rectype = 0x1065, recsize = 0x2 + -BEGIN DUMP--------------------------------- + 00000000 03 00 .. + -END DUMP----------------------------------- + recordid = 0x1065, size =2 + [SINDEX] + .index = 0x0003 (3 ) + [/SINDEX] + + ============================================ + rectype = 0xa, recsize = 0x0 + -BEGIN DUMP--------------------------------- + **NO RECORD DATA** + -END DUMP----------------------------------- + recordid = 0xa, size =0 + [EOF] + [/EOF] + + + +

+ The next section breaks those records down into an easier + to read format: +

+ +[UNKNOWN RECORD:ec] +[UNKNOWN RECORD:5d] +[BOF RECORD] + [HEADER] + [FOOTER] + [HCENTER] + [VCENTER] + [PRINTSETUP] + [UNKNOWN RECORD:33] + [FBI] + [FBI] + [PROTECT] + [UNITS] + [CHART] + [BEGIN] + [SCL] // zoom magnification + [PLOTGROWTH] // font scaling + [FRAME] // border around text + [BEGIN] // default line and area format + [LINEFORMAT] + [AREAFORMAT] + [END] + [SERIES] // start of series + [BEGIN] + [AI] // LINK_TYPE_TITLE_OR_TEXT + [AI] // LINK_TYPE_VALUES + [AI] // LINK_TYPE_CATEGORIES + [AI] // ?? + [DATAFORMAT] // Formatting applies to series? + [BEGIN] // ?? + [UNKNOWN RECORD] + [END] + [SeriesToChartGroup] // Used to support > 1 chart? + [END] + [SHTPROPS] // Some defaults for how chart is displayed. + [DEFAULTTEXT] // Describes the characteristics of the next + // record + [TEXT] // Details of the text that follows in the + // next section + [BEGIN] + [UNKNOWN RECORD] // POS record... looks like I missed this one. + // docs seem to indicate it's better to use + // defaults... + [FONTX] // index to font record. + [AI] // link to text? seems to be linking to nothing + [END] + [DEFAULTTEXT] // contains a category type of 3 which is not + // documented (sigh). + [TEXT] // defines position, color etc for text on chart. + [BEGIN] + [UNKNOWN RECORD] // Another pos record + [FONTX] // font + [AI] // reference type is DIRECT (not sure what this + // means) + [END] + [AXISUSED] // number of axis on the chart. + [AXISPARENT] // axis size and location + [BEGIN] // beginning of axis details + [UNKNOWN RECORD] // Another pos record. + [AXIS] // Category axis + [BEGIN] + [CATSERRANGE] // defines tick marks and other stuff + [AXCEXT] // unit information + [TICK] // tick formating characteristics + [END] + [AXIS] // Value axis + [BEGIN] + [VALUERANGE] // defines tick marks and other stuff + [TICK] // tick formating characteristics + [AXISLINEFORMAT] // major grid line axis format + [LINEFORMAT] // what do the lines look like? + [END] + [PLOTAREA] // marks that the frame following belongs + // to the frame. + [FRAME] // border + [BEGIN] + [LINEFORMAT] // border line + [AREAFORMAT] // border area + [END] + [CHARTFORMAT] // marks a chart group + [BEGIN] + [BAR] // indicates a bar chart + [UNKNOWN RECORD] // apparently this record is ignoreable + [LEGEND] // positioning for the legend + [BEGIN] + [UNKNOWN RECORD] // another position record. + [TEXT] // details of the text that follows + // in the next section + [BEGIN] + [UNKNOWN RECORD] // yet another pos record + [AI] // another link (of type direct) + [END] + [END] + [END] + [END] + [END] + [DIMENSIONS] + [SINDEX] + [SINDEX] + [SINDEX] +[EOF] + +

+ Just a quick note on some of the unknown records: +

+
    +
  • EC: MSODRAWING - A Microsoft drawing record. (Need to + track down where this is documented).
  • +
  • 5D: OBJ: Description of a drawing object. (This is going to + be a PITA to implement).
  • +
  • 33: Not documented. :-(
  • +
  • 105f: Not documented. :-(
  • +
  • 104f: POS: Position record (should be able to safely leave this out).
  • +
  • 1022: CHARTFORMATLINK: Can be left out.
  • +
+

+ It is currently suspected that many of those records could be + left out when generating a bar chart from scratch. The way + we will be proceeding with this is to write code that generates + most of these records and then start removing them to see + how this effects the chart in excel. +

+
+
Inserting the Chart into the Workbook +
    +
  • + Unknown record (sid=00eb) is inserted before the SST + record. +
  • +
+ + ============================================ + rectype = 0xeb, recsize = 0x5a + -BEGIN DUMP--------------------------------- + 00000000 0F 00 00 F0 52 00 00 00 00 00 06 F0 18 00 00 00 ....R........... + 00000010 01 08 00 00 02 00 00 00 02 00 00 00 01 00 00 00 ................ + 00000020 01 00 00 00 03 00 00 00 33 00 0B F0 12 00 00 00 ........3....... + 00000030 BF 00 08 00 08 00 81 01 09 00 00 08 C0 01 40 00 ..............@. + 00000040 00 08 40 00 1E F1 10 00 00 00 0D 00 00 08 0C 00 ..@............. + 00000050 00 08 17 00 00 08 F7 00 00 10 .......... + -END DUMP----------------------------------- + recordid = 0xeb, size =90 + [UNKNOWN RECORD:eb] + .id = eb + [/UNKNOWN RECORD] + + ============================================ + +
    +
  • + Any extra font records are inserted as needed +
  • +
  • + Chart records inserted after DBCell records. +
  • +
+
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/converting.xml b/src/documentation/content/xdocs/components/spreadsheet/converting.xml new file mode 100644 index 0000000000..0700cc4e43 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/converting.xml @@ -0,0 +1,232 @@ + + + + + +
+ Upgrading to POI 3.5, including converting existing HSSF Usermodel code to SS Usermodel (for XSSF and HSSF) + + + +
+ +
Things that have to be changed when upgrading to POI 3.5 +

Wherever possible, we have tried to ensure that you can use your + existing POI code with POI 3.5 without requiring any changes. However, + Java doesn't always make that easy, and unfortunately there are a + few changes that may be required for some users.

+
org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.CellValue +

Annoyingly, java will not let you access a static inner class via + a child of the parent one. So, all references to + org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.CellValue + will need to be changed to + org.apache.poi.ss.usermodel.FormulaEvaluator.CellValue +

+
+
org.apache.poi.hssf.usermodel.HSSFRow.MissingCellPolicy +

Annoyingly, java will not let you access a static inner class via + a child of the parent one. So, all references to + org.apache.poi.hssf.usermodel.HSSFRow.MissingCellPolicy + will need to be changed to + org.apache.poi.ss.usermodel.Row.MissingCellPolicy +

+
+
DDF and org.apache.poi.hssf.record.RecordFormatException +

Previously, record level errors within DDF would throw an + exception from the hssf class hierarchy. Now, record level errors + within DDF will throw a more general RecordFormatException, + org.apache.poi.util.RecordFormatException

+

In addition, org.apache.poi.hssf.record.RecordFormatException + has been changed to inherit from the new + org.apache.poi.util.RecordFormatException, so you may + wish to change catches of the hssf version to the new util version. +

+
+
+
Converting existing HSSF Usermodel code to SS Usermodel (for XSSF and HSSF) + +
Why change? +

If you have existing HSSF usermodel code that works just + fine, and you don't want to use the new OOXML XSSF support, + then you probably don't need to. Your existing HSSF only code + will continue to work just fine.

+

However, if you want to be able to work with both HSSF for + your .xls files, and also XSSF for .xslx files, then you will + need to make some slight tweaks to your code.

+
+
org.apache.poi.ss.usermodel +

The new SS usermodel (org.apache.poi.ss.usermodel) is very + heavily based on the old HSSF usermodel + (org.apache.poi.hssf.usermodel). The main difference is that + the package name and class names have been tweaked to remove + HSSF from them. Otherwise, the new SS Usermodel interfaces + should provide the same functionality.

+
+
Constructors +

Calling the empty HSSFWorkbook remains as the way to + create a new, empty Workbook object. To open an existing + Workbook, you should now call WorkbookFactory.create(inp).

+

For all other cases when you would have called a + Usermodel constructor, such as 'new HSSFRichTextString()' or + 'new HSSFDataFormat', you should instead use a CreationHelper. + There's a method on the Workbook to get a CreationHelper, and + the CreationHelper will then handle constructing new objects + for you.

+
+
Other Code +

For all other code, generally change a reference from + org.apache.poi.hssf.usermodel.HSSFFoo to a reference to + org.apache.poi.ss.usermodel.Foo. Method signatures should + otherwise remain the same, and it should all then work for + both XSSF and HSSF.

+
+
+
Worked Examples +
Old HSSF Code + +
+
New, generic SS Usermodel Code + +
+
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/diagram1.xml b/src/documentation/content/xdocs/components/spreadsheet/diagram1.xml new file mode 100644 index 0000000000..438da0e7c8 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/diagram1.xml @@ -0,0 +1,40 @@ + + + + + +
+ HSSF + Overview + + + + +
+ + +
+ Usermodel Class Diagram by Matthew Young +

+ Usermodel +

+
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/diagrams.xml b/src/documentation/content/xdocs/components/spreadsheet/diagrams.xml new file mode 100644 index 0000000000..208cabfa6f --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/diagrams.xml @@ -0,0 +1,56 @@ + + + + + +
+ HSSF + Overview + + + + +
+ + +
Overview +

+ This section is intended for diagrams (UML/etc) that help + explain HSSF. +

+ +

+ Have more? Add a new "bug" to the bug database with [DOCUMENTATION] + prefacing the description and a link to the file on an http server + somewhere. If you don't have your own webserver, then you can email it + to (acoliver at apache dot org) provided its < 5MB. Diagrams should be + in some format that can be read at least on Linux and Windows. Diagrams + that can be edited are preferable, but lets face it, there aren't too + many good affordable UML tools yet! And no they don't HAVE to be UML... + just useful. +

+
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/eval-devguide.xml b/src/documentation/content/xdocs/components/spreadsheet/eval-devguide.xml new file mode 100644 index 0000000000..2d49b0aa09 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/eval-devguide.xml @@ -0,0 +1,591 @@ + + + + + +
+ Developing Formula Evaluation + + +
+ +
Introduction +

+ This document is for developers wishing to contribute to the + FormulaEvaluator API functionality. +

+

+ When evaluating workbooks you may encounter an org.apache.poi.ss.formula.eval.NotImplementedException + which indicates that a function is not (yet) supported by POI. Is there a workaround? + Yes, the POI framework makes it easy to add implementation of new functions. Prior to POI-3.8 + you had to checkout the source code from svn and make a custom build with your function implementation. + Since POI-3.8 you can register new functions in run-time. +

+

+ Currently, contribution is desired for implementing the standard MS + Excel functions. Placeholder classes for these have been created, + contributors only need to insert implementation for the + individual evaluate() methods that do the actual evaluation. +

+
+
Overview of FormulaEvaluator +

+ Briefly, a formula string (along with the sheet and workbook that + form the context in which the formula is evaluated) is first parsed + into Reverse Polish Notation (RPN) tokens using the FormulaParser class. + (If you don't know what RPN tokens are, now is a good time to + read + Anthony Stone's description of RPN.) +

+
The big picture +

+ RPN tokens are mapped to Eval classes. (The class hierarchy for the Evals + is best understood if you view it in a class diagram + viewer.) Depending on the type of RPN token (also called Ptgs + henceforth since that is what the FormulaParser calls the classes), a + specific type of Eval wrapper is constructed to wrap the RPN token and + is pushed on the stack, unless the Ptg is an OperationPtg. If it is an + OperationPtg, an OperationEval instance is created for the specific + type of OperationPtg. And depending on how many operands it takes, + that many Evals are popped of the stack and passed in an array to + the OperationEval instance's evaluate method which returns an Eval + of subtype ValueEval. Thus an operation in the formula is evaluated. +

+ An Eval is of subinterface ValueEval or OperationEval. + Operands are always ValueEvals, and operations are always OperationEvals. +

+ OperationEval.evaluate(Eval[]) returns an Eval which is supposed + to be an instance of one of the implementations of + ValueEval. The ValueEval resulting from evaluate() is pushed on the + stack and the next RPN token is evaluated. This continues until + eventually there are no more RPN tokens, at which point, if the formula + string was correctly parsed, there should be just one Eval on the + stack — which contains the result of evaluating the formula. +

+

+ Two special Ptgs — AreaPtg and ReferencePtg — + are handled a little differently, but the code should be self + explanatory for that. Very briefly, the cells included in AreaPtg and + RefPtg are examined and their values are populated in individual + ValueEval objects which are set into the implementations of + AreaEval and RefEval. +

+

+ OperationEvals for the standard operators have been implemented and tested. +

+
+
+
What functions are supported? +

+ As of release 5.2.0, POI implements 202 built-in functions, + see Appendix A for the list of supported functions with an implementation. + You can programmatically list supported / unsupported functions using the following helper methods: +

+import org.apache.poi.ss.formula.ss.formula.WorkbookEvaluator; + +// list of functions that POI can evaluate +Collection<String> supportedFuncs = WorkbookEvaluator.getSupportedFunctionNames(); + +// list of functions that are not supported by POI +Collection<String> unsupportedFuncs = WorkbookEvaluator.getNotSupportedFunctionNames(); + +
I need a function that isn't supported! +

+ If you need a function that POI doesn't currently support, you have two options. + You can create the function yourself, and have your program add it to POI at + run-time. Doing this will help you get the function you need as soon as possible. + The other option is to create the function yourself, and build it into the POI library, + possibly contributing the code to the POI project. Doing this will help you get the + function you need, but you'll have to build POI from source yourself. And if you + contribute the code, you'll help others who need the function in the future, because + it will already be supported in the next release of POI. The two options require + almost identical code, but the process of deploying the function is different. + If your function is a User Defined Function, you'll always take the run-time option, + as POI doesn't distribute UDFs. +

+

+ In the sections ahead, we'll implement the Excel SQRTPI() function, first + at run-time, and then we'll show how change it to a library-based implementation. +

+
+
+
Two base interfaces to start your implementation +

+ All Excel formula function classes implement either the + org.apache.poi.hssf.record.formula.functions.Function or the + org.apache.poi.hssf.record.formula.functions.FreeRefFunction interface. + Function is a common interface for the functions defined in the Binary Excel File Format (BIFF8): these are "classic" Excel functions like SUM, COUNT, LOOKUP, etc. + FreeRefFunction is a common interface for the functions from the Excel Analysis ToolPak, for User Defined Functions that you create, + and for Excel built-in functions that have been defined since BIFF8 was defined. + In the future these two interfaces are expected be unified into one, but for now you have to start your implementation from two slightly different roots. +

+ +
Which interface to start from? +

+ You are about to implement a function and don't know which interface to start from: Function or FreeRefFunction. + You should use Function if the function is part of the Excel BIFF8 + definition, and FreeRefFunction for a function that is part of the Excel Analysis ToolPak, was added to Excel after BIFF8, or that you are creating yourself. +

+

+ You can check the list of Analysis ToolPak functions defined in org.apache.poi.ss.formula.atp.AnalysisToolPak.createFunctionsMap() + to see if the function is part of the Analysis ToolPak. + The list of BIFF8 functions is defined as a text file, in the + src/resources/main/org/apache/poi/ss/formula/function/functionMetadata.txt file. +

+

+ You can also use the following code to check which base class your function should implement, if it is not a User Defined function (UDFs must implement FreeRefFunction): +

+import org.apache.poi.hssf.record.formula.atp.AnalysisToolPak; + +if (!AnalysisToolPak.isATPFunction(functionName)){ + // the function must implement org.apache.poi.hssf.record.formula.functions.Function +} else { + // the function must implement org.apache.poi.hssf.record.formula.functions.FreeRefFunction +} + +
+
+
Implementing a function. +

+ Here is the fun part: let's walk through the implementation of the Excel function SQRTPI(), + which POI doesn not currently support. +

+

+ AnalysisToolPak.isATPFunction("SQRTPI") returns true, so this is an Analysis ToolPak function. + Thus the base interface must be FreeRefFunction. The same would be true if we were implementing + a UDF. +

+

+ Because we're taking the run-time deployment option, we'll create this new function in a source + file in our own program. Our function will return an Eval that is either + it's proper result, or an ErrorEval that describes the error. All that work + is done in the function's evaluate() method: +

+package ...; +import org.apache.poi.ss.formula.eval.EvaluationException; +import org.apache.poi.ss.formula.eval.ErrorEval; +import org.apache.poi.ss.formula.eval.NumberEval; +import org.apache.poi.ss.formula.eval.OperandResolver; +import org.apache.poi.ss.formula.eval.ValueEval; +import org.apache.poi.ss.formula.functions.FreeRefFunction; + +public final class SqrtPi implements FreeRefFunction { + + public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext ec) { + ValueEval arg0 = args[0]; + int srcRowIndex = ec.getRowIndex(); + int srcColumnIndex = ec.getColumnIndex(); + try { + // Retrieves a single value from a variety of different argument types according to standard + // Excel rules. Does not perform any type conversion. + ValueEval ve = OperandResolver.getSingleValue(arg0, srcRowIndex, srcColumnIndex); + + // Applies some conversion rules if the supplied value is not already a number. + // Throws EvaluationException(#VALUE!) if the supplied parameter is not a number + double arg = OperandResolver.coerceValueToDouble(ve); + + // this where all the heavy-lifting happens + double result = Math.sqrt(arg*Math.PI); + + // Excel uses the error code #NUM! instead of IEEE NaN and Infinity, + // so when a numeric function evaluates to Double.NaN or Double.Infinity, + // be sure to translate the result to the appropriate error code + if (Double.isNaN(result) || Double.isInfinite(result)) { + throw new EvaluationException(ErrorEval.NUM_ERROR); + } + + return new NumberEval(result); + } catch (EvaluationException e){ + return e.getErrorEval(); + } + } +} + +

+ If our function had been one of the BIFF8 Excel built-ins, it would have been based on + the Function interface instead. + There are sub-interfaces of Function that make life easier when implementing numeric functions + or functions + with a small, fixed number of arguments: +

+
    +
  • org.apache.poi.hssf.record.formula.functions.NumericFunction
  • +
  • org.apache.poi.hssf.record.formula.functions.Fixed0ArgFunction
  • +
  • org.apache.poi.hssf.record.formula.functions.Fixed1ArgFunction
  • +
  • org.apache.poi.hssf.record.formula.functions.Fixed2ArgFunction
  • +
  • org.apache.poi.hssf.record.formula.functions.Fixed3ArgFunction
  • +
  • org.apache.poi.hssf.record.formula.functions.Fixed4ArgFunction
  • +
+

+ Since SQRTPI() takes exactly one argument, we would start our implementation from + Fixed1ArgFunction. The differences for a BIFF8 Fixed1ArgFunction + are pretty small: +

+package ...; +import org.apache.poi.ss.formula.eval.EvaluationException; +import org.apache.poi.ss.formula.eval.ErrorEval; +import org.apache.poi.ss.formula.eval.NumberEval; +import org.apache.poi.ss.formula.eval.OperandResolver; +import org.apache.poi.ss.formula.eval.ValueEval; +import org.apache.poi.ss.formula.functions.Fixed1ArgFunction; + +public final class SqrtPi extends Fixed1ArgFunction { + + public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval arg0) { + try { + ... + } +} + +

+ Now when the implementation is ready we need to register it with the formula evaluator. + This is the same no matter which kind of function we're creating. We simply add the + following line to the program that is using POI: +

+WorkbookEvaluator.registerFunction("SQRTPI", SqrtPi); + +

+ Voila! The formula evaluator now recognizes SQRTPI()! +

+
Moving the function into the library +

+ If we choose instead to implement our function as part of the POI + library, the code is nearly identical. All POI functions + are part of one of two Java packages: org.apache.poi.ss.formula.functions + for BIFF8 Excel built-in functions, and org.apache.poi.ss.formula.atp + for Analysis ToolPak functions. The function still needs to implement the + appropriate base class, just as before. To implement our SQRTPI() + function in the POI library, we need to move the source code to + poi/src/main/java/org/apache/poi/ss/formula/atp/SqrtPi.java in + the POI source code, change the package statement, and add a + singleton instance: +

+package org.apache.poi.ss.formula.atp; +... +public final class SqrtPi implements FreeRefFunction { + + public static final FreeRefFunction instance = new SqrtPi(); + + private SqrtPi() { + // Enforce singleton + } + ... +} + +

+ If our function had been one of the BIFF8 Excel built-ins, we would instead have moved + the source code to + poi/src/main/java/org/apache/poi/ss/formula/functions/SqrtPi.java in + the POI source code, and changed the package statement to: +

+package org.apache.poi.ss.formula.functions; + +

+ POI library functions are registered differently from run-time-deployed functions. + Again, the techniques differ for the two types of library functions (remembering + that POI never releases the third type, UDFs). + For our Analysis ToolPak function, we have to update the list of functions in + org.apache.poi.ss.formula.atp.AnalysisToolPak.createFunctionsMap(): +

+... +private Map<String, FreeRefFunction> createFunctionsMap() { + Map<String, FreeRefFunction> m = new HashMap<>(114); + ... + r(m, "SQRTPI", SqrtPi.instance); + ... +} +... + +

+ If our function had been one of the BIFF8 Excel built-ins, + the registration instead would require updating an entry in the formula-function table, + poi/src/main/resources/org/apache/poi/ss/formula/function/functionMetadata.txt: +

+... +#Columns: (index, name, minParams, maxParams, returnClass, paramClasses, isVolatile, hasFootnote ) +... +359 SQRTPI 1 1 V V +... + +

+ and also updating the list of function implementation list in + org.apache.poi.ss.formula.eval.FunctionEval.produceFunctions(): +

+... +private static Function[] produceFunctions() { + ... + retval[359] = new SqrtPi(); + ... +} +... + +
+
Floating Point Arithmetic in Excel +

+ Excel uses the IEEE Standard for Double Precision Floating Point numbers + except two cases where it does not adhere to IEEE 754: +

+
    +
  1. Positive and Negative Infinities: Infinities occur when you divide by 0. + Excel does not support infinities, rather, it gives a #DIV/0! error in these cases. +
  2. +
  3. Not-a-Number (NaN): NaN is used to represent invalid operations + (such as infinity/infinity, infinity-infinity, or the square root of -1). + NaNs allow a program to continue past an invalid operation. + Excel instead immediately generates an error such as #NUM! or #DIV/0!. +
  4. +
+

+ Be aware of these two cases when saving results of your scientific calculations in Excel: + “where are my Infinities and NaNs? They are gone!” +

+
+
Testing Framework +

+ Automated testing of the implemented Function is easy. + The source code for this is in the file: org.apache.poi.hssf.record.formula.GenericFormulaTestCase.java. + This class has a reference to the test xls file (not a test xls, the test xls :) ) + which may need to be changed for your environment. Once you do that, in the test xls, + locate the entry for the function that you have implemented and enter different tests + in a cell in the FORMULA row. Then copy the "value of" the formula that you entered in the + cell just below it (this is easily done in excel as: + [copy the formula cell] > [go to cell below] > Edit > Paste Special > Values > "ok"). + You can enter multiple such formulas and paste their values in the cell below and the + test framework will automatically test if the formula evaluation matches the expected + value (Again, hard to put in words, so if you will, please take time to quickly look + at the code and the currently entered tests in the patch attachment "FormulaEvalTestData.xls" + file). +

+ This style of testing appears to have been abandoned. This section needs to be completely rewritten. +
+
+ +
+ Appendix A — Functions supported by POI +

+ Functions supported by POI (as of v5.2.0 release) +

+ABS +ACOS +ACOSH +ADDRESS +AND +AREAS +ASIN +ASINH +ATAN +ATAN2 +ATANH +AVEDEV +AVERAGE +AVERAGEIFS +BIN2DEC +CEILING +CHAR +CHOOSE +CLEAN +CODE +COLUMN +COLUMNS +COMBIN +COMPLEX +CONCAT +CONCATENATE +COS +COSH +COUNT +COUNTA +COUNTBLANK +COUNTIF +COUNTIFS +DATE +DATEVALUE +DAY +DAYS360 +DEC2BIN +DEC2HEX +DEGREES +DELTA +DEVSQ +DGET +DMAX +DMIN +DOLLAR +DSUM +EDATE +EOMONTH +ERROR.TYPE +EVEN +EXACT +EXP +FACT +FACTDOUBLE +FALSE +FIND +FIXED +FLOOR +FREQUENCY +FV +GEOMEAN +HEX2DEC +HLOOKUP +HOUR +HYPERLINK +IF +IFERROR +IFNA +IFS +IMAGINARY +IMREAL +INDEX +INDIRECT +INT +INTERCEPT +IPMT +IRR +ISBLANK +ISERR +ISERROR +ISEVEN +ISLOGICAL +ISNA +ISNONTEXT +ISNUMBER +ISODD +ISREF +ISTEXT +LARGE +LEFT +LEN +LN +LOG +LOG10 +LOOKUP +LOWER +MATCH +MAX +MAXA +MAXIFS +MDETERM +MEDIAN +MID +MIN +MINA +MINIFS +MINUTE +MINVERSE +MIRR +MMULT +MOD +MODE +MONTH +MROUND +NA +NETWORKDAYS +NOT +NOW +NPER +NPV +OCT2DEC +ODD +OFFSET +OR +PERCENTILE +PERCENTRANK +PERCENTRANK.EXC +PERCENTRANK.INC +PI +PMT +POISSON +POWER +PPMT +PRODUCT +PROPER +PV +QUOTIENT +RADIANS +RAND +RANDBETWEEN +RANK +RATE +REPLACE +REPT +RIGHT +ROMAN +ROUND +ROUNDDOWN +ROUNDUP +ROW +ROWS +SEARCH +SECOND +SIGN +SIN +SINGLE +SINH +SLOPE +SMALL +SQRT +STDEV +SUBSTITUTE +SUBTOTAL +SUM +SUMIF +SUMIFS +SUMPRODUCT +SUMSQ +SUMX2MY2 +SUMX2PY2 +SUMXMY2 +SWITCH +T +T.DIST +T.DIST.2T +T.DIST.RT +TAN +TANH +TDIST +TEXT +TEXTJOIN +TIME +TIMEVALUE +TODAY +TRANSPOSE +TREND +TRIM +TRUE +TRUNC +UPPER +VALUE +VAR +VARP +VLOOKUP +WEEKDAY +WEEKNUM +WORKDAY +XLOOKUP +XMATCH +YEAR +YEARFRAC +
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/eval.xml b/src/documentation/content/xdocs/components/spreadsheet/eval.xml new file mode 100644 index 0000000000..aee0c38008 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/eval.xml @@ -0,0 +1,410 @@ + + + + + +
+ Formula Evaluation +
+ +
Introduction +

The POI formula evaluation code enables you to calculate the result of + formulas in Excels sheets read-in, or created in POI. This document explains + how to use the API to evaluate your formulas. +

+
+ + +
Why do I need to evaluate formulas? +

The Excel file format (both .xls and .xlsx) stores a "cached" result for + every formula along with the formula itself. This means that when the file + is opened, it can be quickly displayed, without needing to spend a long + time calculating all of the formula results. It also means that when reading + a file through Apache POI, the result is quickly available to you too! +

+

After making changes with Apache POI to either Formula Cells themselves, + or those that they depend on, you should normally perform a Formula + Evaluation to have these "cached" results updated. This is normally done + after all changes have been performed, but before you write the file out. + If you don't do this, there's a good chance that when you open the file in + Excel, until you go to the cell and hit enter or F9, you will either see + the old value or '#VALUE!' for the cell. (Sometimes Excel will notice + itself, and trigger a recalculation on load, but unless you know you are + using volatile functions it's generally best to trigger a Recalulation + through POI) +

+
+ + +
Status +

The code currently provides implementations for all the arithmatic operators. + It also provides implementations for approx. 140 built in + functions in Excel. The framework however makes it easy to add + implementation of new functions. See the Formula + evaluation development guide and javadocs + for details.

+

Both HSSFWorkbook and XSSFWorkbook are supported, so you can + evaluate formulas on both .xls and .xlsx files.

+

User-defined functions are supported, + but must be rewritten in Java and registered with the macro-enabled workbook in order to be evaluated. +

+
+
User API How-TO +

The following code demonstrates how to use the FormulaEvaluator + in the context of other POI excel reading code. +

+

There are several ways in which you can use the FormulaEvalutator API.

+ + +
Using FormulaEvaluator.<strong>evaluate</strong>(Cell cell) +

This evaluates a given cell, and returns the new value, + without affecting the cell

+ +FileInputStream fis = new FileInputStream("c:/temp/test.xls"); +Workbook wb = new HSSFWorkbook(fis); //or new XSSFWorkbook("c:/temp/test.xls") +Sheet sheet = wb.getSheetAt(0); +FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); + +// suppose your formula is in B3 +CellReference cellReference = new CellReference("B3"); +Row row = sheet.getRow(cellReference.getRow()); +Cell cell = row.getCell(cellReference.getCol()); + +CellValue cellValue = evaluator.evaluate(cell); + +switch (cellValue.getCellType()) { + case Cell.CELL_TYPE_BOOLEAN: + System.out.println(cellValue.getBooleanValue()); + break; + case Cell.CELL_TYPE_NUMERIC: + System.out.println(cellValue.getNumberValue()); + break; + case Cell.CELL_TYPE_STRING: + System.out.println(cellValue.getStringValue()); + break; + case Cell.CELL_TYPE_BLANK: + break; + case Cell.CELL_TYPE_ERROR: + break; + + // CELL_TYPE_FORMULA will never happen + case Cell.CELL_TYPE_FORMULA: + break; +} + +

Thus using the retrieved value (of type + FormulaEvaluator.CellValue - a nested class) returned + by FormulaEvaluator is similar to using a Cell object + containing the value of the formula evaluation. CellValue is + a simple value object and does not maintain reference + to the original cell. +

+
+ + +
Using FormulaEvaluator.<strong>evaluateFormulaCell</strong>(Cell cell) +

evaluateFormulaCell(Cell cell) + will check to see if the supplied cell is a formula cell. + If it isn't, then no changes will be made to it. If it is, + then the formula is evaluated. The value for the formula + is saved alongside it, to be displayed in excel. The + formula remains in the cell, just with a new value

+

The return of the function is the type of the + formula result, such as Cell.CELL_TYPE_BOOLEAN

+ +FileInputStream fis = new FileInputStream("/somepath/test.xls"); +Workbook wb = new HSSFWorkbook(fis); //or new XSSFWorkbook("/somepath/test.xls") +Sheet sheet = wb.getSheetAt(0); +FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); + +// suppose your formula is in B3 +CellReference cellReference = new CellReference("B3"); +Row row = sheet.getRow(cellReference.getRow()); +Cell cell = row.getCell(cellReference.getCol()); + +if (cell!=null) { + switch (evaluator.evaluateFormulaCell(cell)) { + case Cell.CELL_TYPE_BOOLEAN: + System.out.println(cell.getBooleanCellValue()); + break; + case Cell.CELL_TYPE_NUMERIC: + System.out.println(cell.getNumericCellValue()); + break; + case Cell.CELL_TYPE_STRING: + System.out.println(cell.getStringCellValue()); + break; + case Cell.CELL_TYPE_BLANK: + break; + case Cell.CELL_TYPE_ERROR: + System.out.println(cell.getErrorCellValue()); + break; + + // CELL_TYPE_FORMULA will never occur + case Cell.CELL_TYPE_FORMULA: + break; + } +} + +
+ + +
Using FormulaEvaluator.<strong>evaluateInCell</strong>(Cell cell) +

evaluateInCell(Cell cell) will check to + see if the supplied cell is a formula cell. If it isn't, + then no changes will be made to it. If it is, then the + formula is evaluated, and the new value saved into the cell, + in place of the old formula.

+ +FileInputStream fis = new FileInputStream("/somepath/test.xls"); +Workbook wb = new HSSFWorkbook(fis); //or new XSSFWorkbook("/somepath/test.xls") +Sheet sheet = wb.getSheetAt(0); +FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); + +// suppose your formula is in B3 +CellReference cellReference = new CellReference("B3"); +Row row = sheet.getRow(cellReference.getRow()); +Cell cell = row.getCell(cellReference.getCol()); + +if (cell!=null) { + switch (evaluator.evaluateInCell(cell).getCellType()) { + case Cell.CELL_TYPE_BOOLEAN: + System.out.println(cell.getBooleanCellValue()); + break; + case Cell.CELL_TYPE_NUMERIC: + System.out.println(cell.getNumericCellValue()); + break; + case Cell.CELL_TYPE_STRING: + System.out.println(cell.getStringCellValue()); + break; + case Cell.CELL_TYPE_BLANK: + break; + case Cell.CELL_TYPE_ERROR: + System.out.println(cell.getErrorCellValue()); + break; + + // CELL_TYPE_FORMULA will never occur + case Cell.CELL_TYPE_FORMULA: + break; + } +} + + +
+ + +
Re-calculating all formulas in a Workbook + +FileInputStream fis = new FileInputStream("/somepath/test.xls"); +Workbook wb = new HSSFWorkbook(fis); //or new XSSFWorkbook("/somepath/test.xls") +FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); +for (Sheet sheet : wb) { + for (Row r : sheet) { + for (Cell c : r) { + if (c.getCellType() == Cell.CELL_TYPE_FORMULA) { + evaluator.evaluateFormulaCell(c); + } + } + } +} + + +

Alternately, if you know which of HSSF or XSSF you're working + with, then you can call the static + evaluateAllFormulaCells method on the appropriate + HSSFFormulaEvaluator or XSSFFormulaEvaluator class.

+
+
+ + +
Recalculation of Formulas +

+ In certain cases you may want to force Excel to re-calculate formulas when the workbook is opened. + Consider the following example: +

+

+ Open Excel and create a new workbook. On the first sheet set A1=1, B1=1, C1=A1+B1. + Excel automatically calculates formulas and the value in C1 is 2. So far so good. +

+

+ Now modify the workbook with POI: +

+ + Workbook wb = WorkbookFactory.create(new FileInputStream("workbook.xls")); + + Sheet sh = wb.getSheetAt(0); + sh.getRow(0).getCell(0).setCellValue(2); // set A1=2 + + FileOutputStream out = new FileOutputStream("workbook2.xls"); + wb.write(out); + out.close(); + +

+ Now open workbook2.xls in Excel and the value in C1 is still 2 while you expected 3. Wrong? No! + The point is that Excel caches previously calculated results and you need to trigger recalculation to updated them. + It is not an issue when you are creating new workbooks from scratch, but important to remember when you are modifing + existing workbooks with formulas. This can be done in two ways: +

+

+ 1. Re-evaluate formulas with POI's FormulaEvaluator: +

+ + Workbook wb = WorkbookFactory.create(new FileInputStream("workbook.xls")); + + Sheet sh = wb.getSheetAt(0); + sh.getRow(0).getCell(0).setCellValue(2); // set A1=2 + + wb.getCreationHelper().createFormulaEvaluator().evaluateAll(); + +

+ 2. Delegate re-calculation to Excel. The application will perform a full recalculation when the workbook is opened: +

+ + Workbook wb = WorkbookFactory.create(new FileInputStream("workbook.xls")); + + Sheet sh = wb.getSheetAt(0); + sh.getRow(0).getCell(0).setCellValue(2); // set A1=2 + + wb.setForceFormulaRecalculation(true); + +
+ + +
External (Cross-Workbook) references +

It is possible for a formula in an Excel spreadsheet to + refer to a Named Range or Cell in a different workbook. + These cross-workbook references are normally called External + References. These are formulas which look something like:

+ + =SUM([Finances.xlsx]Numbers!D10:D25) + =SUM('C:\Data\[Finances.xlsx]Numbers'!D10:D25) + =SUM([Finances.xlsx]Range20) + +

If you don't have access to these other workbooks, then you + should call + setIgnoreMissingWorkbooks(true) + to tell the Formula Evaluator to skip evaluating any external + references it can't look up.

+

In order for POI to be able to evaluate external references, it + needs access to the workbooks in question. As these don't necessarily + have the same names on your system as in the workbook, you need to + give POI a map of external references to open workbooks, through + the + setupReferencedWorkbooks(java.util.Map<java.lang.String,FormulaEvaluator> workbooks) + method. You should normally do something like:

+ +// Create a FormulaEvaluator to use +FormulaEvaluator mainWorkbookEvaluator = workbook.getCreationHelper().createFormulaEvaluator(); + +// Track the workbook references +Map<String,FormulaEvaluator> workbooks = new HashMap<String, FormulaEvaluator>(); +// Add this workbook +workbooks.put("report.xlsx", mainWorkbookEvaluator); +// Add two others +workbooks.put("input.xls", WorkbookFactory.create("C:\\temp\\input22.xls").getCreationHelper().createFormulaEvaluator()); +workbooks.put("lookups.xlsx", WorkbookFactory.create("/home/poi/data/tmp-lookups.xlsx").getCreationHelper().createFormulaEvaluator()); + +// Attach them +mainWorkbookEvaluator.setupReferencedWorkbooks(workbooks); + +// Evaluate +mainWorkbookEvaluator.evaluateAll(); + +
+ + +
Performance Notes +
    +
  • Generally you should have to create only one FormulaEvaluator + instance per Workbook. The FormulaEvaluator will cache + evaluations of dependent cells, so if you have multiple + formulas all depending on a cell then subsequent evaluations + will be faster. +
  • +
  • You should normally perform all of your updates to cells, + before triggering the evaluation, rather than doing one + cell at a time. By waiting until all the updates/sets are + performed, you'll be able to take best advantage of the caching + for complex formulas. +
  • +
  • If you do end up making changes to cells part way through + evaluation, you should call notifySetFormula or + notifyUpdateCell to trigger suitable cache clearance. + Alternately, you could instantiate a new FormulaEvaluator, + which will start with empty caches. +
  • +
  • Also note that FormulaEvaluator maintains a reference to + the sheet and workbook, so ensure that the evaluator instance + is available for garbage collection when you are done with it + (in other words don't maintain long lived reference to + FormulaEvaluator if you don't really need to - unless + all references to the sheet and workbook are removed, these + don't get garbage collected and continue to occupy potentially + large amounts of memory). +
  • +
  • CellValue instances however do not maintain reference to the + Cell or the sheet or workbook, so these can be long-lived + objects without any adverse effect on performance. +
  • +
+
+
Formula Evaluation Debugging +

POI is not perfect and you may stumble across formula evaluation problems (Java exceptions + or just different results) in your special use case. To support an easy detailed analysis, a special + logging of the full evaluation is provided.

+

POI 5.1.0 and above uses Log4J 2.x as a logging framework. Try to set up a logging + configuration that lets you see the info and other log messages.

+

Example use:

+ + // open your file + Workbook wb = new HSSFWorkbook(new FileInputStream("foobar.xls")); + FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); + + // get your cell + Cell cell = wb.getSheet(0).getRow(0).getCell(0); // just a dummy example + + // perform debug output for the next evaluate-call only + evaluator.setDebugEvaluationOutputForNextEval(true); + evaluator.evaluateFormulaCell(cell); + evaluator.evaluateFormulaCell(cell); // no logging performed for this next evaluate-call + +

The special Logger called "POI.FormulaEval" is used (useful if you use the CommonsLogger and a detailed logging configuration). + The used log levels are WARN and INFO (for detailed parameter info and results) - the level are so high to allow this + special logging without being disturbed by the bunch of DEBUG log entries from other classes.

+
+ + +
Formula Evaluation and SXSSF +

For versions before 3.13 final, no formula evaluation is possible with + SXSSF.

+

If you are using POI 3.13 final or newer, formula evaluation is possible with SXSSF, + but with some caveats.

+

The biggest restriction is that, since evaluating a cell needs that cell in memory + and any others it depends on, only pure-function formulas and formulas referencing + nearby cells can be evaluated with SXSSF. If a formula references a cell that hasn't + yet been written, or one which has already been flushed to disk, then it won't be + possible to evaluate it.

+

Because of this, a call to wb.getCreationHelper().createFormulaEvaluator().evaluateAll(); + will very rarely work on SXSSF, as it's very rare that all the cells wil be available + and in memory at any time! Instead, it is suggested to evaluate formula cells just + after writing them, or shortly after when cells they depend on are added. Just make + sure that all cells needing or needed for evaluation are inside the window.

+
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/examples.xml b/src/documentation/content/xdocs/components/spreadsheet/examples.xml new file mode 100644 index 0000000000..b09384dac1 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/examples.xml @@ -0,0 +1,274 @@ + + + + + +
+ HSSF and XSSF Examples + + + +
+ +
HSSF and XSSF common examples +

Apache POI comes with a number of examples that demonstrate how you + can use the POI API to create documents from "real life". + The examples below based on common XSSF-HSSF interfaces so that you + can generate either *.xls or *.xlsx output just by setting a + command-line argument: +

+ + BusinessPlan -xls + or + BusinessPlan -xlsx + +

All sample source is available in SVN

+

In addition, there are a handful of + HSSF only and + XSSF only examples as well. +

+ +
Available Examples +

+ The following examples are available: +

+ +
+ + + +
Business Plan +

The BusinessPlan + application creates a sample business plan with three phases, weekly iterations and time highlighting. Demonstrates advanced cell formatting + (number and date formats, alignments, fills, borders) and various settings for organizing data in a sheet (freezed panes, grouped rows). +

+
+
+ + +
Calendar +

The Calendar + demo creates a multi sheet calendar. Each month is on a separate sheet. +

+
+
+ + +
Loan Calculator +

The LoanCalculator + demo creates a simple loan calculator. Demonstrates advance usage of cell formulas and named ranges. +

+
+
+ + +
Timesheet +

The Timesheet + demo creates a weekly timesheet with automatic calculation of total hours. Demonstrates advance usage of cell formulas. +

+
+
+ + +
Conditional Formats +

The ConditionalFormats + demo is a collection of short examples showing what you can do with Excel conditional formatting in POI: +

+
    +
  • Highlight cells based on their values
  • +
  • Highlight a range of cells based on a formula
  • +
  • Hide errors
  • +
  • Hide the duplicate values
  • +
  • Highlight duplicate entries in a column
  • +
  • Highlight items that are in a list on the worksheet
  • +
  • Highlight payments that are due in the next thirty days
  • +
  • Shade alternating rows on the worksheet
  • +
  • Shade bands of rows on the worksheet
  • +
+
+ + +
Formula Examples +

The CalculateMortgage + example demonstrates a simple user-defined function to calculate + principal and interest.

+

The CheckFunctionsSupported + example shows how to test what functions and formulas aren't + supported from a given file.

+

The SettingExternalFunction + example demonstrates how to use externally provided (third-party) + formula add-ins.

+

The UserDefinedFunctionExample + example demonstrates how to invoke a User Defined Function for a + given Workbook instance using POI's UDFFinder implementation.

+
+ + +
Add Dimensioned Image +

The AddDimensionedImage + example demonstrates how to add an image to a worksheet and set that + images size to a specific number of millimetres irrespective of the + width of the columns or height of the rows.

+
+ + +
Aligned Cells +

The AligningCells + example demonstrates how various alignment options work.

+
+ + +
Cell Style Details +

The CellStyleDetails + example demonstrates how to read excel styles for cells.

+
+ + +
Linked Dropdown Lists +

The LinkedDropDownLists + example demonstrates one technique that may be used to create linked + or dependent drop down lists.

+
+ + +
Common SS Performance Test +

The SSPerformanceTest + example provides a way to create simple example files of varying + sizes, and to calculate how long they take. Useful for benchmarking + your system, and to also test if slow performance is due to Apache + POI itself or to your own code.

+
+ + +
ToHtml +

The ToHtml + example shows how to display a spreadsheet in HTML using the classes for spreadsheet display. +

+
+ + +
ToCSV +

The ToCSV + example demonstrates one way to convert an Excel spreadsheet into a CSV file. +

+
+
+ + +
HSSF-only Examples +

All the HSSF-only examples can be found in + SVN

+ +
+ + +
XSSF-only Examples +

All the XSSF-only examples can be found in + SVN

+ +
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/excelant.xml b/src/documentation/content/xdocs/components/spreadsheet/excelant.xml new file mode 100644 index 0000000000..9c68812f74 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/excelant.xml @@ -0,0 +1,317 @@ + + + + + +
+ ExcelAnt - Ant Tasks for Validating Excel Spreadsheets + + + + +
+ +
ExcelAnt - Ant Tasks for Validating Excel Spreadsheets + +
Introduction +

ExcelAnt is a set of Ant tasks that make it possible to verify or test + a workbook without having to write Java code. Of course, the tasks themselves + are written in Java, but to use this framework you only need to know a little + bit about Ant.

+

This document covers the basic usage and set up of ExcelAnt.

+

This document will assume basic familiarity with Ant and Ant build files.

+
+
Setup +

To start with ExcelAnt, you'll need to have the POI 3.8 or higher jar files. If you test only .xls +workbooks then you need to have the following jars in your path:

+
    +
  • poi-excelant-$version-YYYYDDMM.jar
  • +
  • poi-$version-YYYYDDMM.jar
  • +
  • poi-ooxml-$version-YYYYDDMM.jar
  • +
+

If you evaluate .xlsx workbooks then you need to add these:

+
    +
  • poi-ooxml-lite-$version-YYYYDDMM.jar
  • +
  • xmlbeans.jar
  • +
+

For example, if you have these jars in a lib/ dir in your project, your build.xml + might look like this:

+ + + + + + + +]]> +

Next, you'll need to define the Ant tasks. There are several ways to use ExcelAnt:

+ +
  • The traditional way:
+ +]]> +

+ Where excelant.path refers to the classpath with POI jars. + Using this approach the provided extensions will live in the default namespace. Note that the default task/typenames (evaluate, test) may be too generic and should either be explicitly overridden or used with a namespace. +

+
  • Similar, but assigning a namespace URI:
+ + + + + + + + + + +]]> +
+ +
A Simple Example +

The simplest example of using Excel is the ability to validate that POI is giving you back + the value you expect it to. Does this mean that POI is inaccurate? Hardly. There are cases + where POI is unable to evaluate cells for a variety of reasons. If you need to write code + to integrate a worksheet into an app, you may want to know that it's going to work before + you actually try to write that code. ExcelAnt helps with that.

+ +

Consider the mortgage-calculation.xls + file found in the Examples (link broken / file is missing). This sheet is shown below:

+ +
+ +

This sheet calculates the principal and interest payment for a mortgage based + on the amount of the loan, term and rate. To write a simple ExcelAnt test you + need to tell ExcelAnt about the file like this:

+ + + + + + + + + +]]> + + +

This code sets up ExcelAnt to access the file defined in the ant property + xls.file. Then it creates a 'test' named 'checkValue'. Finally it tries + to evaluate the B4 on the sheet named 'MortgageCalculator'. There are some assumptions + here that are worth explaining. For starters, ExcelAnt is focused on the testing + numerically oriented sheets. The <evaluate> task is actually evaluating the + cell as a formula using a FormulaEvaluator instance from POI. Therefore it will fail + if you point it to a cell that doesn't contain a formula or a test a plain old number.

+ +

Having said all that, here is what the output looks like:

+ + + +
+ +
Setting Values into a Cell +

So now we know that at a minimum POI can use our sheet to calculate the existing value. + This is an important point: in many cases sheets have dependencies, i.e., cells they reference. + As is often the case, these cells may have dependencies, which may have dependencies, etc. + The point is that sometimes a dependent cell may get adjusted by a macro or a function + and it may be that POI doesn't have the capabilities to do the same thing. This test + verifies that we can rely on POI to retrieve the default value, based on the stored values + of the sheet. Now we want to know if we can manipulate those dependencies and verify + the output.

+ +

To verify that we can manipulate cell values, we need a way in ExcelAnt to set a value. + This is provided by the following task types:

+
    +
  • setDouble() - sets the specified cell as a double.
  • +
  • setFormula() - sets the specified cell as a formula.
  • +
  • setString() = sets the specified cell as a String.
  • +
+ +

For the purposes of this example we'll use the <setDouble> task. Let's + start with a $240,000, 30 year loan at 11% (let's pretend it's like 1984). Here + is how we will set that up:

+ + + + + +]]> + +

Don't forget that we're verifying the behavior so you need to put all this + into the sheet. That is how I got the result of $2,285 and change. So save your + changes and run it; you should get the following:

+ + + +
+ +
Getting More Details + +

This is great, it's working! However, suppose you want to see a little more detail. The + ExcelAnt tasks leverage the Ant logging so you can add the -verbose and -debug flags to + the Ant command line to get more detail. Try adding -verbose. Here is what + you should see:

+ + + + +

We see a little more detail. Notice that we see that there is a setting for global precision. + Up until now we've been setting the precision on each evaluate that we call. This + is obviously useful but it gets cumbersome. It would be better if there were a way + that we could specify a global precision - and there is. There is a <precision> + tag that you can specify as a child of the <excelant> tag. Let's go back to + our original task we set up earlier and modify it:

+ + + + + + + + + + + +]]> + +

In this example we have set the global precision to 1.0e-3. This means that + in the absence of something more stringent, all tests in the task will use + the global precision. We can still override this by specifying the + precision attribute of all of our <evaluate> task. Let's first run + this task with the global precision and the -verbose flag:

+ + + + +

As the output clearly shows, the test itself has no precision but there is + the global precision. Additionally, it tells us we're going to use that + more stringent global value. Now suppose that for this test we want + to use a more stringent precision, say 1.0e-4. We can do that by adding + the precision attribute back to the <evaluate> task:

+ + + + + + + + + + +]]> + + +

Now when you re-run this test with the verbose flag you will see that + your test ran and passed with the higher precision:

+ +
+ +
Leveraging User Defined Functions +

POI has an excellent feature (besides ExcelAnt) called User Defined Functions, + that allows you to write Java code that will be used in place of custom VB + code or macros is a spreadsheet. If you have read the documentation and written + your own FreeRefFunction implmentations, ExcelAnt can make use of this code. + For each <excelant> task you define you can nest a <udf> tag + which allows you to specify the function alias and the class name.

+ +

Consider the previous example of the mortgage calculator. What if, instead + of being a formula in a cell, it was a function defined in a VB macro? As luck + would have it, we already have an example of this in the examples from the + User Defined Functions example, so let's use that. In the example spreadsheet + there is a tab for MortgageCalculatorFunction, which will use. If you look in + cell B4, you see that rather than a messy cell based formula, there is only the function + call. Let's not get bogged down in the function/Java implementation, as these + are covered in the User Defined Function documentation. Let's just add + a new target and test to our existing build file:

+ + + + + + + + + + + + +]]> + +

So if you look at this carefully it looks the same as the previous examples. We + still use the global precision, we're still setting values, and we still want + to evaluate a cell. The only real differences are the sheet name and the + addition of the function.

+
+
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/formula.xml b/src/documentation/content/xdocs/components/spreadsheet/formula.xml new file mode 100644 index 0000000000..3e2ed30647 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/formula.xml @@ -0,0 +1,120 @@ + + + + + +
+ Formula Support + + + +
+ +
Introduction +

+ This document describes the current state of formula support in POI. + The information in this document currently applies to the 3.13 version of POI. + Since this area is a work in progress, this document will be updated with new + features as and when they are added. +

+ +
+
The basics +

+ In org.apache.poi.ss.usermodel.Cell + setCellFormula("formulaString") is used to add a + formula to a sheet, and getCellFormula() is used to retrieve + the string representation of a formula. +

+

+ We aim to support the complete excel grammar for formulas. Thus, the string that + you pass in to the setCellFormula call should be what you expect to + type into excel. Also, note that you should NOT add a "=" to the front of the string. +

+

+ Please note that localized versions of Excel allow to enter localized + function-names. However internally Excel stores the English names and thus POI + only supports these and not the localized ones. Also note that only commas may be + used to separate arguments, as per the Excel English style, alternate delimeters + used in other localizations are not supported. +

+
+
Supported Features +
    +
  • References: single cell & area, 2D & 3D, relative & absolute
  • +
  • Literals: number, text, boolean, error and array
  • +
  • Operators: arithmetic and logical, some region operators
  • +
  • Built-in functions: over 350 recognised, 280 evaluatable
  • +
  • Add-in functions: 24 from Analysis Toolpack
  • +
  • Array Formulas: via Sheet.setArrayFormula() and Sheet.removeArrayFormula()
  • +
  • Region operators: union, intersection
  • +
+
+
Not yet supported +
    +
  • Manipulating table formulas (In Excel, formulas that look like "{=...}" as opposed to "=...")
  • +
  • Parsing of previously uncalled add-in functions
  • +
  • Preservation of whitespace in formulas (when POI manipulates them)
  • +
+
+ +
Supported Functions +

To get the list of formula functions that POI supports, you need to + call some code!

+

The methods you need are available on + org.apache.poi.ss.formula.eval.FunctionEval. + To find which functions your copy of Apache POI supports, use + getSupportedFunctionNames() + to get a list of the implemented function names. For the list of functions that + POI knows the name of, but doesn't currently implement, use + getNotSupportedFunctionNames() +

+
+ +
Internals +

+ Formulas in Excel are stored as sequences of tokens in Reverse Polish Notation order. The + open office XLS spec is the best + documentation you will find for the format. +

+ +

+ The tokens used by excel are modeled as individual *Ptg classes in the + org.apache.poi.hssf.record.formula package. +

+

+ The task of parsing a formula string into an array of RPN ordered tokens is done by the + org.apache.poi.ss.formula.FormulaParser class. This class implements a hand + written recursive descent parser. +

+

+ Formula tokens in Excel are stored in one of three possible operand classes : + Reference, Value and Array. Based on the location of a token, its class can change + in complicated and undocumented ways. While we have support for most cases, we + are not sure if we have covered all bases (since there is no documentation for this area.) + We would therefore like you to report any + occurrence of #VALUE! in a cell upon opening a POI generated workbook in excel. (Check that + typing the formula into Excel directly gives a valid result.) +

+

Check out the javadocs for details. +

+
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/hacking-hssf.xml b/src/documentation/content/xdocs/components/spreadsheet/hacking-hssf.xml new file mode 100644 index 0000000000..784aafbf22 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/hacking-hssf.xml @@ -0,0 +1,89 @@ + + + + + +
+ Hacking HSSF + + + + +
+ +
Where Can I Find Documentation on Feature X +

+ You might find the + 'Excel 97 Developer's Kit' (out of print, Microsoft Press, no + restrictive covenants, available on Amazon.com) helpful for + understanding the file format. +

+

+ Also useful is the open office XLS spec. We + are collaborating with the maintainer of the spec so if you think you can add something to their + document just send through your changes. +

+
+
Help, I Can't Find Feature X Documented Anywhere +
    +
  1. + Look at OpenOffice.org or Gnumeric sources if its implemented there. +
  2. +
  3. + Use org.apache.poi.hssf.dev.BiffViewer to view the structure of the + file. Experiment by adding one criteria entry at a time. See what it + does to the structure, infer behavior and structure from it. Using the + unix diff command (or get cygwin from www.cygwin.com for windows) you + can figure out a lot very quickly. Unimplemented records show up as + 'UNKNOWN' and prints a hex dump. +
  4. +
+
+
Low-level Record Generation +

+ Low level records can be time consuming to created. We created a record + generator to help generate some of the simpler tasks. +

+

+ We use XML + descriptors to generate the Java code (which sure beats the heck out of + the PERL scripts originally used ;-) for low level records. The + generator is kinda alpha-ish right now and could use some enhancement, + so you may find that to be about 1/2 of the work. Notice this is in + org.apache.poi.hssf.record.definitions. +

+
+
Important Notice +

One thing to note: If you are making a large code contribution we need to ensure + any participants in this process have never + signed a "Non Disclosure Agreement" with Microsoft, and have not + received any information covered by such an agreement. If they have + they'll not be able to participate in the POI project. For large contributions we + may ask you to sign an agreement.

+
+
What Can I Work On? +

Ask in the dev mailing list for advice.

+
+
What Else Should I Know? +

Make sure you read the contributing section + as it contains more generation information about contributing to POI in general.

+
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/how-to.xml b/src/documentation/content/xdocs/components/spreadsheet/how-to.xml new file mode 100644 index 0000000000..006a4e2a21 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/how-to.xml @@ -0,0 +1,884 @@ + + + + + +
+ The New Halloween Document + + + + + + +
+ +
How to use the HSSF API + +
Capabilities +

This release of the how-to outlines functionality for the + current svn trunk. + Those looking for information on previous releases should + look in the documentation distributed with that release.

+

+ HSSF allows numeric, string, date or formula cell values to be written to + or read from an XLS file. Also + in this release is row and column sizing, cell styling (bold, + italics, borders,etc), and support for both built-in and user + defined data formats. Also available is + an event-based API for reading XLS files. + It differs greatly from the read/write API + and is intended for intermediate developers who need a smaller + memory footprint. +

+
+
Different APIs +

There are a few different ways to access the HSSF API. These + have different characteristics, so you should read up on + all to select the best for you.

+ +
+
+
General Use + +
User API (HSSF and XSSF) +
Writing a new file + +

The high level API (package: org.apache.poi.ss.usermodel) + is what most people should use. Usage is very simple. +

+

Workbooks are created by creating an instance of + org.apache.poi.ss.usermodel.Workbook. Either create + a concrete class directly + (org.apache.poi.hssf.usermodel.HSSFWorkbook or + org.apache.poi.xssf.usermodel.XSSFWorkbook), or use + the handy factory class + org.apache.poi.ss.usermodel.WorkbookFactory. +

+

Sheets are created by calling createSheet() from an existing + instance of Workbook, the created sheet is automatically added in + sequence to the workbook. Sheets do not in themselves have a sheet + name (the tab at the bottom); you set + the name associated with a sheet by calling + Workbook.setSheetName(sheetindex,"SheetName",encoding). + For HSSF, the name may be in 8bit format + (HSSFWorkbook.ENCODING_COMPRESSED_UNICODE) + or Unicode (HSSFWorkbook.ENCODING_UTF_16). Default + encoding for HSSF is 8bit per char. For XSSF, the name + is automatically handled as unicode. +

+

Rows are created by calling createRow(rowNumber) from an existing + instance of Sheet. Only rows that have cell values should be + added to the sheet. To set the row's height, you just call + setRowHeight(height) on the row object. The height must be given in + twips, or 1/20th of a point. If you prefer, there is also a + setRowHeightInPoints method. +

+

Cells are created by calling createCell(column, type) from an + existing Row. Only cells that have values should be added to the + row. Cells should have their cell type set to either + Cell.CELL_TYPE_NUMERIC or Cell.CELL_TYPE_STRING depending on + whether they contain a numeric or textual value. Cells must also have + a value set. Set the value by calling setCellValue with either a + String or double as a parameter. Individual cells do not have a + width; you must call setColumnWidth(colindex, width) (use units of + 1/256th of a character) on the Sheet object. (You can't do it on + an individual basis in the GUI either).

+

Cells are styled with CellStyle objects which in turn contain + a reference to an Font object. These are created via the + Workbook object by calling createCellStyle() and createFont(). + Once you create the object you must set its parameters (colors, + borders, etc). To set a font for an CellStyle call + setFont(fontobj). +

+

Once you have generated your workbook, you can write it out by + calling write(outputStream) from your instance of Workbook, passing + it an OutputStream (for instance, a FileOutputStream or + ServletOutputStream). You must close the OutputStream yourself. HSSF + does not close it for you. +

+

Here is some example code (excerpted and adapted from + org.apache.poi.hssf.dev.HSSF test class):

+ +
+
Reading or modifying an existing file + +

Reading in a file is equally simple. To read in a file, create a +new instance of org.apache.poi.poifs.Filesystem, passing in an open InputStream, such as a FileInputStream +for your XLS, to the constructor. Construct a new instance of +org.apache.poi.hssf.usermodel.HSSFWorkbook passing the +Filesystem instance to the constructor. From there you have access to +all of the high level model objects through their assessor methods +(workbook.getSheet(sheetNum), sheet.getRow(rownum), etc). +

+

Modifying the file you have read in is simple. You retrieve the +object via an assessor method, remove it via a parent object's remove +method (sheet.removeRow(hssfrow)) and create objects just as you +would if creating a new xls. When you are done modifying cells just +call workbook.write(outputstream) just as you did above.

+

An example of this can be seen in +org.apache.poi.hssf.usermodel.examples.HSSFReadWrite.

+
+
+ + +
Event API (HSSF Only) + +

The event API is newer than the User API. It is intended for intermediate + developers who are willing to learn a little bit of the low level API + structures. Its relatively simple to use, but requires a basic + understanding of the parts of an Excel file (or willingness to + learn). The advantage provided is that you can read an XLS with a + relatively small memory footprint. +

+

One important thing to note with the basic Event API is that it + triggers events only for things actually stored within the file. + With the XLS file format, it is quite common for things that + have yet to be edited to simply not exist in the file. This means + there may well be apparent "gaps" in the record stream, which + you either need to work around, or use the + Record Aware extension + to the Event API.

+

To use this API you construct an instance of + org.apache.poi.hssf.eventmodel.HSSFRequest. Register a class you + create that supports the + org.apache.poi.hssf.eventmodel.HSSFListener interface using the + HSSFRequest.addListener(yourlistener, recordsid). The recordsid + should be a static reference number (such as BOFRecord.sid) contained + in the classes in org.apache.poi.hssf.record. The trick is you + have to know what these records are. Alternatively you can call + HSSFRequest.addListenerForAllRecords(mylistener). In order to learn + about these records you can either read all of the javadoc in the + org.apache.poi.hssf.record package or you can just hack up a + copy of org.apache.poi.hssf.dev.EFHSSF and adapt it to your + needs. TODO: better documentation on records.

+

Once you've registered your listeners in the HSSFRequest object + you can construct an instance of + org.apache.poi.poifs.filesystem.FileSystem (see POIFS howto) and + pass it your XLS file inputstream. You can either pass this, along + with the request you constructed, to an instance of HSSFEventFactory + via the HSSFEventFactory.processWorkbookEvents(request, Filesystem) + method, or you can get an instance of DocumentInputStream from + Filesystem.createDocumentInputStream("Workbook") and pass + it to HSSFEventFactory.processEvents(request, inputStream). Once you + make this call, the listeners that you constructed receive calls to + their processRecord(Record) methods with each Record they are + registered to listen for until the file has been completely read. +

+

A code excerpt from org.apache.poi.hssf.dev.EFHSSF (which is + in CVS or the source distribution) is reprinted below with excessive + comments:

+ +
+ + +
Record Aware Event API (HSSF Only) +

+This is an extension to the normal +Event API. With this, your listener +will be called with extra, dummy records. These dummy records should +alert you to records which aren't present in the file (eg cells that have +yet to be edited), and allow you to handle these. +

+

+There are three dummy records that your HSSFListener will be called with: +

+
    +
  • org.apache.poi.hssf.eventusermodel.dummyrecord.MissingRowDummyRecord +
    + This is called during the row record phase (which typically occurs before + the cell records), and indicates that the row record for the given + row is not present in the file.
  • +
  • org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord +
    + This is called during the cell record phase. It is called when a cell + record is encountered which leaves a gap between it an the previous one. + You can get multiple of these, before the real cell record.
  • +
  • org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord +
    + This is called after the last cell of a given row. It indicates that there + are no more cells for the row, and also tells you how many cells you have + had. For a row with no cells, this will be the only record you get.
  • +
+

+To use the Record Aware Event API, you should create an +org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener, and pass +it your HSSFListener. Then, register the MissingRecordAwareHSSFListener +to the event model, and start that as normal. +

+

+One example use for this API is to write a CSV outputter, which always +outputs a minimum number of columns, even where the file doesn't contain +some of the rows or cells. It can be found at +/poi-examples/src/main/java/org/apache/poi/examples/hssf/eventusermodel/XLS2CSVmra.java, +and may be called on the command line, or from within your own code. +The latest version is always available from +subversion. +

+

+In POI versions before 3.0.3, this code lived in the scratchpad section. + If you're using one of these older versions of POI, you will either + need to include the scratchpad jar on your classpath, or build from a + subversion checkout. +

+
+ + +
XSSF and SAX (Event API) + +

If memory footprint is an issue, then for XSSF, you can get at + the underlying XML data, and process it yourself. This is intended + for intermediate developers who are willing to learn a little bit of + low level structure of .xlsx files, and who are happy processing + XML in java. Its relatively simple to use, but requires a basic + understanding of the file structure. The advantage provided is that + you can read a XLSX file with a relatively small memory footprint. +

+

One important thing to note with the basic Event API is that it + triggers events only for things actually stored within the file. + With the XLSX file format, it is quite common for things that + have yet to be edited to simply not exist in the file. This means + there may well be apparent "gaps" in the record stream, which + you need to work around.

+

To use this API you construct an instance of + org.apache.poi.xssf.eventmodel.XSSFReader. This will optionally + provide a nice interface on the shared strings table, and the styles. + It provides methods to get the raw xml data from the rest of the + file, which you will then pass to SAX.

+

This example shows how to get at a single known sheet, or at + all sheets in the file. It is based on the example in + svn + poi-examples/src/main/java/org/apache/poi/examples/xssf/eventusermodel/FromHowTo.java

+ sheets = r.getSheetsData(); + while(sheets.hasNext()) { + System.out.println("Processing new sheet:\n"); + InputStream sheet = sheets.next(); + InputSource sheetSource = new InputSource(sheet); + parser.parse(sheetSource); + sheet.close(); + System.out.println(""); + } + } + + public XMLReader fetchSheetParser(SharedStringsTable sst) throws SAXException, ParserConfigurationException { + XMLReader parser = XMLHelper.newXMLReader(); + ContentHandler handler = new SheetHandler(sst); + parser.setContentHandler(handler); + return parser; + } + + /** + * See org.xml.sax.helpers.DefaultHandler javadocs + */ + private static class SheetHandler extends DefaultHandler { + private SharedStringsTable sst; + private String lastContents; + private boolean nextIsString; + + private SheetHandler(SharedStringsTable sst) { + this.sst = sst; + } + + public void startElement(String uri, String localName, String name, + Attributes attributes) throws SAXException { + // c => cell + if(name.equals("c")) { + // Print the cell reference + System.out.print(attributes.getValue("r") + " - "); + // Figure out if the value is an index in the SST + String cellType = attributes.getValue("t"); + if(cellType != null && cellType.equals("s")) { + nextIsString = true; + } else { + nextIsString = false; + } + } + // Clear contents cache + lastContents = ""; + } + + public void endElement(String uri, String localName, String name) + throws SAXException { + // Process the last contents as required. + // Do now, as characters() may be called more than once + if(nextIsString) { + int idx = Integer.parseInt(lastContents); + lastContents = sst.getItemAt(idx).getString(); + nextIsString = false; + } + + // v => contents of a cell + // Output after we've seen the string contents + if(name.equals("v")) { + System.out.println(lastContents); + } + } + + public void characters(char[] ch, int start, int length) { + lastContents += new String(ch, start, length); + } + } + + public static void main(String[] args) throws Exception { + ExampleEventUserModel example = new ExampleEventUserModel(); + example.processOneSheet(args[0]); + example.processAllSheets(args[0]); + } +} +]]> +

+ For a fuller example, including support for fetching number formatting + information and applying it to numeric cells (eg to format dates or + percentages), please see + the XLSX2CSV example in svn +

+

An example is also provided + showing how to combine the user API and the SAX API by doing a streaming parse + of larger worksheets and a traditional user-model parse of the rest of a workbook.

+
+ +
SXSSF (Streaming Usermodel API) +

+ SXSSF (package: org.apache.poi.xssf.streaming) is an API-compatible streaming extension of XSSF to be used when + very large spreadsheets have to be produced, and heap space is limited. + SXSSF achieves its low memory footprint by limiting access to the rows that + are within a sliding window, while XSSF gives access to all rows in the + document. Older rows that are no longer in the window become inaccessible, + as they are written to the disk. +

+

+ You can specify the window size at workbook construction time via new SXSSFWorkbook(int windowSize) + or you can set it per-sheet via SXSSFSheet#setRandomAccessWindowSize(int windowSize) +

+

+ When a new row is created via createRow() and the total number + of unflushed records would exceed the specified window size, then the + row with the lowest index value is flushed and cannot be accessed + via getRow() anymore. +

+

+ The default window size is 100 and defined by SXSSFWorkbook.DEFAULT_WINDOW_SIZE. +

+

+ A windowSize of -1 indicates unlimited access. In this case all + records that have not been flushed by a call to flushRows() are available + for random access. +

+

+ Note that SXSSF allocates temporary files that you must always clean up explicitly, by calling the dispose method. +

+

+ SXSSFWorkbook defaults to using inline strings instead of a shared strings + table. This is very efficient, since no document content needs to be kept in + memory, but is also known to produce documents that are incompatible with + some clients. With shared strings enabled all unique strings in the document + has to be kept in memory. Depending on your document content this could use + a lot more resources than with shared strings disabled. +

+

+ Please note that there are still things that still may consume a large + amount of memory based on which features you are using, e.g. merged regions, + hyperlinks, comments, ... are still only stored in memory and thus may require a lot of + memory if used extensively. +

+

+ Carefully review your memory budget and compatibility needs before deciding + whether to enable shared strings or not. +

+

The example below writes a sheet with a window of 100 rows. When the row count reaches 101, + the row with rownum=0 is flushed to disk and removed from memory, when rownum reaches 102 then the row with rownum=1 is flushed, etc. +

+ + + +

The next example turns off auto-flushing (windowSize=-1) and the code manually controls how portions of data are written to disk

+ +

SXSSF flushes sheet data in temporary files (a temp file per sheet) and the size of these temporary files +can grow to a very large value. For example, for a 20 MB csv data the size of the temp xml becomes more than a gigabyte. +If the size of the temp files is an issue, you can tell SXSSF to use gzip compression: +

+ +
+ + +
Low Level APIs + +

The low level API is not much to look at. It consists of lots of +"Records" in the org.apache.poi.hssf.record.* package, +and set of helper classes in org.apache.poi.hssf.model.*. The +record classes are consistent with the low level binary structures +inside a BIFF8 file (which is embedded in a POIFS file system). You +probably need the book: "Microsoft Excel 97 Developer's Kit" +from Microsoft Press in order to understand how these fit together +(out of print but easily obtainable from Amazon's used books). In +order to gain a good understanding of how to use the low level APIs +should view the source in org.apache.poi.hssf.usermodel.* and +the classes in org.apache.poi.hssf.model.*. You should read the +documentation for the POIFS libraries as well.

+
+
Generating XLS from XML +

If you wish to generate an XLS file from some XML, it is possible to +write your own XML processing code, then use the User API to write out +the document.

+

The other option is to use Cocoon. +In Cocoon, there is the HSSF Serializer, +which takes in XML (in the gnumeric format), and outputs an XLS file for you.

+
+
HSSF Class/Test Application + +

The HSSF application is nothing more than a test for the high +level API (and indirectly the low level support). The main body of +its code is repeated above. To run it: +

+
    +
  • download the poi-alpha build and untar it (tar xvzf + tarball.tar.gz) +
  • +
  • set up your classpath as follows: + export HSSFDIR={wherever you put HSSF's jar files} +export LOG4JDIR={wherever you put LOG4J's jar files} +export CLASSPATH=$CLASSPATH:$HSSFDIR/hssf.jar:$HSSFDIR/poi-poifs.jar:$HSSFDIR/poi-util.jar:$LOG4JDIR/log4j.jar +
  • type: + java org.apache.poi.hssf.dev.HSSF ~/myxls.xls write
  • +
+

+

This should generate a test sheet in your home directory called "myxls.xls".

+
    +
  • Type: + java org.apache.poi.hssf.dev.HSSF ~/input.xls output.xls +
    +
    +This is the read/write/modify test. It reads in the spreadsheet, modifies a cell, and writes it back out. +Failing this test is not necessarily a bad thing. If HSSF tries to modify a non-existant sheet then this will +most likely fail. No big deal.
  • +
+
+
HSSF Developer's Tools + +

HSSF has a number of tools useful for developers to debug/develop +stuff using HSSF (and more generally XLS files). We've already +discussed the app for testing HSSF read/write/modify capabilities; +now we'll talk a bit about BiffViewer. Early on in the development of +HSSF, it was decided that knowing what was in a record, what was +wrong with it, etc. was virtually impossible with the available +tools. So we developed BiffViewer. You can find it at +org.apache.poi.hssf.dev.BiffViewer. It performs two basic +functions and a derivative. +

+

The first is "biffview". To do this you run it (assumes +you have everything setup in your classpath and that you know what +you're doing enough to be thinking about this) with an xls file as a +parameter. It will give you a listing of all understood records with +their data and a list of not-yet-understood records with no data +(because it doesn't know how to interpret them). This listing is +useful for several things. First, you can look at the values and SEE +what is wrong in quasi-English. Second, you can send the output to a +file and compare it. +

+

The second function is "big freakin dump", just pass a +file and a second argument matching "bfd" exactly. This +will just make a big hexdump of the file. +

+

Lastly, there is "mixed" mode which does the same as +regular biffview, only it includes hex dumps of certain records +intertwined. To use that just pass a file with a second argument +matching "on" exactly.

+

In the next release cycle we'll also have something called a +FormulaViewer. The class is already there, but its not very useful +yet. When it does something, we'll document it.

+ +
+
What's Next? + +

Further effort on HSSF is going to focus on the following major areas:

+
    +
  • Performance: POI currently uses a lot of memory for large sheets.
  • +
  • Charts: This is a hard problem, with very little documentation.
  • +
+

So jump in!

+ +
+ +
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/index.xml b/src/documentation/content/xdocs/components/spreadsheet/index.xml new file mode 100644 index 0000000000..ec262b554c --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/index.xml @@ -0,0 +1,119 @@ + + + + + +
+ POI-HSSF and POI-XSSF/SXSSF - Java API To Access Microsoft Excel Format Files + Overview + + + + +
+ + +
+ Overview + +

HSSF is the POI Project's pure Java implementation of the + Excel '97(-2007) file format. XSSF is the POI Project's pure + Java implementation of the Excel 2007 OOXML (.xlsx) file + format.

+

HSSF and XSSF provides ways to read spreadsheets create, + modify, read and write XLS spreadsheets. They provide: +

+
    +
  • low level structures for those with special needs
  • +
  • an eventmodel api for efficient read-only access
  • +
  • a full usermodel api for creating, reading and modifying XLS files
  • +
+

For people converting from pure HSSF usermodel, who wish + to use the joint SS Usermodel for HSSF and XSSF support, then + see the ss usermodel converting + guide. +

+

+ An alternate way of generating a spreadsheet is via the Cocoon serializer (yet you'll still be using HSSF indirectly). + With Cocoon you can serialize any XML datasource (which might be a ESQL page outputting in SQL for instance) by simply + applying the stylesheet and designating the serializer. +

+

+ If you're merely reading spreadsheet data, then use the + eventmodel api in either the org.apache.poi.hssf.eventusermodel + package, or the org.apache.poi.xssf.eventusermodel package, depending + on your file format. +

+

+ If you're modifying spreadsheet data then use the usermodel api. You + can also generate spreadsheets this way. +

+

+ Note that the usermodel system has a higher memory footprint than + the low level eventusermodel, but has the major advantage of being + much simpler to work with. Also please be aware that as the new + XSSF supported Excel 2007 OOXML (.xlsx) files are XML based, + the memory footprint for processing them is higher than for the + older HSSF supported (.xls) binary files. +

+ + + +
+ +
+SXSSF (Since POI 3.8 beta3) +

Since 3.8-beta3, POI provides a low-memory footprint SXSSF API built on top of XSSF.

+

+SXSSF is an API-compatible streaming extension of XSSF to be used when +very large spreadsheets have to be produced, and heap space is limited. +SXSSF achieves its low memory footprint by limiting access to the rows that +are within a sliding window, while XSSF gives access to all rows in the +document. Older rows that are no longer in the window become inaccessible, +as they are written to the disk. +

+

+In auto-flush mode the size of the access window can be specified, to hold a certain number of rows in memory. +When that value is reached, the creation of an additional row causes the row with the lowest index to to be +removed from the access window and written to disk. Or, the window size can be set to grow dynamically; +it can be trimmed periodically by an explicit call to flushRows(int keepRows) as needed. +

+

+Due to the streaming nature of the implementation, there are the following +limitations when compared to XSSF: +

+
    +
  • Only a limited number of rows are accessible at a point in time.
  • +
  • Sheet.clone() is not supported.
  • +
  • Formula evaluation is not supported
  • +
+ +

See more details at SXSSF How-To

+ +

The table below synopsizes the comparative features of POI's Spreadsheet API:

+

Spreadsheet API Feature Summary

+ +

+ Spreadsheet API Feature Summary +

+
+ + +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/limitations.xml b/src/documentation/content/xdocs/components/spreadsheet/limitations.xml new file mode 100644 index 0000000000..e1334f9649 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/limitations.xml @@ -0,0 +1,99 @@ + + + + + +
+ Apache POI™ - HSSF and XSSF Limitations + + + +
+ +
Current HSSF / XSSF main limitations +

+ The intent of this document is to outline some of the known limitations of the + POI HSSF and XSSF APIs. It is not intended to be complete list of every bug + or missing feature of HSSF or XSSF, rather it's purpose is to provide a broad + feel for some of the functionality that is missing or broken. +

+
    +
  • + File sizes/Memory usage

    +
      +
    • + There are some inherent limits in the Excel file formats. These are defined in class + SpreadsheetVersion. + As long as you have enough main-memory, you should be able to handle files up to these limits. For huge files + using the default POI classes you will likely need a very large amount of memory. +
      +
      + There are ways to overcome the main-memory limitations if needed: +
      +
        +
      • + For writing very huge files, there is SXSSFWorkbook + which allows to do a streaming write of data out to files (with certain limitations on what you can do as only + parts of the file are held in memory). +
      • +
      • + For reading very huge files, take a look at the sample + XLSX2CSV + which shows how you can read a file in streaming fashion (again with some limitations on what information you + can read out of the file, but there are ways to get at most of it if necessary). +
      • +
      +
    • +
    +
  • +
  • + Charts

    +
      +
    • + HSSF has some limited support for creating a handful of very simple Chart types, + but largely this isn't supported. HSSF (largely) doesn't support changing Charts. + You can however create a chart in Excel using Named ranges, modify the chart data + values using HSSF and write a new spreadsheet out. This is possible because POI + attempts to keep existing records intact as far as possible.
      +
    • +
    • + XSSF has only limited chart support including making some simple changes + and adding at least some line and scatter charts, see the examples LineChart + and ScatterChart.

      +
    • +
    +
  • +
  • + Macros

    + Macros can not be created. The are currently no plans to support macros. + However, reading and re-writing files containing macros will safely preserve + the macros. Recent versions of Apache POI support extracting the macro data + via VBAMacroExtractor + and VBAMacroReader

    +
  • +
  • + Pivot Tables

    + HSSF doesn't have support for reading or creating Pivot tables. XSSF has limited + support for creating Pivot Tables, and very limited read/change support. +
  • +
+
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/quick-guide.xml b/src/documentation/content/xdocs/components/spreadsheet/quick-guide.xml new file mode 100644 index 0000000000..0318eccc9a --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/quick-guide.xml @@ -0,0 +1,2455 @@ + + + + + +
+ Busy Developers' Guide to HSSF and XSSF Features +
+ +
Busy Developers' Guide to Features +

+ Want to use HSSF and XSSF read and write spreadsheets in a hurry? This + guide is for you. If you're after more in-depth coverage of the HSSF and + XSSF user-APIs, please consult the HOWTO + guide as it contains actual descriptions of how to use this stuff. +

+
Index of Features + +
+
Features + +
New Workbook + + Workbook wb = new HSSFWorkbook(); + ... + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + + Workbook wb = new XSSFWorkbook(); + ... + try (OutputStream fileOut = new FileOutputStream("workbook.xlsx")) { + wb.write(fileOut); + } + +
+ +
New Sheet + + Workbook wb = new HSSFWorkbook(); // or new XSSFWorkbook(); + Sheet sheet1 = wb.createSheet("new sheet"); + Sheet sheet2 = wb.createSheet("second sheet"); + + // Note that sheet name is Excel must not exceed 31 characters + // and must not contain any of the any of the following characters: + // 0x0000 + // 0x0003 + // colon (:) + // backslash (\) + // asterisk (*) + // question mark (?) + // forward slash (/) + // opening square bracket ([) + // closing square bracket (]) + + // You can use org.apache.poi.ss.util.WorkbookUtil#createSafeSheetName(String nameProposal)} + // for a safe way to create valid names, this utility replaces invalid characters with a space (' ') + String safeName = WorkbookUtil.createSafeSheetName("[O'Brien's sales*?]"); // returns " O'Brien's sales " + Sheet sheet3 = wb.createSheet(safeName); + + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + +
+ +
Creating Cells + + Workbook wb = new HSSFWorkbook(); + //Workbook wb = new XSSFWorkbook(); + CreationHelper createHelper = wb.getCreationHelper(); + Sheet sheet = wb.createSheet("new sheet"); + + // Create a row and put some cells in it. Rows are 0 based. + Row row = sheet.createRow(0); + // Create a cell and put a value in it. + Cell cell = row.createCell(0); + cell.setCellValue(1); + + // Or do it on one line. + row.createCell(1).setCellValue(1.2); + row.createCell(2).setCellValue( + createHelper.createRichTextString("This is a string")); + row.createCell(3).setCellValue(true); + + // Write the output to a file + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + +
+ +
Creating Date Cells + + Workbook wb = new HSSFWorkbook(); + //Workbook wb = new XSSFWorkbook(); + CreationHelper createHelper = wb.getCreationHelper(); + Sheet sheet = wb.createSheet("new sheet"); + + // Create a row and put some cells in it. Rows are 0 based. + Row row = sheet.createRow(0); + + // Create a cell and put a date value in it. The first cell is not styled + // as a date. + Cell cell = row.createCell(0); + cell.setCellValue(new Date()); + + // we style the second cell as a date (and time). It is important to + // create a new cell style from the workbook otherwise you can end up + // modifying the built in style and effecting not only this cell but other cells. + CellStyle cellStyle = wb.createCellStyle(); + cellStyle.setDataFormat( + createHelper.createDataFormat().getFormat("m/d/yy h:mm")); + cell = row.createCell(1); + cell.setCellValue(new Date()); + cell.setCellStyle(cellStyle); + + //you can also set date as java.util.Calendar + cell = row.createCell(2); + cell.setCellValue(Calendar.getInstance()); + cell.setCellStyle(cellStyle); + + // Write the output to a file + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + +
+ +
Working with different types of cells + + Workbook wb = new HSSFWorkbook(); + Sheet sheet = wb.createSheet("new sheet"); + Row row = sheet.createRow(2); + row.createCell(0).setCellValue(1.1); + row.createCell(1).setCellValue(new Date()); + row.createCell(2).setCellValue(Calendar.getInstance()); + row.createCell(3).setCellValue("a string"); + row.createCell(4).setCellValue(true); + row.createCell(5).setCellType(CellType.ERROR); + + // Write the output to a file + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + +
+ + +
Files vs InputStreams +

When opening a workbook, either a .xls HSSFWorkbook, or a .xlsx + XSSFWorkbook, the Workbook can be loaded from either a File + or an InputStream. Using a File object allows for + lower memory consumption, while an InputStream requires more + memory as it has to buffer the whole file.

+

If using WorkbookFactory, it's very easy to use one or + the other:

+ + // Use a file + Workbook wb = WorkbookFactory.create(new File("MyExcel.xls")); + + // Use an InputStream, needs more memory + Workbook wb = WorkbookFactory.create(new FileInputStream("MyExcel.xlsx")); + +

If using HSSFWorkbook or XSSFWorkbook directly, + you should generally go through POIFSFileSystem or + OPCPackage, to have full control of the lifecycle (including + closing the file when done):

+ + // HSSFWorkbook, File + POIFSFileSystem fs = new POIFSFileSystem(new File("file.xls")); + HSSFWorkbook wb = new HSSFWorkbook(fs.getRoot(), true); + .... + fs.close(); + + // HSSFWorkbook, InputStream, needs more memory + POIFSFileSystem fs = new POIFSFileSystem(myInputStream); + HSSFWorkbook wb = new HSSFWorkbook(fs.getRoot(), true); + + // XSSFWorkbook, File + OPCPackage pkg = OPCPackage.open(new File("file.xlsx")); + XSSFWorkbook wb = new XSSFWorkbook(pkg); + .... + pkg.close(); + + // XSSFWorkbook, InputStream, needs more memory + OPCPackage pkg = OPCPackage.open(myInputStream); + XSSFWorkbook wb = new XSSFWorkbook(pkg); + .... + pkg.close(); + +
+ + +
Demonstrates various alignment options + + public static void main(String[] args) throws Exception { + Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); + + Sheet sheet = wb.createSheet(); + Row row = sheet.createRow(2); + row.setHeightInPoints(30); + + createCell(wb, row, 0, HorizontalAlignment.CENTER, VerticalAlignment.BOTTOM); + createCell(wb, row, 1, HorizontalAlignment.CENTER_SELECTION, VerticalAlignment.BOTTOM); + createCell(wb, row, 2, HorizontalAlignment.FILL, VerticalAlignment.CENTER); + createCell(wb, row, 3, HorizontalAlignment.GENERAL, VerticalAlignment.CENTER); + createCell(wb, row, 4, HorizontalAlignment.JUSTIFY, VerticalAlignment.JUSTIFY); + createCell(wb, row, 5, HorizontalAlignment.LEFT, VerticalAlignment.TOP); + createCell(wb, row, 6, HorizontalAlignment.RIGHT, VerticalAlignment.TOP); + + // Write the output to a file + try (OutputStream fileOut = new FileOutputStream("xssf-align.xlsx")) { + wb.write(fileOut); + } + + wb.close(); + } + + /** + * Creates a cell and aligns it a certain way. + * + * @param wb the workbook + * @param row the row to create the cell in + * @param column the column number to create the cell in + * @param halign the horizontal alignment for the cell. + * @param valign the vertical alignment for the cell. + */ + private static void createCell(Workbook wb, Row row, int column, HorizontalAlignment halign, VerticalAlignment valign) { + Cell cell = row.createCell(column); + cell.setCellValue("Align It"); + CellStyle cellStyle = wb.createCellStyle(); + cellStyle.setAlignment(halign); + cellStyle.setVerticalAlignment(valign); + cell.setCellStyle(cellStyle); + } + +
+ +
Working with borders + + Workbook wb = new HSSFWorkbook(); + Sheet sheet = wb.createSheet("new sheet"); + + // Create a row and put some cells in it. Rows are 0 based. + Row row = sheet.createRow(1); + + // Create a cell and put a value in it. + Cell cell = row.createCell(1); + cell.setCellValue(4); + + // Style the cell with borders all around. + CellStyle style = wb.createCellStyle(); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREEN.getIndex()); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.BLUE.getIndex()); + style.setBorderTop(BorderStyle.MEDIUM_DASHED); + style.setTopBorderColor(IndexedColors.BLACK.getIndex()); + cell.setCellStyle(style); + + // Write the output to a file + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + + wb.close(); + +
+ +
Iterate over rows and cells +

Sometimes, you'd like to just iterate over all the sheets in + a workbook, all the rows in a sheet, or all the cells in a row. + This is possible with a simple for loop.

+

These iterators are available by calling workbook.sheetIterator(), + sheet.rowIterator(), and row.cellIterator(), or + implicitly using a for-each loop. + Note that a rowIterator and cellIterator iterate over rows or + cells that have been created, skipping empty rows and cells.

+ + + for (Sheet sheet : wb ) { + for (Row row : sheet) { + for (Cell cell : row) { + // Do something here + } + } + } + +
+
Iterate over cells, with control of missing / blank cells +

In some cases, when iterating, you need full control over how + missing or blank rows and cells are treated, and you need to ensure + you visit every cell and not just those defined in the file. (The + CellIterator will only return the cells defined in the file, which + is largely those with values or stylings, but it depends on Excel).

+

In cases such as these, you should fetch the first and last column + information for a row, then call getCell(int, MissingCellPolicy) + to fetch the cell. Use a + MissingCellPolicy + to control how blank or null cells are handled.

+ + // Decide which rows to process + int rowStart = Math.min(15, sheet.getFirstRowNum()); + int rowEnd = Math.max(1400, sheet.getLastRowNum()); + + for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) { + Row r = sheet.getRow(rowNum); + if (r == null) { + // This whole row is empty + // Handle it as needed + continue; + } + + int lastColumn = Math.max(r.getLastCellNum(), MY_MINIMUM_COLUMN_COUNT); + + for (int cn = 0; cn < lastColumn; cn++) { + Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL); + if (c == null) { + // The spreadsheet is empty in this cell + } else { + // Do something useful with the cell's contents + } + } + } + +
+ + +
Getting the cell contents +

To get the contents of a cell, you first need to + know what kind of cell it is (asking a string cell + for its numeric contents will get you a + NumberFormatException for example). So, you will + want to switch on the cell's type, and then call + the appropriate getter for that cell.

+

In the code below, we loop over every cell + in one sheet, print out the cell's reference + (eg A3), and then the cell's contents.

+ + // import org.apache.poi.ss.usermodel.*; + + DataFormatter formatter = new DataFormatter(); + Sheet sheet1 = wb.getSheetAt(0); + for (Row row : sheet1) { + for (Cell cell : row) { + CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex()); + System.out.print(cellRef.formatAsString()); + System.out.print(" - "); + + // get the text that appears in the cell by getting the cell value and applying any data formats (Date, 0.00, 1.23e9, $1.23, etc) + String text = formatter.formatCellValue(cell); + System.out.println(text); + + // Alternatively, get the value and format it yourself + switch (cell.getCellType()) { + case CellType.STRING: + System.out.println(cell.getRichStringCellValue().getString()); + break; + case CellType.NUMERIC: + if (DateUtil.isCellDateFormatted(cell)) { + System.out.println(cell.getDateCellValue()); + } else { + System.out.println(cell.getNumericCellValue()); + } + break; + case CellType.BOOLEAN: + System.out.println(cell.getBooleanCellValue()); + break; + case CellType.FORMULA: + System.out.println(cell.getCellFormula()); + break; + case CellType.BLANK: + System.out.println(); + break; + default: + System.out.println(); + } + } + } + +
+ + +
Text Extraction +

For most text extraction requirements, the standard + ExcelExtractor class should provide all you need.

+ + try (InputStream inp = new FileInputStream("workbook.xls")) { + HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(inp)); + ExcelExtractor extractor = new ExcelExtractor(wb); + + extractor.setFormulasNotResults(true); + extractor.setIncludeSheetNames(false); + String text = extractor.getText(); + wb.close(); + } + +

For very fancy text extraction, XLS to CSV etc, + take a look at + /poi-examples/src/main/java/org/apache/poi/examples/hssf/eventusermodel/XLS2CSVmra.java +

+
+ +
Fills and colors + + Workbook wb = new XSSFWorkbook(); + Sheet sheet = wb.createSheet("new sheet"); + + // Create a row and put some cells in it. Rows are 0 based. + Row row = sheet.createRow(1); + + // Aqua background + CellStyle style = wb.createCellStyle(); + style.setFillBackgroundColor(IndexedColors.AQUA.getIndex()); + style.setFillPattern(FillPatternType.BIG_SPOTS); + Cell cell = row.createCell(1); + cell.setCellValue("X"); + cell.setCellStyle(style); + + // Orange "foreground", foreground being the fill foreground not the font color. + style = wb.createCellStyle(); + style.setFillForegroundColor(IndexedColors.ORANGE.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + cell = row.createCell(2); + cell.setCellValue("X"); + cell.setCellStyle(style); + + // Write the output to a file + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + + wb.close(); + +
+ +
Merging cells + + Workbook wb = new HSSFWorkbook(); + Sheet sheet = wb.createSheet("new sheet"); + + Row row = sheet.createRow(1); + Cell cell = row.createCell(1); + cell.setCellValue("This is a test of merging"); + + sheet.addMergedRegion(new CellRangeAddress( + 1, //first row (0-based) + 1, //last row (0-based) + 1, //first column (0-based) + 2 //last column (0-based) + )); + + // Write the output to a file + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + + wb.close(); + +
+ +
Working with fonts + + Workbook wb = new HSSFWorkbook(); + Sheet sheet = wb.createSheet("new sheet"); + + // Create a row and put some cells in it. Rows are 0 based. + Row row = sheet.createRow(1); + + // Create a new font and alter it. + Font font = wb.createFont(); + font.setFontHeightInPoints((short)24); + font.setFontName("Courier New"); + font.setItalic(true); + font.setStrikeout(true); + + // Fonts are set into a style so create a new one to use. + CellStyle style = wb.createCellStyle(); + style.setFont(font); + + // Create a cell and put a value in it. + Cell cell = row.createCell(1); + cell.setCellValue("This is a test of fonts"); + cell.setCellStyle(style); + + // Write the output to a file + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + + wb.close(); + +

+ Note, the maximum number of unique fonts in a workbook is limited to 32767. You should re-use fonts in your applications instead of + creating a font for each cell. +Examples: +

+

Wrong:

+ + for (int i = 0; i < 10000; i++) { + Row row = sheet.createRow(i); + Cell cell = row.createCell(0); + + CellStyle style = workbook.createCellStyle(); + Font font = workbook.createFont(); + font.setBoldweight(Font.BOLDWEIGHT_BOLD); + style.setFont(font); + cell.setCellStyle(style); + } + +

Correct:

+ + CellStyle style = workbook.createCellStyle(); + Font font = workbook.createFont(); + font.setBoldweight(Font.BOLDWEIGHT_BOLD); + style.setFont(font); + for (int i = 0; i < 10000; i++) { + Row row = sheet.createRow(i); + Cell cell = row.createCell(0); + cell.setCellStyle(style); + } + + +
+ +
Custom colors +

HSSF:

+ + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet(); + HSSFRow row = sheet.createRow(0); + HSSFCell cell = row.createCell(0); + cell.setCellValue("Default Palette"); + + //apply some colors from the standard palette, + // as in the previous examples. + //we'll use red text on a lime background + + HSSFCellStyle style = wb.createCellStyle(); + style.setFillForegroundColor(HSSFColor.LIME.index); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + + HSSFFont font = wb.createFont(); + font.setColor(HSSFColor.RED.index); + style.setFont(font); + + cell.setCellStyle(style); + + //save with the default palette + try (OutputStream out = new FileOutputStream("default_palette.xls")) { + wb.write(out); + } + + //now, let's replace RED and LIME in the palette + // with a more attractive combination + // (lovingly borrowed from freebsd.org) + + cell.setCellValue("Modified Palette"); + + //creating a custom palette for the workbook + HSSFPalette palette = wb.getCustomPalette(); + + //replacing the standard red with freebsd.org red + palette.setColorAtIndex(HSSFColor.RED.index, + (byte) 153, //RGB red (0-255) + (byte) 0, //RGB green + (byte) 0 //RGB blue + ); + //replacing lime with freebsd.org gold + palette.setColorAtIndex(HSSFColor.LIME.index, (byte) 255, (byte) 204, (byte) 102); + + //save with the modified palette + // note that wherever we have previously used RED or LIME, the + // new colors magically appear + try (out = new FileOutputStream("modified_palette.xls")) { + wb.write(out); + } + +

XSSF:

+ + XSSFWorkbook wb = new XSSFWorkbook(); + XSSFSheet sheet = wb.createSheet(); + XSSFRow row = sheet.createRow(0); + XSSFCell cell = row.createCell( 0); + cell.setCellValue("custom XSSF colors"); + + XSSFCellStyle style1 = wb.createCellStyle(); + style1.setFillForegroundColor(new XSSFColor(new java.awt.Color(128, 0, 128), new DefaultIndexedColorMap())); + style1.setFillPattern(FillPatternType.SOLID_FOREGROUND); + +
+ +
Reading and Rewriting Workbooks + + try (InputStream inp = new FileInputStream("workbook.xls")) { + //InputStream inp = new FileInputStream("workbook.xlsx"); + + Workbook wb = WorkbookFactory.create(inp); + Sheet sheet = wb.getSheetAt(0); + Row row = sheet.getRow(2); + Cell cell = row.getCell(3); + if (cell == null) + cell = row.createCell(3); + cell.setCellType(CellType.STRING); + cell.setCellValue("a test"); + + // Write the output to a file + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + } + +
+ +
Using newlines in cells + + Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); + Sheet sheet = wb.createSheet(); + + Row row = sheet.createRow(2); + Cell cell = row.createCell(2); + cell.setCellValue("Use \n with word wrap on to create a new line"); + + //to enable newlines you need set a cell styles with wrap=true + CellStyle cs = wb.createCellStyle(); + cs.setWrapText(true); + cell.setCellStyle(cs); + + //increase row height to accommodate two lines of text + row.setHeightInPoints((2*sheet.getDefaultRowHeightInPoints())); + + //adjust column width to fit the content + sheet.autoSizeColumn(2); + + try (OutputStream fileOut = new FileOutputStream("ooxml-newlines.xlsx")) { + wb.write(fileOut); + } + + wb.close(); + +
+ +
Data Formats + + Workbook wb = new HSSFWorkbook(); + Sheet sheet = wb.createSheet("format sheet"); + CellStyle style; + DataFormat format = wb.createDataFormat(); + Row row; + Cell cell; + int rowNum = 0; + int colNum = 0; + + row = sheet.createRow(rowNum++); + cell = row.createCell(colNum); + cell.setCellValue(11111.25); + style = wb.createCellStyle(); + style.setDataFormat(format.getFormat("0.0")); + cell.setCellStyle(style); + + row = sheet.createRow(rowNum++); + cell = row.createCell(colNum); + cell.setCellValue(11111.25); + style = wb.createCellStyle(); + style.setDataFormat(format.getFormat("#,##0.0000")); + cell.setCellStyle(style); + + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + + wb.close(); + +
+ +
Fit Sheet to One Page + + Workbook wb = new HSSFWorkbook(); + Sheet sheet = wb.createSheet("format sheet"); + PrintSetup ps = sheet.getPrintSetup(); + + sheet.setAutobreaks(true); + + ps.setFitHeight((short)1); + ps.setFitWidth((short)1); + + + // Create various cells and rows for spreadsheet. + + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + + wb.close(); + +
+ +
Set Print Area + + Workbook wb = new HSSFWorkbook(); + Sheet sheet = wb.createSheet("Sheet1"); + //sets the print area for the first sheet + wb.setPrintArea(0, "$A$1:$C$2"); + + //Alternatively: + wb.setPrintArea( + 0, //sheet index + 0, //start column + 1, //end column + 0, //start row + 0 //end row + ); + + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + + wb.close(); + +
+ + +
Set Page Numbers on Footer + + Workbook wb = new HSSFWorkbook(); // or new XSSFWorkbook(); + Sheet sheet = wb.createSheet("format sheet"); + Footer footer = sheet.getFooter(); + + footer.setRight( "Page " + HeaderFooter.page() + " of " + HeaderFooter.numPages() ); + + + + // Create various cells and rows for spreadsheet. + + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + + wb.close(); + +
+ + +
Using the Convenience Functions +

+ The convenience functions provide + utility features such as setting borders around merged + regions and changing style attributes without explicitly + creating new styles. +

+ + Workbook wb = new HSSFWorkbook(); // or new XSSFWorkbook() + Sheet sheet1 = wb.createSheet( "new sheet" ); + + // Create a merged region + Row row = sheet1.createRow( 1 ); + Row row2 = sheet1.createRow( 2 ); + Cell cell = row.createCell( 1 ); + cell.setCellValue( "This is a test of merging" ); + CellRangeAddress region = CellRangeAddress.valueOf("B2:E5"); + sheet1.addMergedRegion( region ); + + // Set the border and border colors. + RegionUtil.setBorderBottom( BorderStyle.MEDIUM_DASHED, region, sheet1, wb ); + RegionUtil.setBorderTop( BorderStyle.MEDIUM_DASHED, region, sheet1, wb ); + RegionUtil.setBorderLeft( BorderStyle.MEDIUM_DASHED, region, sheet1, wb ); + RegionUtil.setBorderRight( BorderStyle.MEDIUM_DASHED, region, sheet1, wb ); + RegionUtil.setBottomBorderColor(IndexedColors.AQUA.getIndex(), region, sheet1, wb); + RegionUtil.setTopBorderColor( IndexedColors.AQUA.getIndex(), region, sheet1, wb); + RegionUtil.setLeftBorderColor( IndexedColors.AQUA.getIndex(), region, sheet1, wb); + RegionUtil.setRightBorderColor( IndexedColors.AQUA.getIndex(), region, sheet1, wb); + + // Shows some usages of HSSFCellUtil + CellStyle style = wb.createCellStyle(); + style.setIndention((short)4); + CellUtil.createCell(row, 8, "This is the value of the cell", style); + Cell cell2 = CellUtil.createCell( row2, 8, "This is the value of the cell"); + CellUtil.setAlignment(cell2, HorizontalAlignment.CENTER); + + // Write out the workbook + try (OutputStream fileOut = new FileOutputStream( "workbook.xls" )) { + wb.write( fileOut ); + } + + wb.close(); + +
+ + +
Shift rows up or down on a sheet + + Workbook wb = new HSSFWorkbook(); + Sheet sheet = wb.createSheet("row sheet"); + + // Create various cells and rows for spreadsheet. + + // Shift rows 6 - 11 on the spreadsheet to the top (rows 0 - 5) + sheet.shiftRows(5, 10, -5); + + +
+ + +
Set a sheet as selected + + Workbook wb = new HSSFWorkbook(); + Sheet sheet = wb.createSheet("row sheet"); + sheet.setSelected(true); + + +
+ + +
Set the zoom magnification +

+ The zoom is expressed as a fraction. For example to + express a zoom of 75% use 3 for the numerator and + 4 for the denominator. +

+ + Workbook wb = new HSSFWorkbook(); + Sheet sheet1 = wb.createSheet("new sheet"); + sheet1.setZoom(75); // 75 percent magnification + +
+ + +
Splits and freeze panes +

+ There are two types of panes you can create; freeze panes and split panes. +

+

+ A freeze pane is split by columns and rows. You create + a freeze pane using the following mechanism: +

+

+ sheet1.createFreezePane( 3, 2, 3, 2 ); +

+

+ The first two parameters are the columns and rows you + wish to split by. The second two parameters indicate + the cells that are visible in the bottom right quadrant. +

+

+ + Split panes appear differently. The split area is + divided into four separate work area's. The split + occurs at the pixel level and the user is able to + adjust the split by dragging it to a new position. +

+

+ + Split panes are created with the following call: +

+

+ sheet2.createSplitPane( 2000, 2000, 0, 0, Sheet.PANE_LOWER_LEFT ); +

+

+ + The first parameter is the x position of the split. + This is in 1/20th of a point. A point in this case + seems to equate to a pixel. The second parameter is + the y position of the split. Again in 1/20th of a point. +

+

+ The last parameter indicates which pane currently has + the focus. This will be one of Sheet.PANE_LOWER_LEFT, + PANE_LOWER_RIGHT, PANE_UPPER_RIGHT or PANE_UPPER_LEFT. +

+ + Workbook wb = new HSSFWorkbook(); + Sheet sheet1 = wb.createSheet("new sheet"); + Sheet sheet2 = wb.createSheet("second sheet"); + Sheet sheet3 = wb.createSheet("third sheet"); + Sheet sheet4 = wb.createSheet("fourth sheet"); + + // Freeze just one row + sheet1.createFreezePane( 0, 1, 0, 1 ); + // Freeze just one column + sheet2.createFreezePane( 1, 0, 1, 0 ); + // Freeze the columns and rows (forget about scrolling position of the lower right quadrant). + sheet3.createFreezePane( 2, 2 ); + // Create a split with the lower left side being the active quadrant + sheet4.createSplitPane( 2000, 2000, 0, 0, Sheet.PANE_LOWER_LEFT ); + + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + +
+ + +
Repeating rows and columns +

+ It's possible to set up repeating rows and columns in + your printouts by using the setRepeatingRows() and + setRepeatingColumns() methods in the Sheet class. +

+

+ These methods expect a CellRangeAddress parameter + which specifies the range for the rows or columns to + repeat. + For setRepeatingRows(), it should specify a range of + rows to repeat, with the column part spanning all + columns. + For setRepeatingColumns(), it should specify a range of + columns to repeat, with the row part spanning all + rows. + If the parameter is null, the repeating rows or columns + will be removed. +

+ + Workbook wb = new HSSFWorkbook(); // or new XSSFWorkbook(); + Sheet sheet1 = wb.createSheet("Sheet1"); + Sheet sheet2 = wb.createSheet("Sheet2"); + + // Set the rows to repeat from row 4 to 5 on the first sheet. + sheet1.setRepeatingRows(CellRangeAddress.valueOf("4:5")); + // Set the columns to repeat from column A to C on the second sheet + sheet2.setRepeatingColumns(CellRangeAddress.valueOf("A:C")); + + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + +
+ +
Headers and Footers +

+ Example is for headers but applies directly to footers. +

+ + Workbook wb = new HSSFWorkbook(); + Sheet sheet = wb.createSheet("new sheet"); + + Header header = sheet.getHeader(); + header.setCenter("Center Header"); + header.setLeft("Left Header"); + header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") + + HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16"); + + try (OutputStream fileOut = new FileOutputStream("workbook.xls")) { + wb.write(fileOut); + } + +
+ +
XSSF Enhancement for Headers and Footers +

+ Example is for headers but applies directly to footers. Note, the above example for + basic headers and footers applies to XSSF Workbooks as well as HSSF Workbooks. The HSSFHeader + stuff does not work for XSSF Workbooks. +

+

+ XSSF has the ability to handle First page headers and footers, as well as Even/Odd + headers and footers. All Header/Footer Property flags can be handled in XSSF as well. + The odd header and footer is the default header and footer. It is displayed on all + pages that do not display either a first page header or an even page header. That is, + if the Even header/footer does not exist, then the odd header/footer is displayed on + even pages. If the first page header/footer does not exist, then the odd header/footer + is displayed on the first page. If the even/odd property is not set, that is the same as + the even header/footer not existing. If the first page property does not exist, that is + the same as the first page header/footer not existing. +

+ + Workbook wb = new XSSFWorkbook(); + XSSFSheet sheet = (XSSFSheet) wb.createSheet("new sheet"); + + // Create a first page header + Header header = sheet.getFirstHeader(); + header.setCenter("Center First Page Header"); + header.setLeft("Left First Page Header"); + header.setRight("Right First Page Header"); + + // Create an even page header + Header header2 = sheet.getEvenHeader(); + header2.setCenter("Center Even Page Header"); + header2.setLeft("Left Even Page Header"); + header2.setRight("Right Even Page Header"); + + // Create an odd page header + Header header3 = sheet.getOddHeader(); + header3.setCenter("Center Odd Page Header"); + header3.setLeft("Left Odd Page Header"); + header3.setRight("Right Odd Page Header"); + + // Set/Remove Header properties + XSSFHeaderProperties prop = sheet.getHeaderFooterProperties(); + prop.setAlignWithMargins(); + prop.scaleWithDoc(); + prop.removeDifferentFirstPage(); // This does not remove first page headers or footers + prop.removeDifferentEvenOdd(); // This does not remove even headers or footers + + try (OutputStream fileOut = new FileOutputStream("workbook.xlsx")) { + wb.write(fileOut); + } + +
+ + +
Drawing Shapes +

+ POI supports drawing shapes using the Microsoft Office + drawing tools. Shapes on a sheet are organized in a + hierarchy of groups and and shapes. The top-most shape + is the patriarch. This is not visible on the sheet + at all. To start drawing you need to call createPatriarch + on the HSSFSheet class. This has the + effect erasing any other shape information stored + in that sheet. By default POI will leave shape + records alone in the sheet unless you make a call to + this method. +

+

+ To create a shape you have to go through the following + steps: +

+
    +
  1. Create the patriarch.
  2. +
  3. Create an anchor to position the shape on the sheet.
  4. +
  5. Ask the patriarch to create the shape.
  6. +
  7. Set the shape type (line, oval, rectangle etc...)
  8. +
  9. Set any other style details concerning the shape. (eg: + line thickness, etc...)
  10. +
+ + HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); + a = new HSSFClientAnchor( 0, 0, 1023, 255, (short) 1, 0, (short) 1, 0 ); + HSSFSimpleShape shape1 = patriarch.createSimpleShape(a1); + shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE); + +

+ Text boxes are created using a different call: +

+ + HSSFTextbox textbox1 = patriarch.createTextbox( + new HSSFClientAnchor(0,0,0,0,(short)1,1,(short)2,2)); + textbox1.setString(new HSSFRichTextString("This is a test") ); + +

+ It's possible to use different fonts to style parts of + the text in the textbox. Here's how: +

+ + HSSFFont font = wb.createFont(); + font.setItalic(true); + font.setUnderline(HSSFFont.U_DOUBLE); + HSSFRichTextString string = new HSSFRichTextString("Woo!!!"); + string.applyFont(2,5,font); + textbox.setString(string ); + +

+ Just as can be done manually using Excel, it is possible + to group shapes together. This is done by calling + createGroup() and then creating the shapes + using those groups. +

+

+ It's also possible to create groups within groups. +

+ Any group you create should contain at least two + other shapes or subgroups. +

+ Here's how to create a shape group: +

+ + // Create a shape group. + HSSFShapeGroup group = patriarch.createGroup( + new HSSFClientAnchor(0,0,900,200,(short)2,2,(short)2,2)); + + // Create a couple of lines in the group. + HSSFSimpleShape shape1 = group.createShape(new HSSFChildAnchor(3,3,500,500)); + shape1.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE); + ( (HSSFChildAnchor) shape1.getAnchor() ).setAnchor(3,3,500,500); + HSSFSimpleShape shape2 = group.createShape(new HSSFChildAnchor(1,200,400,600)); + shape2.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE); + +

+ If you're being observant you'll noticed that the shapes + that are added to the group use a new type of anchor: + the HSSFChildAnchor. What happens is that + the created group has its own coordinate space for + shapes that are placed into it. POI defaults this to + (0,0,1023,255) but you are able to change it as desired. + Here's how: +

+ + myGroup.setCoordinates(10,10,20,20); // top-left, bottom-right + +

+ If you create a group within a group it's also going + to have its own coordinate space. +

+
+ + +
Styling Shapes +

+ By default shapes can look a little plain. It's possible + to apply different styles to the shapes however. The + sorts of things that can currently be done are: +

+
    +
  • Change the fill color.
  • +
  • Make a shape with no fill color.
  • +
  • Change the thickness of the lines.
  • +
  • Change the style of the lines. Eg: dashed, dotted.
  • +
  • Change the line color.
  • +
+

+ Here's an examples of how this is done: +

+ + HSSFSimpleShape s = patriarch.createSimpleShape(a); + s.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL); + s.setLineStyleColor(10,10,10); + s.setFillColor(90,10,200); + s.setLineWidth(HSSFShape.LINEWIDTH_ONE_PT * 3); + s.setLineStyle(HSSFShape.LINESTYLE_DOTSYS); + +
+ +
Shapes and Graphics2d +

+ While the native POI shape drawing commands are the + recommended way to draw shapes in a shape it's sometimes + desirable to use a standard API for compatibility with + external libraries. With this in mind we created some + wrappers for Graphics and Graphics2d. +

+ + It's important to not however before continuing that + Graphics2d is a poor match to the capabilities + of the Microsoft Office drawing commands. The older + Graphics class offers a closer match but is + still a square peg in a round hole. + +

+ All Graphics commands are issued into an HSSFShapeGroup. + Here's how it's done: +

+ + a = new HSSFClientAnchor( 0, 0, 1023, 255, (short) 1, 0, (short) 1, 0 ); + group = patriarch.createGroup( a ); + group.setCoordinates( 0, 0, 80 * 4 , 12 * 23 ); + float verticalPointsPerPixel = a.getAnchorHeightInPoints(sheet) / (float)Math.abs(group.getY2() - group.getY1()); + g = new EscherGraphics( group, wb, Color.black, verticalPointsPerPixel ); + g2d = new EscherGraphics2d( g ); + drawChemicalStructure( g2d ); + +

+ The first thing we do is create the group and set its coordinates + to match what we plan to draw. Next we calculate a reasonable + fontSizeMultiplier then create the EscherGraphics object. + Since what we really want is a Graphics2d + object we create an EscherGraphics2d object and pass in + the graphics object we created. Finally we call a routine + that draws into the EscherGraphics2d object. +

+

+ The vertical points per pixel deserves some more explanation. + One of the difficulties in converting Graphics calls + into escher drawing calls is that Excel does not have + the concept of absolute pixel positions. It measures + its cell widths in 'characters' and the cell heights in points. + Unfortunately it's not defined exactly what type of character it's + measuring. Presumably this is due to the fact that the Excel will be + using different fonts on different platforms or even within the same + platform. +

+

+ Because of this constraint we've had to implement the concept of a + verticalPointsPerPixel. This the amount the font should be scaled by when + you issue commands such as drawString(). To calculate this value + use the follow formula: +

+ + multipler = groupHeightInPoints / heightOfGroup + +

+ The height of the group is calculated fairly simply by calculating the + difference between the y coordinates of the bounding box of the shape. The + height of the group can be calculated by using a convenience called + HSSFClientAnchor.getAnchorHeightInPoints(). +

+

+ Many of the functions supported by the graphics classes + are not complete. Here's some of the functions that are known + to work. +

+
    +
  • fillRect()
  • +
  • fillOval()
  • +
  • drawString()
  • +
  • drawOval()
  • +
  • drawLine()
  • +
  • clearRect()
  • +
+

+ Functions that are not supported will return and log a message + using the POI logging infrastructure (disabled by default). +

+
+ +
+ Outlining +

+ Outlines are great for grouping sections of information + together and can be added easily to columns and rows + using the POI API. Here's how: +

+ + Workbook wb = new HSSFWorkbook(); + Sheet sheet1 = wb.createSheet("new sheet"); + + sheet1.groupRow( 5, 14 ); + sheet1.groupRow( 7, 14 ); + sheet1.groupRow( 16, 19 ); + + sheet1.groupColumn( 4, 7 ); + sheet1.groupColumn( 9, 12 ); + sheet1.groupColumn( 10, 11 ); + + try (OutputStream fileOut = new FileOutputStream(filename)) { + wb.write(fileOut); + } + +

+ To collapse (or expand) an outline use the following calls: +

+ + sheet1.setRowGroupCollapsed( 7, true ); + sheet1.setColumnGroupCollapsed( 4, true ); + +

+ The row/column you choose should contain an already + created group. It can be anywhere within the group. +

+
+
+
+ +
+ Images +

+ Images are part of the drawing support. To add an image just + call createPicture() on the drawing patriarch. + At the time of writing the following types are supported: +

+
    +
  • PNG
  • +
  • JPG
  • +
  • DIB
  • +
+

+ It should be noted that any existing drawings may be erased + once you add an image to a sheet. +

+ + //create a new workbook + Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); + + //add picture data to this workbook. + InputStream is = new FileInputStream("image1.jpeg"); + byte[] bytes = IOUtils.toByteArray(is); + int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG); + is.close(); + + CreationHelper helper = wb.getCreationHelper(); + + //create sheet + Sheet sheet = wb.createSheet(); + + // Create the drawing patriarch. This is the top level container for all shapes. + Drawing drawing = sheet.createDrawingPatriarch(); + + //add a picture shape + ClientAnchor anchor = helper.createClientAnchor(); + //set top-left corner of the picture, + //subsequent call of Picture#resize() will operate relative to it + anchor.setCol1(3); + anchor.setRow1(2); + Picture pict = drawing.createPicture(anchor, pictureIdx); + + //auto-size picture relative to its top-left corner + pict.resize(); + + //save workbook + String file = "picture.xls"; + if(wb instanceof XSSFWorkbook) file += "x"; + try (OutputStream fileOut = new FileOutputStream(file)) { + wb.write(fileOut); + } + + + Picture.resize() works only for JPEG and PNG. Other formats are not yet supported. + +

Reading images from a workbook:

+ + + List lst = workbook.getAllPictures(); + for (Iterator it = lst.iterator(); it.hasNext(); ) { + PictureData pict = (PictureData)it.next(); + String ext = pict.suggestFileExtension(); + byte[] data = pict.getData(); + if (ext.equals("jpeg")){ + try (OutputStream out = new FileOutputStream("pict.jpg")) { + out.write(data); + } + } + } + +
+ +
+ Named Ranges and Named Cells +

+ Named Range is a way to refer to a group of cells by a name. Named Cell is a + degenerate case of Named Range in that the 'group of cells' contains exactly one + cell. You can create as well as refer to cells in a workbook by their named range. + When working with Named Ranges, the classes org.apache.poi.ss.util.CellReference + and org.apache.poi.ss.util.AreaReference are used. +

+

+ Note: Using relative values like 'A1:B1' can lead to unexpected moving of + the cell that the name points to when working with the workbook in Microsoft Excel, + usually using absolute references like '$A$1:$B$1' avoids this, see also + this discussion. +

+

+ Creating Named Range / Named Cell +

+ + // setup code + String sname = "TestSheet", cname = "TestName", cvalue = "TestVal"; + Workbook wb = new HSSFWorkbook(); + Sheet sheet = wb.createSheet(sname); + sheet.createRow(0).createCell(0).setCellValue(cvalue); + + // 1. create named range for a single cell using areareference + Name namedCell = wb.createName(); + namedCell.setNameName(cname + "1"); + String reference = sname+"!$A$1:$A$1"; // area reference + namedCell.setRefersToFormula(reference); + + // 2. create named range for a single cell using cellreference + Name namedCel2 = wb.createName(); + namedCel2.setNameName(cname + "2"); + reference = sname+"!$A$1"; // cell reference + namedCel2.setRefersToFormula(reference); + + // 3. create named range for an area using AreaReference + Name namedCel3 = wb.createName(); + namedCel3.setNameName(cname + "3"); + reference = sname+"!$A$1:$C$5"; // area reference + namedCel3.setRefersToFormula(reference); + + // 4. create named formula + Name namedCel4 = wb.createName(); + namedCel4.setNameName("my_sum"); + namedCel4.setRefersToFormula("SUM(" + sname + "!$I$2:$I$6)"); + +

+ Reading from Named Range / Named Cell +

+ + // setup code + String cname = "TestName"; + Workbook wb = getMyWorkbook(); // retrieve workbook + + // retrieve the named range + int namedCellIdx = wb.getNameIndex(cellName); + Name aNamedCell = wb.getNameAt(namedCellIdx); + + // retrieve the cell at the named range and test its contents + AreaReference aref = new AreaReference(aNamedCell.getRefersToFormula()); + CellReference[] crefs = aref.getAllReferencedCells(); + for (int i=0; i<crefs.length; i++) { + Sheet s = wb.getSheet(crefs[i].getSheetName()); + Row r = sheet.getRow(crefs[i].getRow()); + Cell c = r.getCell(crefs[i].getCol()); + // extract the cell contents based on cell type etc. + } + +

+ Reading from non-contiguous Named Ranges +

+ + // Setup code + String cname = "TestName"; + Workbook wb = getMyWorkbook(); // retrieve workbook + + // Retrieve the named range + // Will be something like "$C$10,$D$12:$D$14"; + int namedCellIdx = wb.getNameIndex(cellName); + Name aNamedCell = wb.getNameAt(namedCellIdx); + + // Retrieve the cell at the named range and test its contents + // Will get back one AreaReference for C10, and + // another for D12 to D14 + AreaReference[] arefs = AreaReference.generateContiguous(aNamedCell.getRefersToFormula()); + for (int i=0; i<arefs.length; i++) { + // Only get the corners of the Area + // (use arefs[i].getAllReferencedCells() to get all cells) + CellReference[] crefs = arefs[i].getCells(); + for (int j=0; j<crefs.length; j++) { + // Check it turns into real stuff + Sheet s = wb.getSheet(crefs[j].getSheetName()); + Row r = s.getRow(crefs[j].getRow()); + Cell c = r.getCell(crefs[j].getCol()); + // Do something with this corner cell + } + } + +

+ Note, when a cell is deleted, Excel does not delete the + attached named range. As result, workbook can contain + named ranges that point to cells that no longer exist. + You should check the validity of a reference before + constructing AreaReference +

+ + if(name.isDeleted()){ + //named range points to a deleted cell. + } else { + AreaReference ref = new AreaReference(name.getRefersToFormula()); + } + +
+ +
Cell Comments - HSSF and XSSF +

+ A comment is a rich text note that is attached to & + associated with a cell, separate from other cell content. + Comment content is stored separate from the cell, and is displayed in a drawing object (like a text box) + that is separate from, but associated with, a cell +

+ + Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); + + CreationHelper factory = wb.getCreationHelper(); + + Sheet sheet = wb.createSheet(); + + Row row = sheet.createRow(3); + Cell cell = row.createCell(5); + cell.setCellValue("F4"); + + Drawing drawing = sheet.createDrawingPatriarch(); + + // When the comment box is visible, have it show in a 1x3 space + ClientAnchor anchor = factory.createClientAnchor(); + anchor.setCol1(cell.getColumnIndex()); + anchor.setCol2(cell.getColumnIndex()+1); + anchor.setRow1(row.getRowNum()); + anchor.setRow2(row.getRowNum()+3); + + // Create the comment and set the text+author + Comment comment = drawing.createCellComment(anchor); + RichTextString str = factory.createRichTextString("Hello, World!"); + comment.setString(str); + comment.setAuthor("Apache POI"); + + // Assign the comment to the cell + cell.setCellComment(comment); + + String fname = "comment-xssf.xls"; + if(wb instanceof XSSFWorkbook) fname += "x"; + try (OutputStream out = new FileOutputStream(fname)) { + wb.write(out); + } + + wb.close(); + +

+ Reading cell comments +

+ + Cell cell = sheet.get(3).getColumn(1); + Comment comment = cell.getCellComment(); + if (comment != null) { + RichTextString str = comment.getString(); + String author = comment.getAuthor(); + } + // alternatively you can retrieve cell comments by (row, column) + comment = sheet.getCellComment(3, 1); + + +

To get all the comments on a sheet:

+ + Map<CellAddress, Comment> comments = sheet.getCellComments(); + Comment commentA1 = comments.get(new CellAddress(0, 0)); + Comment commentB1 = comments.get(new CellAddress(0, 1)); + for (Entry<CellAddress, ? extends Comment> e : comments.entrySet()) { + CellAddress loc = e.getKey(); + Comment comment = e.getValue(); + System.out.println("Comment at " + loc + ": " + + "[" + comment.getAuthor() + "] " + comment.getString().getString()); + } + +
+ + +
Adjust column width to fit the contents + + Sheet sheet = workbook.getSheetAt(0); + sheet.autoSizeColumn(0); //adjust width of the first column + sheet.autoSizeColumn(1); //adjust width of the second column + +

+ For SXSSFWorkbooks only, because the random access window is likely to exclude most of the rows + in the worksheet, which are needed for computing the best-fit width of a column, the columns must + be tracked for auto-sizing prior to flushing any rows. +

+ + SXSSFWorkbook workbook = new SXSSFWorkbook(); + SXSSFSheet sheet = workbook.createSheet(); + sheet.trackColumnForAutoSizing(0); + sheet.trackColumnForAutoSizing(1); + // If you have a Collection of column indices, see SXSSFSheet#trackColumnForAutoSizing(Collection<Integer>) + // or roll your own for-loop. + // Alternatively, use SXSSFSheet#trackAllColumnsForAutoSizing() if the columns that will be auto-sized aren't + // known in advance or you are upgrading existing code and are trying to minimize changes. Keep in mind + // that tracking all columns will require more memory and CPU cycles, as the best-fit width is calculated + // on all tracked columns on every row that is flushed. + + // create some cells + for (int r=0; r < 10; r++) { + Row row = sheet.createRow(r); + for (int c; c < 10; c++) { + Cell cell = row.createCell(c); + cell.setCellValue("Cell " + c.getAddress().formatAsString()); + } + } + + // Auto-size the columns. + sheet.autoSizeColumn(0); + sheet.autoSizeColumn(1); + +

+ Note, that Sheet#autoSizeColumn() does not evaluate formula cells, + the width of formula cells is calculated based on the cached formula result. + If your workbook has many formulas then it is a good idea to evaluate them before auto-sizing. +

+ + To calculate column width Sheet.autoSizeColumn uses Java2D classes + that throw exception if graphical environment is not available. In case if graphical environment + is not available, you must tell Java that you are running in headless mode and + set the following system property: java.awt.headless=true . + You should also ensure that the fonts you use in your workbook are + available to Java. + +
+ +
How to read hyperlinks + + Sheet sheet = workbook.getSheetAt(0); + + Cell cell = sheet.getRow(0).getCell(0); + Hyperlink link = cell.getHyperlink(); + if(link != null){ + System.out.println(link.getAddress()); + } + +
+
How to create hyperlinks + + Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); + CreationHelper createHelper = wb.getCreationHelper(); + + //cell style for hyperlinks + //by default hyperlinks are blue and underlined + CellStyle hlink_style = wb.createCellStyle(); + Font hlink_font = wb.createFont(); + hlink_font.setUnderline(Font.U_SINGLE); + hlink_font.setColor(IndexedColors.BLUE.getIndex()); + hlink_style.setFont(hlink_font); + + Cell cell; + Sheet sheet = wb.createSheet("Hyperlinks"); + //URL + cell = sheet.createRow(0).createCell(0); + cell.setCellValue("URL Link"); + + Hyperlink link = createHelper.createHyperlink(HyperlinkType.URL); + link.setAddress("https://poi.apache.org/"); + cell.setHyperlink(link); + cell.setCellStyle(hlink_style); + + //link to a file in the current directory + cell = sheet.createRow(1).createCell(0); + cell.setCellValue("File Link"); + link = createHelper.createHyperlink(HyperlinkType.FILE); + link.setAddress("link1.xls"); + cell.setHyperlink(link); + cell.setCellStyle(hlink_style); + + //e-mail link + cell = sheet.createRow(2).createCell(0); + cell.setCellValue("Email Link"); + link = createHelper.createHyperlink(HyperlinkType.EMAIL); + //note, if subject contains white spaces, make sure they are url-encoded + link.setAddress("mailto:poi@apache.org?subject=Hyperlinks"); + cell.setHyperlink(link); + cell.setCellStyle(hlink_style); + + //link to a place in this workbook + + //create a target sheet and cell + Sheet sheet2 = wb.createSheet("Target Sheet"); + sheet2.createRow(0).createCell(0).setCellValue("Target Cell"); + + cell = sheet.createRow(3).createCell(0); + cell.setCellValue("Worksheet Link"); + Hyperlink link2 = createHelper.createHyperlink(HyperlinkType.DOCUMENT); + link2.setAddress("'Target Sheet'!A1"); + cell.setHyperlink(link2); + cell.setCellStyle(hlink_style); + + try (OutputStream out = new FileOutputStream("hyperinks.xlsx")) { + wb.write(out); + } + + wb.close(); + +
+ +
Data Validations +

+ As of version 3.8, POI has slightly different syntax to work with data validations with .xls and .xlsx formats. +

+
+ hssf.usermodel (binary .xls format) +

Check the value a user enters into a cell against one or more predefined value(s).

+

The following code will limit the value the user can enter into cell A1 to one of three integer values, 10, 20 or 30.

+ + HSSFWorkbook workbook = new HSSFWorkbook(); + HSSFSheet sheet = workbook.createSheet("Data Validation"); + CellRangeAddressList addressList = new CellRangeAddressList( + 0, 0, 0, 0); + DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint( + new String[]{"10", "20", "30"}); + DataValidation dataValidation = new HSSFDataValidation + (addressList, dvConstraint); + dataValidation.setSuppressDropDownArrow(true); + sheet.addValidationData(dataValidation); + +

Drop Down Lists:

+

This code will do the same but offer the user a drop down list to select a value from.

+ + HSSFWorkbook workbook = new HSSFWorkbook(); + HSSFSheet sheet = workbook.createSheet("Data Validation"); + CellRangeAddressList addressList = new CellRangeAddressList( + 0, 0, 0, 0); + DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint( + new String[]{"10", "20", "30"}); + DataValidation dataValidation = new HSSFDataValidation + (addressList, dvConstraint); + dataValidation.setSuppressDropDownArrow(false); + sheet.addValidationData(dataValidation); + +

Messages On Error:

+

To create a message box that will be shown to the user if the value they enter is invalid.

+ + dataValidation.setErrorStyle(DataValidation.ErrorStyle.STOP); + dataValidation.createErrorBox("Box Title", "Message Text"); + +

Replace 'Box Title' with the text you wish to display in the message box's title bar + and 'Message Text' with the text of your error message.

+

Prompts:

+

To create a prompt that the user will see when the cell containing the data validation receives focus

+ + dataValidation.createPromptBox("Title", "Message Text"); + dataValidation.setShowPromptBox(true); + +

The text encapsulated in the first parameter passed to the createPromptBox() method will appear emboldened + and as a title to the prompt whilst the second will be displayed as the text of the message. + The createExplicitListConstraint() method can be passed and array of String(s) containing interger, floating point, dates or text values.

+ +

Further Data Validations:

+

To obtain a validation that would check the value entered was, for example, an integer between 10 and 100, + use the DVConstraint.createNumericConstraint(int, int, String, String) factory method.

+ + dvConstraint = DVConstraint.createNumericConstraint( + DVConstraint.ValidationType.INTEGER, + DVConstraint.OperatorType.BETWEEN, "10", "100"); + +

Look at the javadoc for the other validation and operator types; also note that not all validation + types are supported for this method. The values passed to the two String parameters can be formulas; the '=' symbol is used to denote a formula

+ + dvConstraint = DVConstraint.createNumericConstraint( + DVConstraint.ValidationType.INTEGER, + DVConstraint.OperatorType.BETWEEN, "=SUM(A1:A3)", "100"); + +

It is not possible to create a drop down list if the createNumericConstraint() method is called, + the setSuppressDropDownArrow(false) method call will simply be ignored.

+

Date and time constraints can be created by calling the createDateConstraint(int, String, String, String) + or the createTimeConstraint(int, String, String). Both are very similar to the above and are explained in the javadoc.

+

Creating Data Validations From Spreadsheet Cells.

+

The contents of specific cells can be used to provide the values for the data validation + and the DVConstraint.createFormulaListConstraint(String) method supports this. + To specify that the values come from a contiguous range of cells do either of the following:

+ + dvConstraint = DVConstraint.createFormulaListConstraint("$A$1:$A$3"); + +

or

+ + Name namedRange = workbook.createName(); + namedRange.setNameName("list1"); + namedRange.setRefersToFormula("$A$1:$A$3"); + dvConstraint = DVConstraint.createFormulaListConstraint("list1"); + +

and in both cases the user will be able to select from a drop down list containing the values from cells A1, A2 and A3.

+

The data does not have to be as the data validation. To select the data from a different sheet however, the sheet + must be given a name when created and that name should be used in the formula. So assuming the existence of a sheet named 'Data Sheet' this will work:

+ + Name namedRange = workbook.createName(); + namedRange.setNameName("list1"); + namedRange.setRefersToFormula("'Data Sheet'!$A$1:$A$3"); + dvConstraint = DVConstraint.createFormulaListConstraint("list1"); + +

as will this:

+ + dvConstraint = DVConstraint.createFormulaListConstraint("'Data Sheet'!$A$1:$A$3"); + +

whilst this will not:

+ + Name namedRange = workbook.createName(); + namedRange.setNameName("list1"); + namedRange.setRefersToFormula("'Sheet1'!$A$1:$A$3"); + dvConstraint = DVConstraint.createFormulaListConstraint("list1"); +

and nor will this:

+ dvConstraint = DVConstraint.createFormulaListConstraint("'Sheet1'!$A$1:$A$3"); + +
+
+ xssf.usermodel (.xlsx format) +

+Data validations work similarly when you are creating an xml based, SpreadsheetML, +workbook file; but there are differences. Explicit casts are required, for example, +in a few places as much of the support for data validations in the xssf stream was +built into the unifying ss stream, of which more later. Other differences are +noted with comments in the code. +

+ +

Check the value the user enters into a cell against one or more predefined value(s).

+ + XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFSheet sheet = workbook.createSheet("Data Validation"); + XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet); + XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) + dvHelper.createExplicitListConstraint(new String[]{"11", "21", "31"}); + CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0); + XSSFDataValidation validation =(XSSFDataValidation)dvHelper.createValidation( + dvConstraint, addressList); + + // Here the boolean value false is passed to the setSuppressDropDownArrow() + // method. In the hssf.usermodel examples above, the value passed to this + // method is true. + validation.setSuppressDropDownArrow(false); + + // Note this extra method call. If this method call is omitted, or if the + // boolean value false is passed, then Excel will not validate the value the + // user enters into the cell. + validation.setShowErrorBox(true); + sheet.addValidationData(validation); + + +

Drop Down Lists:

+

This code will do the same but offer the user a drop down list to select a value from.

+ + XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFSheet sheet = workbook.createSheet("Data Validation"); + XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet); + XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) + dvHelper.createExplicitListConstraint(new String[]{"11", "21", "31"}); + CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0); + XSSFDataValidation validation = (XSSFDataValidation)dvHelper.createValidation( + dvConstraint, addressList); + validation.setShowErrorBox(true); + sheet.addValidationData(validation); + +

Note that the call to the setSuppressDropDowmArrow() method can either be simply excluded or replaced with:

+ + validation.setSuppressDropDownArrow(true); + + +

Prompts and Error Messages:

+

+These both exactly mirror the hssf.usermodel so please refer to the 'Messages On Error:' and 'Prompts:' sections above. +

+ +

Further Data Validations:

+

+To obtain a validation that would check the value entered was, for example, +an integer between 10 and 100, use the XSSFDataValidationHelper(s) createNumericConstraint(int, int, String, String) factory method. +

+ + + XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) + dvHelper.createNumericConstraint( + XSSFDataValidationConstraint.ValidationType.INTEGER, + XSSFDataValidationConstraint.OperatorType.BETWEEN, + "10", "100"); + +

+The values passed to the final two String parameters can be formulas; the '=' symbol is used to denote a formula. +Thus, the following would create a validation the allows values only if they fall between the results of summing two cell ranges +

+ + XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) + dvHelper.createNumericConstraint( + XSSFDataValidationConstraint.ValidationType.INTEGER, + XSSFDataValidationConstraint.OperatorType.BETWEEN, + "=SUM(A1:A10)", "=SUM(B24:B27)"); + +

+It is not possible to create a drop down list if the createNumericConstraint() method is called, +the setSuppressDropDownArrow(true) method call will simply be ignored. +

+

+Please check the javadoc for other constraint types as examples for those will not be included here. +There are, for example, methods defined on the XSSFDataValidationHelper class allowing you to create +the following types of constraint; date, time, decimal, integer, numeric, formula, text length and custom constraints. +

+

Creating Data Validations From Spread Sheet Cells:

+

+One other type of constraint not mentioned above is the formula list constraint. +It allows you to create a validation that takes it value(s) from a range of cells. This code +

+ +XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) + dvHelper.createFormulaListConstraint("$A$1:$F$1"); + + +

+would create a validation that took it's values from cells in the range A1 to F1. +

+

+The usefulness of this technique can be extended if you use named ranges like this; +

+ + + XSSFName name = workbook.createName(); + name.setNameName("data"); + name.setRefersToFormula("$B$1:$F$1"); + XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet); + XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) + dvHelper.createFormulaListConstraint("data"); + CellRangeAddressList addressList = new CellRangeAddressList( + 0, 0, 0, 0); + XSSFDataValidation validation = (XSSFDataValidation) + dvHelper.createValidation(dvConstraint, addressList); + validation.setSuppressDropDownArrow(true); + validation.setShowErrorBox(true); + sheet.addValidationData(validation); + +

+OpenOffice Calc has slightly different rules with regard to the scope of names. +Excel supports both Workbook and Sheet scope for a name but Calc does not, it seems only to support Sheet scope for a name. +Thus it is often best to fully qualify the name for the region or area something like this; +

+ + XSSFName name = workbook.createName(); + name.setNameName("data"); + name.setRefersToFormula("'Data Validation'!$B$1:$F$1"); + .... + +

+This does open a further, interesting opportunity however and that is to place all of the data for the validation(s) into named ranges of cells on a hidden sheet within the workbook. These ranges can then be explicitly identified in the setRefersToFormula() method argument. +

+
+
ss.usermodel +

+The classes within the ss.usermodel package allow developers to create code that can be used +to generate both binary (.xls) and SpreadsheetML (.xlsx) workbooks. +

+

+The techniques used to create data validations share much in common with the xssf.usermodel examples above. +As a result just one or two examples will be presented here. +

+

Check the value the user enters into a cell against one or more predefined value(s).

+ + Workbook workbook = new XSSFWorkbook(); // or new HSSFWorkbook + Sheet sheet = workbook.createSheet("Data Validation"); + DataValidationHelper dvHelper = sheet.getDataValidationHelper(); + DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint( + new String[]{"13", "23", "33"}); + CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0); + DataValidation validation = dvHelper.createValidation( + dvConstraint, addressList); + // Note the check on the actual type of the DataValidation object. + // If it is an instance of the XSSFDataValidation class then the + // boolean value 'false' must be passed to the setSuppressDropDownArrow() + // method and an explicit call made to the setShowErrorBox() method. + if(validation instanceof XSSFDataValidation) { + validation.setSuppressDropDownArrow(false); + validation.setShowErrorBox(true); + } + else { + // If the Datavalidation contains an instance of the HSSFDataValidation + // class then 'true' should be passed to the setSuppressDropDownArrow() + // method and the call to setShowErrorBox() is not necessary. + validation.setSuppressDropDownArrow(true); + } + sheet.addValidationData(validation); + + +

Drop Down Lists:

+ +

This code will do the same but offer the user a drop down list to select a value from.

+ + + Workbook workbook = new XSSFWorkbook(); // or new HSSFWorkbook + Sheet sheet = workbook.createSheet("Data Validation"); + DataValidationHelper dvHelper = sheet.getDataValidationHelper(); + DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint( + new String[]{"13", "23", "33"}); + CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0); + DataValidation validation = dvHelper.createValidation( + dvConstraint, addressList); + // Note the check on the actual type of the DataValidation object. + // If it is an instance of the XSSFDataValidation class then the + // boolean value 'false' must be passed to the setSuppressDropDownArrow() + // method and an explicit call made to the setShowErrorBox() method. + if(validation instanceof XSSFDataValidation) { + validation.setSuppressDropDownArrow(true); + validation.setShowErrorBox(true); + } + else { + // If the Datavalidation contains an instance of the HSSFDataValidation + // class then 'true' should be passed to the setSuppressDropDownArrow() + // method and the call to setShowErrorBox() is not necessary. + validation.setSuppressDropDownArrow(false); + } + sheet.addValidationData(validation); + + +

Prompts and Error Messages:

+

+These both exactly mirror the hssf.usermodel so please refer to the 'Messages On Error:' and 'Prompts:' sections above. +

+

+As the differences between the ss.usermodel and xssf.usermodel examples are small - +restricted largely to the way the DataValidationHelper is obtained, the lack of any +need to explicitly cast data types and the small difference in behaviour between +the hssf and xssf interpretation of the setSuppressDropDowmArrow() method, +no further examples will be included in this section. +

+

Advanced Data Validations.

+

Dependent Drop Down Lists.

+

+In some cases, it may be necessary to present to the user a sheet which contains more than one drop down list. +Further, the choice the user makes in one drop down list may affect the options that are presented to them in +the second or subsequent drop down lists. One technique that may be used to implement this behaviour will now be explained. +

+

+There are two keys to the technique; one is to use named areas or regions of cells to hold the data for the drop down lists, +the second is to use the INDIRECT() function to convert between the name and the actual addresses of the cells. +In the example section there is a complete working example- called LinkedDropDownLists.java - +that demonstrates how to create linked or dependent drop down lists. Only the more relevant points are explained here. +

+

+To create two drop down lists where the options shown in the second depend upon the selection made in the first, +begin by creating a named region of cells to hold all of the data for populating the first drop down list. +Next, create a data validation that will look to this named area for its data, something like this; +

+ + CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0); + DataValidationHelper dvHelper = sheet.getDataValidationHelper(); + DataValidationConstraint dvConstraint = dvHelper.createFormulaListConstraint( + "CHOICES"); + DataValidation validation = dvHelper.createValidation( + dvConstraint, addressList); + sheet.addValidationData(validation); + +

+Note that the name of the area - in the example above it is 'CHOICES' - +is simply passed to the createFormulaListConstraint() method. This is sufficient +to cause Excel to populate the drop down list with data from that named region. +

+

+Next, for each of the options the user could select in the first drop down list, +create a matching named region of cells. The name of that region should match the +text the user could select in the first drop down list. Note, in the example, +all upper case letters are used in the names of the regions of cells. +

+ +

+Now, very similar code can be used to create a second, linked, drop down list; +

+ + + CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 1, 1); + DataValidationConstraint dvConstraint = dvHelper.createFormulaListConstraint( + "INDIRECT(UPPER($A$1))"); + DataValidation validation = dvHelper.createValidation( + dvConstraint, addressList); + sheet.addValidationData(validation); + + +

+The key here is in the following Excel function - INDIRECT(UPPER($A$1)) - which is used to populate the second, +linked, drop down list. Working from the inner-most pair of brackets, it instructs Excel to look +at the contents of cell A1, to convert what it reads there into upper case – as upper case letters are used +in the names of each region - and then convert this name into the addresses of those cells that contain +the data to populate another drop down list. +

+
+
+ +
Embedded Objects +

It is possible to perform more detailed processing of an embedded Excel, Word or PowerPoint document, + or to work with any other type of embedded object.

+

HSSF:

+ + POIFSFileSystem fs = new POIFSFileSystem(new File("excel_with_embedded.xls")); + HSSFWorkbook workbook = new HSSFWorkbook(fs); + for (HSSFObjectData obj : workbook.getAllEmbeddedObjects()) { + //the OLE2 Class Name of the object + String oleName = obj.getOLE2ClassName(); + if (oleName.equals("Worksheet")) { + DirectoryNode dn = (DirectoryNode) obj.getDirectory(); + HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(dn, false); + //System.out.println(entry.getName() + ": " + embeddedWorkbook.getNumberOfSheets()); + } else if (oleName.equals("Document")) { + DirectoryNode dn = (DirectoryNode) obj.getDirectory(); + HWPFDocument embeddedWordDocument = new HWPFDocument(dn); + //System.out.println(entry.getName() + ": " + embeddedWordDocument.getRange().text()); + } else if (oleName.equals("Presentation")) { + DirectoryNode dn = (DirectoryNode) obj.getDirectory(); + SlideShow<?,?> embeddedPowerPointDocument = new HSLFSlideShow(dn); + //System.out.println(entry.getName() + ": " + embeddedPowerPointDocument.getSlides().length); + } else { + if(obj.hasDirectoryEntry()){ + // The DirectoryEntry is a DocumentNode. Examine its entries to find out what it is + DirectoryNode dn = (DirectoryNode) obj.getDirectory(); + for (Entry entry : dn) { + //System.out.println(oleName + "." + entry.getName()); + } + } else { + // There is no DirectoryEntry + // Recover the object's data from the HSSFObjectData instance. + byte[] objectData = obj.getObjectData(); + } + } + } + +

XSSF:

+ + XSSFWorkbook workbook = new XSSFWorkbook("excel_with_embeded.xlsx"); + for (PackagePart pPart : workbook.getAllEmbeddedParts()) { + String contentType = pPart.getContentType(); + // Excel Workbook - either binary or OpenXML + if (contentType.equals("application/vnd.ms-excel")) { + HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(pPart.getInputStream()); + } + // Excel Workbook - OpenXML file format + else if (contentType.equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) { + OPCPackage docPackage = OPCPackage.open(pPart.getInputStream()); + XSSFWorkbook embeddedWorkbook = new XSSFWorkbook(docPackage); + } + // Word Document - binary (OLE2CDF) file format + else if (contentType.equals("application/msword")) { + HWPFDocument document = new HWPFDocument(pPart.getInputStream()); + } + // Word Document - OpenXML file format + else if (contentType.equals("application/vnd.openxmlformats-officedocument.wordprocessingml.document")) { + OPCPackage docPackage = OPCPackage.open(pPart.getInputStream()); + XWPFDocument document = new XWPFDocument(docPackage); + } + // PowerPoint Document - binary file format + else if (contentType.equals("application/vnd.ms-powerpoint")) { + HSLFSlideShow slideShow = new HSLFSlideShow(pPart.getInputStream()); + } + // PowerPoint Document - OpenXML file format + else if (contentType.equals("application/vnd.openxmlformats-officedocument.presentationml.presentation")) { + OPCPackage docPackage = OPCPackage.open(pPart.getInputStream()); + XSLFSlideShow slideShow = new XSLFSlideShow(docPackage); + } + // Any other type of embedded object. + else { + System.out.println("Unknown Embedded Document: " + contentType); + InputStream inputStream = pPart.getInputStream(); + } + } + +
+ +

(Since POI-3.7)

+
Autofilters + + Workbook wb = new HSSFWorkbook(); //or new XSSFWorkbook(); + Sheet sheet = wb.createSheet(); + sheet.setAutoFilter(CellRangeAddress.valueOf("C5:F200")); + +
+ +
Conditional Formatting + + Workbook workbook = new HSSFWorkbook(); // or new XSSFWorkbook(); + Sheet sheet = workbook.createSheet(); + + SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); + + ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.EQUAL, "0"); + FontFormatting fontFmt = rule1.createFontFormatting(); + fontFmt.setFontStyle(true, false); + fontFmt.setFontColorIndex(IndexedColors.DARK_RED.index); + + BorderFormatting bordFmt = rule1.createBorderFormatting(); + bordFmt.setBorderBottom(BorderStyle.THIN); + bordFmt.setBorderTop(BorderStyle.THICK); + bordFmt.setBorderLeft(BorderStyle.DASHED); + bordFmt.setBorderRight(BorderStyle.DOTTED); + + PatternFormatting patternFmt = rule1.createPatternFormatting(); + patternFmt.setFillBackgroundColor(IndexedColors.YELLOW.index); + + ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule(ComparisonOperator.BETWEEN, "-10", "10"); + ConditionalFormattingRule [] cfRules = + { + rule1, rule2 + }; + + CellRangeAddress[] regions = { + CellRangeAddress.valueOf("A3:A5") + }; + + sheetCF.addConditionalFormatting(regions, cfRules); + +

See more examples on Excel conditional formatting in + ConditionalFormats.java +

+ +
+ +
Hiding and Un-Hiding Rows +

+ Using Excel, it is possible to hide a row on a worksheet by selecting that row (or rows), + right clicking once on the right hand mouse button and selecting 'Hide' from the pop-up menu that appears. +

+

+ To emulate this using POI, simply call the setZeroHeight() method on an instance of either + XSSFRow or HSSFRow (the method is defined on the ss.usermodel.Row interface that both classes implement), like this: +

+ + Workbook workbook = new XSSFWorkbook(); // OR new HSSFWorkbook() + Sheet sheet = workbook.createSheet(0); + Row row = workbook.createRow(0); + row.setZeroHeight(); + +

+ If the file were saved away to disc now, then the first row on the first sheet would not be visible. +

+

+ Using Excel, it is possible to unhide previously hidden rows by selecting the row above and the row below + the one that is hidden and then pressing and holding down the Ctrl key, the Shift and the pressing + the number 9 before releasing them all. +

+

+ To emulate this behaviour using POI do something like this: +

+ + Workbook workbook = WorkbookFactory.create(new File(.......)); + Sheet = workbook.getSheetAt(0); + Iterator<Row> row Iter = sheet.iterator(); + while(rowIter.hasNext()) { + Row row = rowIter.next(); + if(row.getZeroHeight()) { + row.setZeroHeight(false); + } + } + +

+ If the file were saved away to disc now, any previously hidden rows on the first sheet of the workbook would now be visible. +

+

+ The example illustrates two features. Firstly, that it is possible to unhide a row simply by calling the setZeroHeight() + method and passing the boolean value 'false'. Secondly, it illustrates how to test whether a row is hidden or not. + Simply call the getZeroHeight() method and it will return 'true' if the row is hidden, 'false' otherwise. +

+
+ +
Setting Cell Properties +

+ Sometimes it is easier or more efficient to create a spreadsheet with basic styles and then apply special styles to certain cells + such as drawing borders around a range of cells or setting fills for a region. CellUtil.setCellProperties lets you do that without creating + a bunch of unnecessary intermediate styles in your spreadsheet. +

+

+ Properties are created as a Map and applied to a cell in the following manner. +

+ + Workbook workbook = new XSSFWorkbook(); // OR new HSSFWorkbook() + Sheet sheet = workbook.createSheet("Sheet1"); + Map<String, Object> properties = new HashMap<String, Object>(); + + // border around a cell + properties.put(CellUtil.BORDER_TOP, BorderStyle.MEDIUM); + properties.put(CellUtil.BORDER_BOTTOM, BorderStyle.MEDIUM); + properties.put(CellUtil.BORDER_LEFT, BorderStyle.MEDIUM); + properties.put(CellUtil.BORDER_RIGHT, BorderStyle.MEDIUM); + + // Give it a color (RED) + properties.put(CellUtil.TOP_BORDER_COLOR, IndexedColors.RED.getIndex()); + properties.put(CellUtil.BOTTOM_BORDER_COLOR, IndexedColors.RED.getIndex()); + properties.put(CellUtil.LEFT_BORDER_COLOR, IndexedColors.RED.getIndex()); + properties.put(CellUtil.RIGHT_BORDER_COLOR, IndexedColors.RED.getIndex()); + + // Apply the borders to the cell at B2 + Row row = sheet.createRow(1); + Cell cell = row.createCell(1); + CellUtil.setCellStyleProperties(cell, properties); + + // Apply the borders to a 3x3 region starting at D4 + for (int ix=3; ix <= 5; ix++) { + row = sheet.createRow(ix); + for (int iy = 3; iy <= 5; iy++) { + cell = row.createCell(iy); + CellUtil.setCellStyleProperties(cell, properties); + } + } + + +

+ NOTE: This does not replace the properties of the cell, it merges the properties you have put into the Map with the + cell's existing style properties. If a property already exists, it is replaced with the new property. If a property does not + exist, it is added. This method will not remove CellStyle properties. +

+
+ +
+ Drawing Borders +

+ In Excel, you can apply a set of borders on an entire workbook region at the press of a button. The PropertyTemplate + object simulates this with methods and constants defined to allow drawing top, bottom, left, right, horizontal, + vertical, inside, outside, or all borders around a range of cells. Additional methods allow for applying colors + to the borders. +

+

+ It works like this: you create a PropertyTemplate object which is a container for the borders you wish to apply to a + sheet. Then you add borders and colors to the PropertyTemplate, and finally apply it to whichever sheets you need + that set of borders on. You can create multiple PropertyTemplate objects and apply them to a single sheet, or you can + apply the same PropertyTemplate object to multiple sheets. It is just like a preprinted form. +

+

+ Enums: +

+
+
BorderStyle
+
+ Defines the look of the border, is it thick or thin, solid or dashed, single or double. + This enum replaces the CellStyle.BORDER_XXXXX constants which have been deprecated. The PropertyTemplate will not + support the older style BORDER_XXXXX constants. A special value of BorderStyle.NONE will remove the border from + a Cell once it is applied. +
+
BorderExtent
+
+ Describes the portion of the region that the BorderStyle will apply to. For example, TOP, BOTTOM, INSIDE, or OUTSIDE. + A special value of BorderExtent.NONE will remove the border from the PropertyTemplate. When the template is applied, + no change will be made to a cell border where no border properties exist in the PropertyTemplate. +
+
+ + // draw borders (three 3x3 grids) + PropertyTemplate pt = new PropertyTemplate(); + // #1) these borders will all be medium in default color + pt.drawBorders(new CellRangeAddress(1, 3, 1, 3), + BorderStyle.MEDIUM, BorderExtent.ALL); + // #2) these cells will have medium outside borders and thin inside borders + pt.drawBorders(new CellRangeAddress(5, 7, 1, 3), + BorderStyle.MEDIUM, BorderExtent.OUTSIDE); + pt.drawBorders(new CellRangeAddress(5, 7, 1, 3), BorderStyle.THIN, + BorderExtent.INSIDE); + // #3) these cells will all be medium weight with different colors for the + // outside, inside horizontal, and inside vertical borders. The center + // cell will have no borders. + pt.drawBorders(new CellRangeAddress(9, 11, 1, 3), + BorderStyle.MEDIUM, IndexedColors.RED.getIndex(), + BorderExtent.OUTSIDE); + pt.drawBorders(new CellRangeAddress(9, 11, 1, 3), + BorderStyle.MEDIUM, IndexedColors.BLUE.getIndex(), + BorderExtent.INSIDE_VERTICAL); + pt.drawBorders(new CellRangeAddress(9, 11, 1, 3), + BorderStyle.MEDIUM, IndexedColors.GREEN.getIndex(), + BorderExtent.INSIDE_HORIZONTAL); + pt.drawBorders(new CellRangeAddress(10, 10, 2, 2), + BorderStyle.NONE, + BorderExtent.ALL); + + // apply borders to sheet + Workbook wb = new XSSFWorkbook(); + Sheet sh = wb.createSheet("Sheet1"); + pt.applyBorders(sh); + +

+ NOTE: The last pt.drawBorders() call removes the borders from the range by using BorderStyle.NONE. Like + setCellStyleProperties, the applyBorders method merges the properties of a cell style, so existing borders + are changed only if they are replaced by something else, or removed only if they are replaced by + BorderStyle.NONE. To remove a color from a border, use IndexedColor.AUTOMATIC.getIndex(). +

+

Additionally, to remove a border or color from the PropertyTemplate object, use BorderExtent.NONE.

+

+ This does not work with diagonal borders yet. +

+
+ +
Creating a Pivot Table +

+ Pivot Tables are a powerful feature of spreadsheet files. You can create a pivot table with the following piece of code. +

+ + XSSFWorkbook wb = new XSSFWorkbook(); + XSSFSheet sheet = wb.createSheet(); + + //Create some data to build the pivot table on + setCellData(sheet); + + XSSFPivotTable pivotTable = sheet.createPivotTable(new AreaReference("A1:D4"), new CellReference("H5")); + //Configure the pivot table + //Use first column as row label + pivotTable.addRowLabel(0); + //Sum up the second column + pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 1); + //Set the third column as filter + pivotTable.addColumnLabel(DataConsolidateFunction.AVERAGE, 2); + //Add filter on forth column + pivotTable.addReportFilter(3); + +
+ +
Cells with multiple styles (Rich Text Strings) +

+ To apply a single set of text formatting (colour, style, font etc) + to a cell, you should create a + CellStyle + for the workbook, then apply to the cells. +

+ + // HSSF Example + HSSFCell hssfCell = row.createCell(idx); + //rich text consists of two runs + HSSFRichTextString richString = new HSSFRichTextString( "Hello, World!" ); + richString.applyFont( 0, 6, font1 ); + richString.applyFont( 6, 13, font2 ); + hssfCell.setCellValue( richString ); + + + // XSSF Example + XSSFCell cell = row.createCell(1); + XSSFRichTextString rt = new XSSFRichTextString("The quick brown fox"); + + XSSFFont font1 = wb.createFont(); + font1.setBold(true); + font1.setColor(new XSSFColor(new java.awt.Color(255, 0, 0))); + rt.applyFont(0, 10, font1); + + XSSFFont font2 = wb.createFont(); + font2.setItalic(true); + font2.setUnderline(XSSFFont.U_DOUBLE); + font2.setColor(new XSSFColor(new java.awt.Color(0, 255, 0))); + rt.applyFont(10, 19, font2); + + XSSFFont font3 = wb.createFont(); + font3.setColor(new XSSFColor(new java.awt.Color(0, 0, 255))); + rt.append(" Jumped over the lazy dog", font3); + + cell.setCellValue(rt); + +

+ To apply different formatting to different parts of a cell, you + need to use + RichTextString, + which permits styling of parts of the text within the cell. +

+

+ There are some slight differences between HSSF and XSSF, especially + around font colours (the two formats store colours quite differently + internally), refer to the + HSSF Rich Text String + and + XSSF Rich Text String + javadocs for more details. +

+
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/record-generator.xml b/src/documentation/content/xdocs/components/spreadsheet/record-generator.xml new file mode 100644 index 0000000000..39f328bc78 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/record-generator.xml @@ -0,0 +1,212 @@ + + + + + +
+ Record Generator HOWTO + + + + +
+ +
How to Use the Record Generator + +
History +

+ The record generator was born from frustration with translating + the Excel records to Java classes. Doing this manually is a time + consuming process. It's also very easy to make mistakes. +

+

+ A utility was needed to take the definition of what a + record looked like and do all the boring and repetitive work. +

+
+ +
Capabilities +

+ The record generator takes XML as input and produces the following + output: +

+
    +
  • A Java file capable of decoding and encoding the record.
  • +
  • A test class that provides a fill-in-the-blanks implementation + of a test case for ensuring the record operates as + designed.
  • +
+
+
Usage +

+ The record generator is invoked as an Ant target + (generate-records). It goes through looking for all files in + src/records/definitions ending with _record.xml. + It then creates two files; the Java record definition and the + Java test case template. +

+

+ The records themselves have the following general layout: +

+ + The frame record indicates whether there is a border + around the displayed text of a chart. + Glen Stampoultzis (glens at apache.org) + + + + + + + + + + + + ]]> +

+ The following table details the allowable types and sizes for + the fields. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeSizeJava Type
int1byte
int2short
int4int
int8long
intvarwordarray of shorts
bits1A byte comprising of a bits (defined by the bit element) +
bits2An short comprising of a bits
bits4A int comprising of a bits
float8double
hbstringjava expressionString
+

+ The Java records are regenerated each time the record generator is + run, however the test stubs are only created if the test stub does + not already exist. What this means is that you may change test + stubs but not the generated records. +

+
+
Custom Field Types +

+ Occasionally the builtin types are not enough. More control + over the encoding and decoding of the streams is required. This + can be achieved using a custom type. +

+

+ A custom type lets you escape to java to define the way in which + the field encodes and decodes. To code a custom type you + declare your field like this: +

+ + ]]> +

+ Where the class name specified after custom: is a + class implementing the interface CustomField. +

+

+ You can then implement the encoding yourself. +

+
+
How it Works +

+ The record generation works by taking an XML file and styling it + using XSLT. Given that XSLT is a little limited in some ways it was + necessary to add a little Java code to the mix. +

+

+ See record.xsl, record_test.xsl, FieldIterator.java, + RecordUtil.java, RecordGenerator.java +

+

+ There is a corresponding "type" generator for HWPF. + See the HWPF documentation for details. +

+
+
Limitations +

+ The record generator does not handle all possible record types and + goes not intend to perform this function. When dealing with a + non-standard record sometimes the cost-benefit of coding the + record by hand will be greater than attempting modify the + generator. The main point of the record generator is to save + time, so keep that in mind. +

+

+ Currently the XSL file that generates the record calls out to + Java objects. The Java code for the record generation is + currently quite messy with minimal comments. +

+
+
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/use-case.xml b/src/documentation/content/xdocs/components/spreadsheet/use-case.xml new file mode 100644 index 0000000000..6c8ed246e7 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/use-case.xml @@ -0,0 +1,200 @@ + + + + + +
+ HSSF Use Cases + + + +
+ +
HSSF Use Cases +
Use Case 1: Read existing HSSF + +

Primary Actor: HSSF client

+

Scope: HSSF

+

Level: Summary

+

Stakeholders and Interests:

+
    +
  • HSSF client- wants to read content + of HSSF file
  • +
  • HSSF - understands HSSF file
  • +
  • POIFS - understands underlying POI + file system
  • +
+

Precondition: None

+

Minimal Guarantee: None

+

Main Success Guarantee:

+
    +
  1. HSSF client requests HSSF to read + a HSSF file, providing an InputStream + containing HSSF file in question.
  2. +
  3. HSSF requests POIFS to read the HSSF + file, passing the InputStream + object to POIFS (POIFS use case 1, read existing file system)
  4. +
  5. HSSF reads the "Workbook" + file (use case 4, read workbook entry)
  6. +
+

Extensions:

+

2a. Exceptions +thrown by POIFS will be passed on to the HSSF client.

+
+
Use Case 2: Write HSSF file + +

Primary Actor: HSSF client

+

Scope: HSSF

+

Level: Summary

+

Stakeholders and Interests:

+
    +
  • HSSF client- wants to write file + out.
  • +
  • HSSF - knows how to write file + out.
  • +
  • POIFS - knows how to write file + system out.
  • +
+

Precondition:

+
    +
  • File has been + read (use case 1, read existing HSSF file) and subsequently modified + or file has been created (use case 3, create HSSF file)
  • +
+

Minimal Guarantee: None

+

Main Success Guarantee:

+
    +
  1. HSSF client + provides an OutputStream to + write the file to.
  2. +
  3. HSSF writes + the "Workbook" to its associated POIFS file system (use case + 5, write workbook entry)
  4. +
  5. HSSF + requests POIFS to write its file system out, using the OutputStream + obtained from the HSSF client (POIFS use case 2, write file system).
  6. +
+

Extensions:

+

3a. Exceptions +from POIFS are passed to the HSSF client.

+ +
+
Use Case 3:Create HSSF file + +

Primary Actor: HSSF client

+

Scope: HSSF

+

+Level: Summary

+

Stakeholders and Interests:

+
    +
  • HSSF client- wants to create a new + file.
  • +
  • HSSF - knows how to create a new + file.
  • +
  • POIFS - knows how to create a new + file system.
  • +
+

Precondition:

+

Minimal Guarantee: None

+

Main Success Guarantee:

+
    +
  1. HSSF requests + POIFS to create a new file system (POIFS use case 3, create new file + system)
  2. +
+

Extensions: +None

+ +
+
Use Case 4: Read workbook entry +

Primary Actor: HSSF

+

Scope: HSSF

+

+Level: Summary

+

Stakeholders and Interests:

+
    +
  • HSSF - knows how to read the + workbook entry
  • +
  • POIFS - knows how to manage the file + system.
  • +
+

Precondition:

+
    +
  • The file + system has been read (use case 1, read existing HSSF file) or has + been created and written to (use case 3, create HSSF file system; + use case 5, write workbook entry).
  • +
+

Minimal +Guarantee: None

+

Main Success Guarantee:

+
    +
  1. + HSSF requests POIFS for the "Workbook" file
  2. +
  3. POIFS returns + an InputStream for the file.
  4. +
  5. HSSF reads + from the InputStream provided by POIFS
  6. +
  7. HSSF closes + the InputStream provided by POIFS
  8. +
+

Extensions:

+

3a. Exceptions +thrown by POIFS will be passed on

+
+
Use Case 5: Write workbook entry + + +

Primary Actor: HSSF

+

Scope: HSSF

+

+Level: Summary

+

Stakeholders and Interests:

+
    +
  • HSSF - knows how to manage the + write the workbook entry.
  • +
  • POIFS - knows how to manage the file + system.
  • +
+

Precondition: +

+
    +
  • Either an existing HSSF file has + been read (use case 1, read existing HSSF file) or an HSSF file has + been created (use case 3, create HSSF file).
  • +
+

Minimal Guarantee: None

+

Main Success Guarantee:

+
    +
  1. HSSF + checks the POIFS file system directory for the "Workbook" + file (POIFS use case 8, read file system directory)
  2. +
  3. If "Workbook" is in the directory, HSSF requests POIFS to + replace it with the new workbook entry (POIFS use case 4, replace file + in file system). Otherwise, HSSF requests POIFS to write the new + workbook file, with the name "Workbook" (POIFS use case 6, + write new file to file system)
  4. +
+

Extensions:None

+
+ +
+ +
diff --git a/src/documentation/content/xdocs/components/spreadsheet/user-defined-functions.xml b/src/documentation/content/xdocs/components/spreadsheet/user-defined-functions.xml new file mode 100644 index 0000000000..ca4ab19dd7 --- /dev/null +++ b/src/documentation/content/xdocs/components/spreadsheet/user-defined-functions.xml @@ -0,0 +1,414 @@ + + + + + +
+ User Defined Functions + + + + +
+ +
How to Create and Use User Defined Functions + +
Description +

This document describes the User Defined Functions within POI. + User defined functions allow you to take code that is written in VBA + and re-write in Java and use within POI. Consider the following example.

+
+
An Example +

Suppose you are given a spreadsheet that can calculate the principal and interest + payments for a mortgage. The user enters the principal loan amount, the interest rate + and the term of the loan. The Excel spreadsheet does the rest.

+

+ mortgage calculation spreadsheet +

+

When you actually look at the workbook you discover that rather than having + the formula in a cell it has been written as VBA function. You review the + function and determine that it could be written in Java:

+

+ VBA code +

+

If we write a small program to try to evaluate this cell, we'll fail. Consider this source code:

+ +

If you run this code, you're likely to get the following error:

+ + + +

How would we make it so POI can use this sheet?

+
+ +
Defining Your Function +

To 'convert' this code to Java and make it available to POI you need to implement + a FreeRefFunction instance. FreeRefFunction is an interface in the org.apache.poi.ss.formula.functions + package. This interface defines one method, evaluate(ValueEval[] args, OperationEvaluationContext ec), + which is how you will receive the argument values from POI.

+

The evaluate() method as defined above is where you will convert the ValueEval instances to the + proper number types. The following code snippet shows you how to get your values:

+ + + +

The first thing we do is check the number of arguments being passed since there is no sense + in attempting to go further if you are missing critical information.

+

Next we declare our variables, in our case we need variables for:

+
    +
  • principal - the amount of the loan
  • +
  • rate - the interest rate as a decimal
  • +
  • years - the length of the loan in years
  • +
  • result - the result of the calculation
  • +
+

Next, we use the OperandResolver to convert the ValueEval instances to doubles, though not directly. + First we start by getting discreet values. Using the OperandResolver.getSingleValue() method + we retrieve each of the values passed in by the cell in the spreadsheet. Next, we use the + OperandResolver again to convert the ValueEval instances to doubles, in this case. This + class has other methods of coercion for getting Strings, ints and booleans. Now that we've + got our primitive values we can move on to calculating the value.

+

As shown previously, we have the VBA source. We need to add code to our class to calculate + the payment. To do this you could simply add it to the method we've already created but I've + chosen to add it as its own method. Add the following method:

+ +

The biggest change necessary is related to the exponents; Java doesn't have a notation for this + so we had to add calls to Math.pow(). Now we need to add this call to our previous method:

+ +

Having done that, the last things we need to do are to check to make sure we didn't get a bad result and, + if not, we need to return the value. Add the following code to the class:

+ +

Then add a line of code to our evaluate method to call this new static method, complete our try/catch and return the value:

+ + +

So the whole class would be as follows:

+ + result is NaN or Infinity + */ + static final void checkValue(double result) throws EvaluationException { + if (Double.isNaN(result) || Double.isInfinite(result)) { + throw new EvaluationException(ErrorEval.NUM_ERROR); + } + } + +} + + ]]> + +

Great! Now we need to go back to our original program that failed to evaluate our cell and add code that will allow it run our new Java code.

+ +
+ +
Registering Your Function +

Now we need to register our function in the Workbook, so that the Formula Evaluator can resolve the name "calculatePayment" +and map it to the actual implementation (CalculateMortgage). This is done using the UDFFinder object. +The UDFFinder manages FreeRefFunctions which are our analogy for the VBA code. We need to create a UDFFinder. There are + a few things we need to know in order to do this:

+
    +
  • The name of the function in the VBA code (in our case it is calculatePayment)
  • +
  • The Class name of our FreeRefFunction
  • +
+

UDFFinder is actually an interface, so we need to use an actual implementation of this interface. Therefore we use the org.apache.poi.ss.formula.udf.DefaultUDFFinder class. If you refer to the Javadocs you'll see that this class expects to get two arrays, one + containing the alias and the other containing an instance of the class that will represent that alias. In our case our alias will be calculatePayment + and our class instance will be of the CalculateMortgage type. This class needs to be available at compile and runtime. Be sure to keep these arrays + well organized because you'll run into problems if these arrays are of different sizes or the alias aren't in the same relative position in their respective + arrays. Add the following code:

+ +

Now we have our UDFFinder instance and we've created the AggregatingUDFFinder instance. The last step is to pass this to our Workbook:

+ + +

So now the whole class will look like this:

+ +

Now that our evaluator is aware of the UDFFinder which in turn is aware of our FreeRefFunction, we're ready to re-run our example:

+ Evaluator mortgage-calculation.xls Sheet1!B4 +

which prints the following output in the console:

+ +

That is it! Now you can create Java code and register it, allowing your POI based appliction to run spreadsheets that previously were inaccessible.

+

This example can be found in the poi-examples/src/main/java/org/apache/poi/examples/ss/formula folder in the source.

+
+
+ +
+ diff --git a/src/documentation/content/xdocs/devel/guidelines.xml b/src/documentation/content/xdocs/devel/guidelines.xml new file mode 100644 index 0000000000..9efe5416b6 --- /dev/null +++ b/src/documentation/content/xdocs/devel/guidelines.xml @@ -0,0 +1,408 @@ + + + + + +
+ Apache POI™ - Contribution Guidelines + + + + +
+ + + +
Index of Contribution Guidelines + +
+ + +
Introduction + +
Disclaimer +

+ Any information in here that might be perceived as legal information is + informational only. We're not lawyers, so consult a legal professional + if needed. +

+
+ +
The Licensing +

+ The POI project is OpenSource + and developed/distributed under the + Apache Software License v2. Unlike some other licenses, the Apache + license allows free open source development. Unlike some other Open Source + licenses, it does not require you to release your source or use any + particular license for your code which builds on top of it. (There are a + handful of restrictions, especially around attribution, notices and trademarks, + so it's worth a read of the license - it isn't scary!). If you wish to + contribute to Apache POI (which you're very welcome and encouraged to do so), + then you must agree to grant your contributions to us under the same license. +

+
+
+ + +
Where is help needed on the project? +

There are a lot of open issues in Bugzilla and TODOs in the code. Please see + the section below for more on these. Get in touch using our mailing lists if you want + to volunteer.

+
+ + +
I just want to get involved, but don't know where to start? +
    +
  • Read the rest of the website, understand what POI is and what it does, + the project vision, etc.
  • +
  • Use POI a bit, look for gaps in the documentation and examples.
  • +
  • Join the mailing lists and share your knowledge with others.
  • +
  • Get Subversion and check out the POI source tree
  • +
  • Documentation is always the best place to start contributing, maybe you found that if the documentation just told you how to do X then it would make more sense, modify the documentation.
  • +
  • Contribute examples - if there's something people are often asking about on the user list which isn't covered in the documentation or current examples, try writing an example of this and uploading it as a patch.
  • +
  • Get used to building POI, you'll be doing it a lot, be one with the build, know its targets, etc.
  • +
  • Write Unit Tests. Great way to understand POI. Look for classes that aren't tested, or aren't tested on a public/protected method level, start there.
  • +
  • Download the file format documentation from Microsoft - + OLE2 Binary + File Formats or + OOXML XML File Formats
  • +
  • Submit patches (see below) of your contributions, modifications.
  • +
  • Check the bug database for simple problem reports, and write a patch to fix the problem
  • +
  • Review existing patches in the bug database, and report if they still apply, if they need unit tests atc.
  • +
  • Take a look at all the unresolved issues in the bug database, and see if you can help with testing or patches for them
  • +
  • Add in new features, see Bug database for suggestions.
  • +
+ +

The Apache Contributors Tech Guide gives a good overview how to start contributing patches.

+ +

The Nutch project also have a very useful guide on becoming a + new developer in their project. While it is written for their project, + a large part of it will apply to POI too. You can read it at + http://wiki.apache.org/nutch/Becoming_A_Nutch_Developer. The + Apache Community Development + Project also provides guidance and mentoring for new contributors.

+
+ + +
Submitting Patches +

+ If you use GitHub, you can submit Pull Requests to https://github.com/apache/poi. It is probably + a good idea to create an issue in the Bug Database + first and reference it in the PR. +

+

+ For Subversion fans, you can add patch files to the Bugzilla issues at + Bug Database. + If there is already a bug-report, attach it there, otherwise create a new bug, + set the subject to [PATCH] followed by a brief description. + Explain you patch and any special instructions and submit/save it. + Next, go back to the bug, and create attachments for the patch files you + created. Be sure to describe not only the files purpose, but its format. + (Is that ZIP or a tgz or a bz2 or what?). +

+

+ Ideally, patches should be submitted early and often. This is for + two key reasons. Firstly, it's much easier to review smaller patches + than large ones. This means that smaller patches are much more likely + to be applied to SVN in a timely fashion. Secondly, by sending in your + patches earlier rather than later, it's much easier to get feedback + on your coding and direction. If you've missed an easier way to do something, + or are duplicating some (probably hidden) existing code, or taking things + in an unusual direction, it's best to get the feedback sooner rather than + later! As such, when submitting patches to POI, as with other Apache + Software Foundation projects, do please try to submit early and often, rather + than "throwing a large patch over the wall" at the end. +

+

+ A number of Apache projects provide far more comprehensive guides to producing + and submitting patches than we do, you may wish to review some of their + information if you're unsure. The + Apache Commons one + is fairly similar as a starting point. +

+

You may create your patch file using either of the following approaches (the committers recommend the first):

+
Approach 1 - use Ant +

Use Ant to generate a patch file to POI:

+ + ant -f patch.xml + +

+ This will create a file named patch.tar.gz that will contain a unified diff of files that have been modified + and also include files that have been added. Review the file for completeness and correctness. This approach + is recommended because it standardizes the way in which patch files are constructed. It also eliminates the + chance of you missing to submit new files that constitute part of the patch. +

+

+ To apply a previously generated patch.tar.gz file to a clean subversion checkout, use the following command. + It will unpack the tarball and add new files to the subversion working copy. +

+ + ant -f patch.xml apply + +
+
Approach 2 - the manual way +

+ Patches to existing files should be generated with svn diff filename and save the output to a file. + If you want to get the changes made to multiple files in a directory, just use svn diff. + then, tar and gzip the patch file as well as any new files that you have added. +

+

If you use a unix shell, you may find the following following + sequence of commands useful for building the files to attach.

+ + # run this in the root of the checkout, i.e. the directory holding + # build.xml and poi.pom + + # build the directory to hold new files + mkdir /tmp/poi-patch/ + mkdir /tmp/poi-patch/new-files/ + + # get changes to existing files + svn diff > /tmp/poi-patch/diff.txt + + # capture any new files, as svn diff won't include them + # preserve the path + svn status | grep "^\?" | awk '{printf "cp --parents %s /tmp/poi-patch/new-files/\n", $2 }' | sh -s + + # tar up the new files + cd /tmp/poi-patch/new-files/ + tar jcvf ../new-files.tar.bz2 + cd .. + + # upload these to bugzilla + echo "please upload to bugzilla:" + echo " /tmp/poi-patch/diff.txt" + echo " /tmp/poi-patch/new-files.tar.bz2" + +
+
Approach 3 - the git way +

+ If you are working on a Git clone of Apache POI (see the + Version Control page for + more on the read-only Git mirrors), it is possible to generate + a patch of your changes (including new binary files) using Git. +

+

+ For new developers, we'd normally suggest using Subversion and + one of the methods above, as they tend to be simpler. For people + who are already proficient with Git, then generating a patch + from Git can be an easy way to contribute! +

+

+ When generating a patch / patch set from Git, for many related and + small changes a squashed patch is probably best, as it makes the + (manual) review quicker. For larger changes, several distinct + patches are probably best. +

+

+ If you intend to do a noticeable amount of work enhancing Apache POI + on your own Git repo, we would suggest sending in patches early and + asking for advice. There's nothing worse than spending a week working + hard on your own on a change, only to discover you did something on + Day 1 that isn't acceptable to the project meaning your whole patch + needs re-doing... Git's offline workflow makes this easier, so try not + to fall into that trap! +

+
+
checklist before submitting a patch +
    +
  • Added code complies with coding standards.
  • +
  • Added code compiles and runs on Java 1.8 and preferably newer versions.
  • +
  • New java files begin with the + Apache Software License statement.
  • +
  • The code does not depend on code that is unlicensed or + incompatibly licensed with ASL 2.0. + GPL and LGPL code may not be used.
  • +
  • The code does not include @author tags.
  • +
  • Existing test cases succeed.
  • +
  • New test cases written and succeed (Use @Disabled from org.junit for in-progress work).
  • +
  • Documentation page extended as appropriate.
  • +
  • Examples updated or added as appropriate.
  • +
  • Diff files generated using svn diff.
  • +
  • Newly added files are included in the patch or alongside the patch.
  • +
  • The bugzilla subject dev contains [PATCH], task name and patch reason in subject.
  • +
  • The bugzilla description contains a rationale for the patch.
  • +
  • Attachment to the bugzilla entry contains the patch file.
  • +
+
+
+ + +
Code Style +

The long standing + Minimal + Coding Standards from 2002 still largely apply to the project.

+

When making changes to an existing file, please try to follow the + same style that that file already uses. This will keep things + looking similar, and will prevent patches becoming largely about + whitespace. Whitespace fixing changes, if needed, should normally be + in their own commit, so that they don't crowd out coding changes + in review.

+

Normally, tabs should not be used to indent code. Instead, spaces + should be used. If starting on a fresh file, please use 4 spaces to + indent your code. If working on an existing file, please use + whichever of 3 or 4 spaces that file already follows.

+

Normally, braces should open on the same line as the decision + statement. Braces should normally close on their own line. Brackets + should normally have a space before them when they are the first.

+

Lines normally shouldn't be too long. There's no hard and fast rule, + but if you line is getting above about 90 characters think about + splitting it, and you should rarely create something over about 100 + characters without a very good reason!

+
+ + +
Mentoring and Committership +

The POI project will generally offer committership to contributors who send + in consistently good patches over a period of several months.

+

The requirement for "good patches" generally means patches which can be applied + to SVN with little or no changes. These patches should include unit test, and + appropriate documentation. Whilst your first patch to POI may require quite a + bit of work before it can be committed by an existing committer, with any luck + your later patches will be applied with no / minor tweaks. Please do take note + of any changes required by your earlier patches, to learn for later ones! If + in doubt, ask on the dev mailing list.

+

The requirement for patches over several months is to ensure that committers + remain with the project. It's very easy for a good developer to fire off half + a dozen good patches in the couple of weeks that they're working on a POI + powered project. However, if that developer then moves away, and stops + contributing to POI after that spurt, then they're not a good candidate for + committership. As such, we generally require people to stay around for a while, + submitting patches and helping on the mailing list before considering them + for committership.

+

Where possible, patches should be submitted early and often. For more details + on this, please see the "Submitting Patches" section above.

+ +

Where possible, the existing developers will try to help and mentor new + contributors. However, everyone involved in POI is a volunteer, and it may + happen that your first few patches come in at a time when all the committers + are very busy. Do please have patience, and remember to use the + dev mailing list so that other + contributors can assist you!

+

For more information on getting started at Apache, mentoring, and local + Apache Committers near you who can offer advice, please see the + Apache Community Development + Project website.

+
+ + +
File Format Information +
Publicly Available Information on the file formats +

+ In early 2008, Microsoft made a fairly complete set of documentation + on the binary file formats freely and publicly available. These were + released under the + Open Specification Promise, which does allow us to use them for + building open source software under the + Apache Software License. +

+

+ You can download the documentation on Excel, Word, PowerPoint and + Escher (drawing) from + http://msdn.microsoft.com/en-us/library/cc313118.aspx. + Documentation on a few of the supporting technologies used in these + file formats can be downloaded from + http://msdn.microsoft.com/en-us/library/jj633110.aspx. +

+

+ For the VSDX format (implemented in Apache POI as XDGF), an + introduction + is available from Microsoft, and full details are available + here + and + here. +

+

+ Previously, Microsoft published a book on the Excel 97 file format. + It can still be of plenty of use, and is handy dead tree form. Pick up + a copy of "Excel 97 Developer's Kit" from your favourite second hand + book store. +

+

+ The newer Office Open XML (ooxml) file formats are documented as part + of the ECMA / ISO standardisation effort for the formats. This + documentation is quite large, but you can normally find the bit you + need without too much effort! This can be downloaded from + https://ecma-international.org/publications-and-standards/standards/ecma-376/, + and is also under the + OSP. +

+

+ Additionally for the newer Office Open XML (ooxml) file formats, you can + find some good introductary documentation (often clearer for getting + started with) at officeopenxml.com, + which is an independent site documenting the file formats. +

+

+ It is also worth checking the documentation and code of the other + open source implementations of the file formats. +

+
+
I just signed an NDA to get a spec from Microsoft and I'd like to contribute +

+ In short, stay away, stay far far away. Implementing these file formats + in POI is done strictly by using public information. Most of this Public + Information currently comes from the documentation that Microsoft + makes freely available (see above). The rest of the public information + includes sources from other open source projects, books that state the + purpose intended is for allowing implementation of the file format and + do not require any non-disclosure agreement and just hard work. + We are intent on keeping it legal, by contributing patches you agree to + do the same. +

+

+ If you've ever received information regarding the OLE 2 Compound Document + Format under any type of exclusionary agreement from Microsoft, or + received such information from a person bound by such an agreement, you + cannot participate in this project. Sorry. Well, unless you can persuade + Microsoft to release you from the terms of the NDA on the grounds that + most of the information is now publicly available. However, if you have + been party to a Microsoft NDA, you will need to get clearance from Microsoft + before contributing. +

+

+ Those submitting patches that show insight into the file format may be + asked to state explicitly that they have only ever read the publicly + available file format information, and not any received under an NDA + or similar, and have only made us of the public documentation. +

+
+
+ + +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/devel/history/changes-3x.xml b/src/documentation/content/xdocs/devel/history/changes-3x.xml new file mode 100644 index 0000000000..bf20e18103 --- /dev/null +++ b/src/documentation/content/xdocs/devel/history/changes-3x.xml @@ -0,0 +1,2255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Current releases +

The change log for the current release can be found in the home section.

+
+ + + + Removal of deprecated classes and methods that were marked for removal in v3.17 + Various modules: add sanity checks and fix infinite loops / OOMs caused by fuzzed data + OPC: fix linebreak handling on XML signature calculation (#61182) + SS Common: fix number formatting (github-43/52, #60422) + SXSSF: fix XML processing - unicode surrogates and line breaks (#61048, #61246) + + + POI OOXML-Schema lookup uses wrong classloader + Handle ruby (phonetic) elements in XWPFRun + PushbackInputStreams passed to ZipHelper may not hold 8 bytes + Support formula evaluation with functions containing more than 127 arguments + Fix issue with number formatting in non-default locales + Fix issue where carriage returns were being escaped as line feeds + Do not replace Unicode Surrogate chars with ? when writing SXXSF sheets + Unify escher shape id allocation + Use unsynchronized xmlbeans + Add more sanity checks before allocation of byte arrays in HEMF/HWMF + Avoid infinite loop with corrupt file + Avoid OOM in hpsf with corrupt file + Font group handling / common font interface + Avoid infinite loop with corrupt file + Handle zero-length headerfooter and 2 byte WriteProtectRecord + RoundUp and RoundDown functions round incorrectly in some scenarios + Support number formats with trailing commas + Fix bug that allowed IOUtils.skipFully to enter infinite loop + More helpful exception on unsupported old MS Write WRI files + Refactor and unify toString/toXml in DDF + Invalid signature created for streamed xlsx file + + + + + + XSSF: improved support for XSSFTables + HSLF: various fixes in table support + HPSF: reworked to cover edge cases and better support non-latin charsets + SL Common: fixed rendering of preset-shapes + HWPF: support for Binary RC4 / CryptoAPI de-/encryption + + + XSSFDrawing.getAnchorFromParent handles CTOneCellAnchor incorrectly, ignores CTAbsoluteAnchor + Output file get corrupted with SXSSFWorkbook and "chart sheet" + Allow for extra bytes in FormatRecord + Add formula support for LOOKUP(lookup_value, array) + Text with Japanese characters overflows textbox + XSSFTable improved support for creating columns and setting table areas, without needing to use CT classes + XSSFTable should format numeric/date cells when used as Column Header names as Excel does + En-/decryption support for HWPF + Round trip workbook encryption and decryption + XSSFDrawing.getShapes() returns zero if sheet has more than one embedded OLE object + Fix preset shape rendering and shading + Allow workbooks to contain more than 32k names + Allow XSSFNames set with a long name that looks similar to a cell address + Add lock/unlock sheet protection and tab colors + Speed up Irr() formula evaluation + Add a function to convert an HSSFWorkbook to an HTML document from an InputStream + fix NPE when iterating over paragraphs in certain *.docx files + Decrease execution time and memory consumption when adding XSSFPictures to an XSSFWorkbook + Invalid "last printed" summary field value + Text extraction: Don't include the text "null" for empty cells + OutOfMemoryError parsing a word file + Various HPSF related fixes + Call to XSSFReader.getSheetsData() returns duplicate sheets + Fix order of two built-in formats + Extract Excel 2013 absPath info from xlsb + HSLFTable.setRowHeight sets row height incorrect + Multiple embedded objects on same sheet are ignored + Grid and rowspan calculation in table cells is wrong + Support for "PolylineTo" as well as existing alternate spelling "PolyLineTo" + + + + + + add initial streaming, read-only support for xlsb files + SL Common: various rendering issues resolved + various charset related fixes in SS Common, XSSF and HWPF + + + Check for duplicate relation-names for notes similar to the fix for slides (fixed via bug 55791) + Correct behavior of function DGET with multiple result entries but only one non-blank. Thanks to Patrick Zimmermann for the patch + Fix charset handling in HWPFOldDocument + Add initial streaming, read-only support for xlsb files + Allow user to select or ignore phonetic strings in shared strings table + Slide import delete unrecognized elements in group shape + Blank layout was not found + Support Chinese and Japanese date formats + Shift shared formulas when shifting rows in a sheet + Rendering issue with background and shape overlayed by image + ArrayIndexOutOfBoundsException in EvilUnclosedBRFixingInputStream + + + + + + The third-party jar for commons-collections4 is now required for handling of OLE2 properties + Primitive (experimental) EMF/WMF text extraction support + Unicode and internationalization improvements + + + FormulaParser can't parse external references when sheet name is quoted, thanks to Ignacio HR for the patch + Adjust pattern to better handle non-ASCII characters in Month-names which can appear since Java 8, thanks to Patrick Metz for the patch + Missing XSSFRelation.CUSTOM_PROPERTY generates POIXMLException on cloneSheet() method, thanks to Samson Tesfay for the patch + DataFormatter parses months incorrectly when put at the end of date segment, thanks to Andrzej Witecki for the patch + Unlink hyperlinks node if all hyperlinks removed from a sheet + Add rudimentary read-only capability for EMF + Support embedding OLE1.0 package in XSSF / SS Common + Partial support for unicode sheet names + Parse Content-ID for inline images in MAPIMessages + Fix performance problem with XPath parsing in XSSF import from XML + NPE when reading a document containing an embedded picture + XSSFGroupShape nesting + Extractor for *SSF embeddings + SS Common classes for *SSF shapes + Make loggers final and make throttled log actually work, thanks to PJ Fanning for the patch + WorkdayCalculator calculateWorkdays does return wrong value for same day input, thanks to Fabio Heer for the patch + Cannot specify Interline spacing for paragraphs + Unable to add image to Word document header + Mixed fonts issue with Chinese characters (unable to form images from ppt) + Remove deprecated classes - remove constructors with PackageRelationship argument + Added try/catch block to swallow NPE + Encode some special characters when setting title/text for validation text-boxes + Creating pictures in PowerPoint slides requires scratchpad-jar for adding WMF images + Remove deprecated classes - deprecate Mutable* property classes + Check for actual Excel limits on data validation title/text + TableCell.getTextHeight() returns NullPointerException + + + + + + Initial work on adding a Gradle build, the Ant based build is currently still the official buildsystem, but there are plans to replace this with Gradle in the future + Add support for mixed-length cipher/hashes in password protected files typically used by Office for Mac + Add CryptoAPI and encryption write support for HSSF + Improve support for reading VBA macros + Examples to encrypt temp files in SXSSF + + + Remove deprecated classes (POI 3.16) - remove StylesTable.getNumberFormatAt(int) + Handle corrupt PICT streams + Unable to create pptx file by potx file using Apache POI + Add setFormattingRanges() to interface ConditionalFormatting + Examples: encrypt temp files created when unzipping or zipping an SXSSF workbook + Table row isRepeatingHeader and isCantSplit throw NPE + Handle an SdtCell that has no SdtContentCell + Handle an SdtBody that has no SdtPr + CellStyle support for "Quote Prefix" aka "123 Prefix" + Issue opening password protected xlsx + Refactor Header/Footer creation to allow table in header/footer. No longer creates empty paragraph in header/footer + Populate dimension of XSSF Worksheet when writing the document + Add 'yyyy-MM-dd' as a possible format for date metadata items in OPC + Gracefully handle AIOOBE in reading potentially truncated pictstream + Avoid possible NullPointerException when exporting to XML + Deprecate xslf.usermodel.Drawing* - was: Can't change text of DrawingParagraph + Partial v5 Pointer and Text Extraction support + Add "unknown" ShapeType for 4095 + Fix handling of rich-text unicode escapes with lowercase hex-chars + reduce time needed to lookup document relationships + Fix problem with Days360 method for the month of february + General: Enhance the Gradle build to allow to run API comparisons against previous releases using the Japicmp tool + background image ignored on slide copy + create drawings when workbook contains non-sequential drawing indices + Various improvements for reading VBA macros + Problems with line style when converting ppt to png + Check for in-use drawing part names and use next available, when creating a new sheet drawing + named range validation + Regression in getting and setting anchor type introduced in 3.15 + AES encrypt temporary files and workbook on disk + image is incorrectly resized if custom row height is set + named range sheet index not updated when changing sheet order + Regression: Powerpoint text extractor from footer of master slide + ClassLoader workaround for OSGI when processing OOXML files + Regression: types in HSSFClientAnchor.setAnchorType() were changed, breaking Jasperreports POI support + Broken auto fit row height in the cells with word wrap + support BorderStyle enums in RegionUtil + Password protected files with "Microsoft Enhanced Cryptographic Provider v1.0" + Comments removed from wrong row when removing a row from a sheet with empty rows + Fix IllegalAccess exception caused by logger + Support Table (structured reference) sources in PivotTables + Add initial Gradle build + + + + + + HSSF, HSLF, HPSF, and HWPF support for writing out to a File, + including an existing open file (#) + Various improvements to HSSF and XSSF. + XSSF performance improvements for large numbers of named ranges. + Progress towards enums rather than ints for various types + CellStyle#BORDER_HAIR and #BORDER_DOTTED were swapped to correctly + reflect the official names and to be consistent with BorderStyle enum. + HAIR has smaller dots than DOTTED. + Removal of deprecated classes and methods detailed on bug + + + Fixed memory leak in FileBackedDataSource + Close open file handles before raising an exception + D* function refactorings + Fix DGET function behaviour with empty cells + Error adding Comments into cloned Sheets + DataFormatter should return TRUE or FALSE for boolean cell values + Support merge cells within a table row + Add cells on the fly to the evaluation sheet cache on cache miss + NPE in XSLFTextParagraph.getDefaultFontSize() + Add Apache commons-collections4 dependency + XSSFFormulaEvaluator.evaluateAll() should mirror HSSF and use any setup referenced workbooks + Incorrect evaluation of SUBTOTAL with composite interval + Handle setting pre-evaluation string correctly in SXSSF as well + Clarify and refine JavaDoc of various close() methods to consistently state that close() invalidates the object + HSSF, HSLF and HPSF support for in-place writing to the currently open File (requires the POIFS/NPOIFS was opened from a read-write File) + HSSF, HSLF, HPSF and HWPF support for writing out to a new File - normally faster than writing to an OutputStream + D* formula evaluation from blank cells in database headers + Excel does not handle conditional formatting based on formula correctly unless recalculation is forced + WorkdayFunction does not read the area with holidays correctly to calculate work days + Allow reading of footnote and endnote properties + Using HSSFWorkbook#setSheetOrder to move sheets to the end corrupts bspos value in WorkbookRecordList + Sheet.shiftRows incorrectly shifts merged region if there exists another merged region + migrate hyperlink constants from Hyperlink to HyperlinkType enum + migrate cell alignment constants from CellStyle to HorizontalAlignment and VerticalAlignment enums + migrate cell type constants from Cell to CellType enum + correctly recognized URL hyperlinks containing a hash mark + add Sheet#getHyperlink(CellAddress) + enable custom zip streams via OPCPackage.open(ZipEntrySource) + migrate fill pattern constants from CellStyle to FillPatternType enum + Get and set last modified by user property + Attach cause of exception when marshalling a Zip Package + clear cached EvaluationWorkbook and EvaluationSheetvalues from WorkbookEvaluator + fixed memory leak in LocaleUtil + OPC support for a wider range of timezone'd created and modified date formats in package properties + XSSFTable.getRowCount off-by-one error + XSSFTable needs a method to reset start/end Cell References + convert FormulaType class to enum + improve performance of row shifting on sheets that contain comments + fix NPE from HMEFContentsExtractor + Create temporary directories that are deleted on JVM exit + Remove deprecated classes (POI 3.15) - o.a.p.hssf.model.*Shape classes removed + Move PaneInformation from HSSF to SS package + When setting SAX features, handle Error too (eg from Google AppEngine) + Make lookup and creation of named ranges constant-time instead of linear in the number of ranges in the workbook + Fix regression in the handling of empty passwords for workbook protection + Rename XSSFPaswordHelper to XSSFPasswordHelper + + + + + + initial work on extracting VBA macros (#) + remove deprecated classes (#) + various X/HSLF fixes for table and color handling + XSSF: formula evaluation performance improvements (#) + various fixes for merged regions in Common SS + + + Replace Hashtable with HashMap + XSSF support for files from certain alternate tools where the row XML is missing the row number + ZipSecureFile throwing "zip bomb detected" exception when writing SXSSFWorkbook + XSLFPictureData support for TIFF images + POIXMLProperties helper methods for reading and changing OOXML document thumbnails + add Sheet.removeMergedRegions + move CellRangeUtil to o.a.p.ss.util + correctly check array formulas for intersection when adding merged regions + Provide a close() method and implement Closeable on all OLE2-based POIDocument classes + correctly parse literal data validation constraints + Remove deprecated classes + Print row and column headings + Creating transparent Freeform object does not result in transparent shape + Setting background color in slide master + Remove related cell-comments when removing a row + Initial steps to allow to compile against Java 9 + 30% faster formula evaluation + Formula parsing and evaluation containing structured references (data tables) + Parsing absolute entire-row CellReferences + Error when trying to access XSLFTableCell properties like textHeight, lineWidth, etc + Remove deprecated classes (POI 3.15) - remove BuiltinFormats.getBuiltinFormats() + allow DataFormatter to use Locale-aware number grouping separator + Table isn't exported on convert slides of a .pptx slide show to a PNG/SVG image + support alpha channel on solid colors (fill, line, text) + remove creation of empty paragraph in XSLFTextShape.addNewTextParagraph() + XSSFPivotTable::addColumnLabel sets the cell type of a cell outside of the source data area + InvalidFormatException because of Absolute URI forbidden + Remove deprecated classes (POI 3.15) - use FormulaError instead of ErrorConstants + Behaviour for headers and footers of slides is inconsistent between slideshows created in 2003 and 2007 + get and set Comment addresses + Cannot add a picture on a slide that already have an image with an hyperlink on it + performance regression: DataFormatter no longer caches formats + Setting text direction on a table cell has no effect + Regression: Fix handling of whitespaces in formulas after it was slightly broken by the changes to support the intersection operator + Get and set sheet tab color + Lookup IndexedColors by index + Deprecate CellUtil methods that do not need a workbook parameter + Mark HSSFCellUtil for removal, replaced with Common SS CellUtil + VBA Macro reader and extractor + Don't fail to open the spreadsheet if no TabIdRecord is found + Fix some cases where file-handles were not closed properly, mostly when the documents could not be opened correctly + Fix IndexOutOfBoundsException in PlfLfo.add() + unify setting cell border line style with BorderStyle + + + + + + removal of deprecated elements (#) + avoid XmlBeans calls to piccolo parser which caused OOM in rare cases (#) + support for passwords longer than 15 chars for write-protection or binary formats (#) + various NPE fixes in XSSF/HSSF + fixes for color handling in XSSF and support for system colors in Common SL + + + Add a cloneSheet() which directly sets the sheetname to allow to avoid a costly renaming of sheets + Regression in 3.14 on OPC files with less common timezone formats in the core properties + Adjust implementation of COUNTBLANK to be conforming to Excel, empty strings are counted as blank as well + Gracefully handle null-values in Cell.setValue() for Date and Calendar similar to String + fix XSSFColor.hasTint which incorrectly used the alpha channel, add XSSFColor.hasAlpha + fix NPE raised by XSSFSheet.getCellComments() + copy non-validating XSSFSheet.addMergedRegionUnsafe from bug 58885 to Sheet interface + bold xml value of "1" treated as false + Add support for system colors + Add Workbook.getNames() to allow to query for names that appear multiple times + Avoid using an existing file-name when creating a new slide, it could still be left over from previous partial removal + Try to avoid NullPointerException by setting the cell to BLANK instead, when changing cell-type and a formula leads to null-string + Password gets truncated when using passwords longer than 15 characters for the function protectSheet() + Correctly calculate char index ranges for HWPF in the TextPieceTable + Fix problem with tables in documents at pos 0 + Fix a number of edge-cases where file-handles would be leaked + Remove deprecated classes (POI 3.15) - *Workbook.setRepeatingRowsAndColumns() + Remove deprecated classes (POI 3.15) - org.apache.poi.hssf/ss.util.Region + Out of Memory when extracting text from attached files + More helpful exception when POIFSFileSystem is given a raw XML file + More helpful exceptions when OPCPackage is given OLE2 or ODF or raw XML files + + + + + + Common: New version of ooxml-schema and ooxml-security jars which are linked to custom safe type loader + Common: OPC relation fix for multiple same named ids () + Common: Update third-party dependencies: commons-logging, commons-codec, xmlsec, bouncycastle + Excel: Allow to set multiple cell style properties at once () + Excel: Add API for inserting ignored warnings into XSSF sheets. + This can be used e.g. to suppress 'number stored as text' warnings. () + Powerpoint: unify hyperlink handling + HSLF: various fixes for parsing and rendering + WMF: new API for WMF parsing and rendering (for Powerpoint) + XWPF: various fixes for handling paragraphs and tables + + + Provide a better error message for OOXML strict format which we do not support yet + Adjust handling of missing row-records as it seems LibreOffice/Excel are handling such documents + Render individual slideshow shapes + ExtractorFactory should give a more helpful exception on old Excel files too old for ExcelExtractor + XSSFChart support for setting chart titles + Prevent NPE in XWPFTableCell's getVerticalAlignment() from Prasad Babu + XSSFSheetXMLHandler fails to extract content if namespace is included in qName + Reject single-cell merged regions + Make OFFSET() allow missing optional height and width parameters + Handle documents with a picture-only header + Regression caused by fixing bug 56295: Don't try to unset fill color if it is not set to avoid invalid access inside the Xml structures + Cell.setCellValue((String)null) should be treated as an empty cell on SXSSF as well, to avoid a NPE when autosizing columns + fixed NPE when adding pictures with existing non-picture media files (e.g. movies) + Fixed performance regression after fixing bug 58443 when adding a merged region to an XSSFSheet + Raised xmlsec version to 2.0.6 + Cannot open link correctly which insert in ppt + Support hyperlinks in HSLF shapes and textruns + Return SpreadsheetVersion from Workbook + Fix NPE when calling HSLFTextRun.setHorizontalCentered() + Set multiple cell style properties at once + Support for WMF rendering + Add API for inserting ignored warnings into XSSF sheets. This can be used e.g. to suppress 'number stored as text' warnings + Getters/setters/removers for the additional well-known document summary information properties from Office 12 + Support hyperlink extraction when rendering slides + POI does not always read all the slides in pptx files + Provide some compatibility between HSSF and XSSF in regards to values for CellStyle.setRotation() + don't return deleted text when document is in review-mode + XWPFParagraph insertNewRun and removeRun work incorrectly for runs after hyperlink/field runs + Non-standard namespace-key breaks parsing XLSX files + Fix missing adjustment of formulas when sheet-ordering is changed + Try to initialize with empty password if not done before + Fix some cases where file-handles were left open, mostly when failing to parse documents + RichTextRun getFontName can not get chinese font name + RecordType has repeat by code type 3009 + getHeaderText() and getFooterText() duplicate text in sheet.getTextRuns() + Set maximum number of data formats to avoid corrupted workbook + Override built-in number formats in XSSFWorkbooks + New AIOOBE in getCell while iterating through a table in PPT + Master styles not initialized when running multithreaded + + + + + + Corrupted .xlsx file created when styles with borders are cloned from other workbooks + Promote setting and getting the active cell in a worksheet to Common SS + Update text styles in HSLF MasterSlide + Change underlying data structure in SXSSFRow to use a TreeMap instead of an array to store SXSSFCells + Replace MissingCellPolicy class with enum + Autosize columns on SXSSFSheets considering both active window and flushed rows + Add support for shifting hyperlinks when shifting rows on a sheet + Implement Comparable interface in HSSFRow, XSSFRow, and SXSSFRow classes + Title placeholder not recognized by Powerpoint 2003 + Pictures cannot be removed from a slide + Replace ClientAnchor anchor type constants with AnchorType enum + Replace Sheet.setZoom(num, den) with Sheet.setZoom(scale) + Remove deprecated functions + Get all cell comments on a sheet with Sheet.getCellComments() + Add CellAddress class, to be used instead of CellReference when the concept of an absolute/relative reference is not applicable + Add custom safe XmlBeans type loader / rename vendor specific schema packages + Signing failed after deletion of first sheet + Filling an existing ppt table stopped working with 3.9 + When saving PPT to PNG, some text is rendered backwards + Shapes drawn wrongly when ppt file converted to image + Removed most reflection calls on private methods/fields from production code; others are wrapped by AccessController.doPrivileged() + XWPFDocument causes SecurityException under SecurityManager + Images in ppt file have wrong width when converting ppt to png + Add support for HSLF metro blobs + Bullets are not aligned properly while converting ppt slide to image + DataFormatter correct support for alternate number grouping characters, eg 1234 + #'##0 = 1'234 not 1,234 + autoSizeColumn incorrectly sizes columns containing leading whitespace + Rename misspelled SheetUtil.canComputeColumnWidth + Add getHyperlink and getHyperlinkList to Sheet interface + Add support for copying rows in XSSFWorkbooks + RichTextRun.setBullet(false) doesn't work, bullets still here + POI-HSLF changeTextInRichTextRun corrupts presentation + inserting text or images wipes out boldness and makes everything italic + Set cell formulas containing unregistered function names + Add method to reorganize AreaPtg as top-left and bottom-right references + Prohibit adding merged regions that would overlap with existing merged regions + Add a limit of the max number of characters that can be extracted to avoid sending applications out of memory with very large documents. Limit can be adjusted via ZipSecureFile.setMaxTextSize() if necessary + Rare new aioobe in 3.13 on initialization of a handful of ppts + Avoid error if Workbook with empty SharedStringTable is written + Common sl unification - copy first paragraph / textrun properties on XSLFTextShape.setText() + Common sl unification - converted ApacheconEU08 example to common sl - added missing functionality + Common sl unification - return null instead of default values for missing borders X/HSLFTable + Common sl unification - use points in HSLFTable.setColumnWidth() + Fix appending text to empty HSLFTextParagraph + SXSSFCell.setCellValue((RichTextString)null) fixed to work like XSSF and HSSF + DataFormatter and CellFormat non-localised support for localised currency formats like [$$-408] + DataFormatter cell formatting for things like [>999999]#,,"M";[>999]#,"K";# + Fix removing sheet so not to break other existing sheet references + Work around problem where on Windows systems a Mapped Buffer can still lock a file even if the Channel was closed properly + Update commons-logging to 1.2 and commons-codec to 1.10 + Removed deprecated mixed case getter/setter in XSSFColor + Fix handling missing option values in financial functions PV, FV, NPER and PMT + Make row groups which include row 0 work + Removed deprecated HDF API + Improve column manipulation in XSSF to avoid changes overwriting each other + Improve number formatting to more closely match Excel's behaviour + Fix row limits for HSSFClientAnchor to allow the full range supported by Excel + Add CTTableStyleInfo to poi-ooxml-schemas JAR + + + + + + conditional formatting support for DataBars, Icon Sets / Multi-States, and Color Scales + various improvements in spreadsheets formula and cell reference handling + enforcement of locale and timezone-aware handling through forbidden-apis check, + locale and timezone can now be switched via LocaleUtil + common api for slideshow (common sl) is now available + be aware of several api breaks especially in HSLF text handling + + + Make XSSF and HSSF consistent on Sheet.getMergedRegions: return empty list if there are none + provide picture-shape resize that maintains the aspect ratio + Add a simple fix to avoid an NPE when Workbooks have invalid external references + Fix Dev2Hex for numbers larger than Integer.MAX_VALUE and less than Integer.MIN_VALUE + Add support for different datatypes in XSSFImportFromXML + Provide user access to the original image dimensions + Fix adding pictures to XWPFRun instances + Handle edge-cases in D* function + Workbook support for iterating over Sheets + Return correct value in Match-Function with match-type == -1 + Avoid NPE for RichTextString without font-details + XSSFFont: reset indexed color flag when setting a non-indexed color + Make DGet and DMin function implementations thread-safe + Adjust Locale/Timezone handling to pass forbidden-api-checks and provide LocaleUtil to dynamically adjust the locale and timezone that POI operates on + Fix DAYS360 handling for US/EU method + CellFormatResult.text should check for nulls as per the javadoc + Fix checks for limit on number of styles in XSSF/SXSSF, fix more than 32k styles in SXSSF workbooks + ReadOnlySharedStringsTable now handles workbooks with an empty SST part + Intersection formulae are now supported in XSSF + CellReference upper-case check for #REF!, and javadoc improvements + More CellReference unit testing coverage + Throw InvalidFormatException as documented instead of IllegalArgumentException in WorkbookFactory.create() + When adding a picture to a XWPF header or footer, attach it to the right part + Improve the javadocs for XSSFFont and Font getFontHeight methods + Don't hardcode dcterms as namespace alias in the attribute, but expect the actual alias that is used in the corresponding element + XSLFSlide.draw is not working with text embedded in PPTX + getSlideMasters() returns the master slides in the incorrect order + XSLFFreeformShape ignores quadratic bezier curves + provide a mechanism to find slide layouts by name + STYLE: ShapeContainer interface makes internal getShapesList() redundant + The current picture handling uses raw integers for types and index, replace with enum and reference + Apparently Maven uses plurals for all artifacts except javadocs, so tweak our naming to make it happy + Use input stream rather than byte array for checksum etc + SXSSF support for evaluating formula cells, provided the cell and all its references are within the current window + Avoid NPE in cleanup if NPOIFSFileSystem is opened on a locked File under Windows + Merged common_sl branch to trunk + Fix creating comments for XSSF/SXSSF, regression was introduced via bug + Fix creating comments for XSSF/SXSSF, regression was introduced via bug + Possible data corruption in hasPOIFSHeader and hasOOXMLHeader + Allow processing of non-OOXML core namespace packages + Conditional Formatting support for DataBars, Icon Sets / Multi-States, and Color Scales + + + + + + The default POIFS implementation has been switched to NPOIFS. If you request a POIFSFileSystem, you will now get a NPOIFSFileSystem-based one. OPOIFSFileSystem remains for those who still want the old implementation + Conditional Formatting support for the common Color class, in addition to previous color shorts + Agile encryption - wrong checksum calculation + Regression: NullPointerException when setting cell value to null + Add a method for obtaining all merged regions on a worksheet. This is faster for XSSFSheet than obtaining each individually by iteration + Add basic support for VBA macro-enabled workbooks (xlsm) + Fix parsing the email submission data when id contains a hyphen + Better handle years in mail-messages between 1980 and 1999 + WMF extraction failing in Tika for older PowerPoint Files + Limit number of bytes (by counting them) while opening office docs + zip bomb prevention + Biff8RC4 xorShort returns wrong value for unsigned shorts + Fix possible NullPointerException when empty cell is included in Sumif calculation + Log Forging + Improve AreaReference to take account of the spreadsheet format version when determining whether a reference is whole-column + Fix and verify in CI builds that we can compile most examples without requiring scratchpad-jar, update documentation + Correctly handle unicode strings in NameCommentRecord + Automatically verify that the resulting source-packages can be built + Fix potential NPE in DateUtil for invalid dates + Fix potential NPE in XWPFParagraph.getNumFmt() + Use BigDecimal in some cases in DataFormatter.formatRawCellContents, to avoid rounding problems on JDK8 + Use specific ID value which prevents Excel from turning comments into giant curved arrows + + + + + + remove limitations within XSSF - up to 64k cell styles () and 65k comments () + fixed XSSF cloning issues - for sheets (), styles (), pictures () + Fix shifting comments with shifted rows () + + + Initial XWPFStyles support for working with default document paragraph and run styles + If an empty file or stream is given to WorkbookFactory.create, give a more informative exception - EmptyFileException + Sort PackagePart returns from OPCPackage by name considering numbers in filenames, so Image10.png comes after Image9.png, fixing problems with XSLF adding 10+ images to a slide + Handle >32,767 cell styles and formats in XSSF (file format limit is 64,000) + Allow WorkbookFactory.create methods to open xlsx files protected with the default password + Add overloaded WorkbookFactory.create methods which take the spreadsheet password + When removing a SXSSF sheet, ensure temp files associated with it are disposed of + If a XSSF shape has a buFont but no bullet character, mirror Excel and treat as un-bulleted + Fix setSheetName with ISERROR on XSSF + Add ISERR() function + Avoid XmlValueDisconnectedException when removing a XWPFRun from a XWPFParagraph by removing from IRuns as well + Skip null properties in PropertyTableBase, which is how PropertyFactory reports unsupported POIFS properties + Avoid NPE on HSLF Tables with a top position of -1 + Throw exception if max string length of 32767 chars is exceeded in XSSF and SXSSF + Fix handling of bold formatting in example application 'ToHtml' + Use fixed encoding when extracting text in WordDocument + Fix shifting comments with shifted rows + Fix cloning of styles across workbooks and handling of default value of attribute applyFill + Remove limitation of 1024 comments per Workbook + Fix cloning of sheets with pictures + More helpful ExtractorFactory exception if given a Visio VSDX ooxml file + Include CTTblGrid in the smaller poi-ooxml-schemas jar + Avoid PartAlreadyExistsException when removing/cloning sheets + Additional check for supported string-length to avoid creating broken XLS files later one + When saving an OPCPackage with no Core Properties (eg from Jasper Reports), ensure they are always added even if not yet used + Handle documents with a picture-only header + Change from XMLEventFactory.newFactory to XMLEventFactory.newInstance, for IBM JDK Compatibility + + + + + + Add method in SXSSFSheet to directly set row OutLineLevel + Add workaround to read empty SSTRecord where Excel puts random number in unique-strings-count-field + Add POI-specific error codes to FormulaError + Start on common interfaces for Paragraphs and Character Runs for HWPF and XWPF + Double Strikethrough support for XWPF runs, along the lines of the HWPF support + Handle XSSF .xlsx files with no shared strings table in read-only mode + ExtractorFactory opening of OPCPackage from File should be read-only by default, as text extracting will never change things + XSSFSheet support for getDrawingPatriarch(), alongside the existing createDrawingPatriarch() method + TIKA-1515 - Handle Excel 3 files with a 0x8001 codepage + Add methods to set margins in sections of HWPF documents + Return #VALUE! for circular references + Add methods to query outline level for HSSF and XSSF + Handle PP97_DUALSTORAGE streams + SlideShow.removeSlide makes PPT corrupted + Mapping of symbol characters to unicode equivalent + Add support for cropped images in Slide.draw() + Add initial implementations of DMIN and DGET functions + Support for Office Binary Document RC4 CryptoAPI Encryption for HSLF + Support for Office Binary Document RC4 Encryption + Fix get/setFirstVisibleTab() for XSSFWorkbook + Properly initialize chart-axis datastructure when loading a spreadsheet which already contains one + Fix NullPointerException for RichText strings with no formatting for some runs + Avoid IBM JDK fail immediately during loading some POI classes, note: IBM JDK 1.7 or higher is needed because of XML APIs + Switch the cache in DateUtil.isADateFormat() to ThreadLocals to not have another syncpoint here + NullPointerException in XSSFCell Constructor with different MissingCellPolicy + XSSFDataValidation ignores "allow blank" read from sheet, assumes true + Adjust the active sheet in setSheetOrder() + Adjust the active sheet in removeSheet() + Add missing ArrayRecord.clone() + Expose the version information from OldExcelExtractor + 3+ XSSF column label names for pivot tables + XSSF custom column label names for pivot tables + Correctly build internal list of styles when styles are added + Add check for null value of underline w:val + + + + + + + + + + Basic text extractor for very old Excel formats such as Excel 4 (Biff4), and + older Excel 5 and 95 formats + XML Signature support for XSSF, XWPF and XSLF () + HSSF and XSSF support for getting existing Data Validations for a Sheet + HSSF and XSSF formula support for the PROPER function () + XSLF support for adding slide notes () + XMLBeans performance improved when using getXXXList() methods () + Recommended Apache XMLBeans version increased to 2.6.0 (any version from + 2.3.0 or later will work though) + XSSF support for evaluating formula references to other Workbooks () + HSSF and XSSF support for evaluating formulas with multi-sheet references, + for functions that support that () + HSSF and XSSF Workbooks are now Closeable, so you can call close() to + explicitly free the file based resources when you're done () + NPOIFS now fully supports writing, including streaming write, and in-place + updating of existing entries. NPOIFSFileSystem now surpasses the old + POIFSFileSystem in all cases. + XSSF Text Extraction support for Headers, Footers and Comments () + SXSSF Shared Strings optional support () + XWPF Change Tracking support () + HWPF password hash function () + XWPF document protection with password support () + SXSSF support for a system-wide setting of where Temp files get created, via + TempFile / TempFileCreationStrategy () + + + + + The minimum Java version has been increased to Java 1.6 + The minimum Apache Ant version has been increased to Apache Ant 1.8 + The interface org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler.SheetContentsHandler + has had two method signature changes: + + endRow() -> endRow(int) + and + cell(String,String) -> cell(String,String,Comment) + + + + + + All security related changes from 3.10.1 (CVE-2014-3529 and CVE-2014-3574) + are included in 3.11. Thanks to Stefan Kopf, Mike Boufford, Mohamed Ramadan, + and Christian Schneider for their help with these. + + Please note: You should use xmlbeans-2.6.jar (as shipped with this release) + instead of the xmlbeans-2.3.jar version from old releases to work around + CVE-2014-3574. If you have an alternate XML parser like Apache Xerces + in classpath, be sure to use a recent version! Older versions are likely to + break on setting required security features. + + + + Typo in HSSFWorkbook javadocs and quick-guide + Fix some unnecessary casts, generics, Eclipse warnings, ... + Added workarounds to tests for JDK 6 LineBreakMeasurer bug + XMLSlideShow.setSlideOrder() produces corrupted CTSlideIdList + Deadlock on corrupted PPT file + XML signatures - ignore line breaks in Office 2007 .rels files + Basic text extractor for older Excel 5 and 95 formats + Basic text extractor for very old Excel formats such as Excel 4 (Biff4) + ClassCastException in validating xml signatures due to missing xml beans resources + Adjust active sheet correctly when sheets are moved + Adjust active sheet correctly when sheets are removed + XSSFDrawing.createCellComment() does not honor dx and dy values passed in + Picture method to resize with different scales in width and height + Add Cell.removeHyperlink() for HSSF and XSSF + + + + + + Implement FIXED function + Form check box extraction with XWPFWordExtractor + Add Sheet.getDataValidations() for HSSF and XSSF + Add Comment.getClientAnchor() for HSSF and XSSF + Correct naming from "Serie" to "Series" + Include CTDefinedNamesImpl in the smaller poi-ooxml-schemas jar + Could not open macro enabled xlsm file after writing using POI3.11beta2 version + Add implementation of function PROPER + Add missing HSSFWorkbook constructor javadocs + And documentation and validation in CellRangeAddress to prevent invalid row/column combinations + Support for adding slide notes + Javadocs and throws clause for WorkbookUtil + Add support for cropped images in XSLFPictureShape.drawContent() + added ooxml-security-1.0 to the maven artifacts + XSSFImportFromXML.importFromXML() does not support optional elements + Unreadable content when adding multiple comments to cell + SheetUtil.getCellWithMerges for getting a cell at a co-ordinate, or the primary one of it's merged region if it's a merged cell + XML signature support + IndexOutOfBoundsException in poi decryptor + The minimum Apache Ant version required to build has been increased to 1.8.x or later + Add a NPOIFSFileSystem constructor with a FileChannel and the read-only option + XSSFRowShifter.updateConditionalFormatting throws IOOBE when there are more than 1 CTConditionalFormatting + Replace usages of o.a.p.util.ArrayUtil.copyOf* methods with replacements from j.u.Arrays + XSSF locking of specific features not working + Formulas: Fix incorrect evaluation of IF() with ROW()/COLUMN() as else-result + Greatly improve performance of shifting rows in sheets with many merged regions + XSSFColor.getARGBHex() returns wrong color for Excel 2007 xlsx file + Fix exporting XML if schema contains ref-elements + XWPFLatentStyles.isLatentStyle always returns true if there is at least 1 lsdException + XMLBeans performance when using getXXXList() and other proxy methods + + + + + + For XSLF Pictures, provide a way to get the URI of externally linked pictures + On supported XML parser versions (Xerces or JVM built-in, XMLBeans 2.6), enforce sensible limits on entity expansion in OOXML files, and ensure that subsequent normal files still pass fine (CVE-2014-3574) + Recommended Apache XMLBeans version increased to 2.6.0 (any version from 2.3.0 or later will work though) + Provide a helpful exception, XLSBUnsupportedException, if XSSFWorkbook is passed a .xlsb file + Switch from dom4j to JAXP + + + + + + + This release is a bugfix release to fix two security issues with OOXML: + Tidy up the OPC SAX setup code with a new common Helper, preventing + external entity expansion (CVE-2014-3529). + On supported XML parser versions (Xerces or JVM built-in, XMLBeans 2.6), + enforce sensible limits on entity expansion in OOXML files, and ensure + that subsequent normal files still pass fine (CVE-2014-3574). + + Please note: You should use xmlbeans-2.6.jar (as shipped with this release) + instead of the xmlbeans-2.3.jar version from the 3.10-FINAL release to work + around CVE-2014-3574. If you have an alternate XML parser like Apache Xerces + in classpath, be sure to use a recent version! Older versions are likely to + break on setting required security features. + + Thanks to Stefan Kopf, Mike Boufford, Mohamed Ramadan, and Christian Schneider + for reporting these issues! + + + On supported XML parser versions (Xerces or JVM built-in, XMLBeans 2.6), enforce sensible limits on entity expansion in OOXML files, and ensure that subsequent normal files still pass fine (CVE-2014-3574) + Tidy up the OPC SAX setup code with a new common Helper, preventing external entity expansion (CVE-2014-3529) + + + + + + + Security fix CVE-2014-3529: external XML entity expansion. Affects reading OOXML documents. + Dropped support for Java 1.5. Java 6 is now the minimum version required to run POI. + + + Tidy up the OPC SAX setup code with a new common Helper, preventing external entity expansion (CVE-2014-3529) + Correct XWPF createTOC handling of short style names + If the start+end row and cell are the same on an AreaPtg, avoid inverting the relative flag + HWPF where no parent style CHP exists, use an empty set when processing the style to avoid a NPE + When shifting XSSF rows with formula cells, if the formula can't be parsed, log + leave it unchanged rather than failing + Avoid NPE from XSSFHyperLink when setting the cell it references on a new link + If an unsupported BofRecord is found for a sheet, warn and skip rather than breaking + Support the ColInfoRecord coming after the cells, rather than before as is normal + Allow XSSF formula evaluation to also skip missing external workbook references, if requested, in line with existing HSSF support + XSSF support for creating Pivot Tables + Formula Evaluator support for multi-sheet references for those functions which support them, eg SUM(Sheet1:Sheet3!A1:B2) + Allow XSSF event model to find + return comments, and use this for the event based .xlsx text extractor. Required backwards-incompatible updates to XSSFSheetXMLHandler.SheetContentsHandler + HPSF thumbnail format tags are Int not UInt + Allow a system wide setting of where Temp files (eg for SXSSF) are stored, via TempFile / TempFileCreationStrategy + Have XMLBeans request UTF-8 for strings by default, to avoid issues on the odd platform where that isn't already the case + Correct HSSFOptimiser logic for the case where the to-keep style wasn't previously in use + XSSF support for evaluating formula references to other Workbooks + Fix border cases in EDATE function: handle RefEval and BlankEval and also return #VALUE, not #REF in case of error + Initial support for XSSF External Links tables, which hold references to other workbooks referenced by formulas and names + If a cell is of type numeric but has an empty <v/> tag, return as 0 + Make Workbook be Closeable, so you can call close() to explicitly free the file based resources when you're done + Read text from SDTs at the table cell level, including (sometimes) Cover Page, Table of Contents and Bibliography + Change how ColumnHelper finds CTCol instances, to speed up the more common use case when most are wanted for reading + HSSFCell should follow XSSF, and allow setting a null-style to return to the default style + Fix multithreading bug when reading 2 similar files + Fix a copy/paste error in CFRuleRecord.clone() + Fix a problem with cells in workbooks becoming disconnected + Add missing null-check if simple shape does not + Bug 54400 introduced a problem when removing a sheet with named ranges + NoteRecord can sometimes be double-padded if there's no author set + Handle date format strings in an iso8601 style format, with a T in them + Correct SXSSF writing of tables when creating from a template + Writing a workbook more than once corrupts the file + Outlook sometimes stores a codepage of ANSI when it means 1252, detect and alias + Add XOR obfuscation/decryption support to HSSF + DateFormat - Rounding of fractionals + Excel 2007 and later allows for more than 3 Conditional Formatting rules per sheet, so change our hard limit to logging a compatibility warning + Add NPOIFS in-place write support, including updating the contents of existing entries + Complete NPOIFS write support + NPOIFS fixes for 2+gb files loaded via File (InputStream is limited to 2gb due to ByteBuffer limits) + Avoid a NPE if a comment has no associated NoteRecord (but we still don't know where it belongs) + Streaming write support in NPOIFS + Fix floating point rounding problems with ROUND function + Fix SXSSF encodings on EBCDIC platforms, by setting the required encoding explicitly + Support loading .xlsx files with no Styles Table + Replace System.err in XSSFSheetXMLHandler with proper logging + Fix NPE during XSSFExportToXml export to XML with xs:all + Fix compare/sorting of nodes in exported XML via XSSFExportToXml + Handle numeric formula values when exporting to XML + Handle date types when exporting to XML + Use default style if the cell style attribute is not present + End support for Java 1.5. POI now requires Java 6 or higher + Upgrade third party libs to latest versions: commons-logging, commons-codec, log4j + Avoid warnings when a TextHeaderAtom is empty and has another straight after, or where there's a TextRulerAtom / MasterTextPropAtom / TextSpecInfoAtom before the Text Chars / Bytes + Add Change Tracking support to XWPF + Add password hash function to HWPF + Add document protection with password support to XWPF + Support OOXML ContentTypes which include parameters + PPT can't open, fails with "Couldn't instantiate ... StyleTextProp9Atom" + HPSF code page strings can be zero length + SXSSF Shared Strings option support + Mixed fonts issue with Chinese characters (unable to form images from ppt) + XSSF Event Text Extractor header/footer support + Hyperlink with a non-breaking space throws java.lang.IllegalStateException + Wrong encoding used for non-ASCII characters in text runs + Expose the StyleIndex of HWPF CharacterRuns + Fix StringIndexOutOfBoundsException : Ole10Native.<init> (parsing word file) + + + + + + WorkbookFactory.create() hangs when creating a workbook + Support for COUNTIFS function + Inconsistent behavior in HSSFSheet.setAutoFilter() function, also make XSSF work when setAutoFilter is called multiple times + Writing a workbook multiple times produces unreadable content + Fix corrupt file problem using TextRun.setText + AIOOBE with missing notes entries + Multiple Saves Causes Slide Corruption + Support embedding OLE objects into HSLF + Add encryption support + Fix StringBuilder logic in DataFormatter.cleanFormatForNumber + Fix org.apache.poi.ss.usermodel.BuiltinFormats.java for 0x29-0x2c + Avoid using RMI based exception from PropertySetFactory, as it's not needed nor helpful + Fix NullPointerException during Xml-extraction from xlsx + Avoid IndexOutOfboundsException when setting nested row grouping + fix handling of tables in XSSF if there are comments as well + Patch for hiding slides in HSLF + Fixed auto shapes render problem in pptx files + CellStyle support for get/set Shrink To Fit + HSSF Row Style XfIndex is 12 not 16 bits of data + OOXML encrypted document fix for cspname being optional + XWPFWordExtractor needs to handle .docx files with neither headers nor footers + DataFormatter should format Error cells, returning the Excel error string + Performance improvement in HSSFCellStyle.getDataFormatString() + Performance improvement in DateUtil.isADateFormat(int, String) + Support embedding OLE1.0 packages in HSSF + Support embedding EMF/WMF pictures in HSSF + Fix handling some types of TNEF files + Updating the index in the LinkTable whenever sheets are removed + Apply patch to avoid XmlValueDisconnectedException when saving a file twice + Add support for collapsing rows in SXSSF + Give a more helpful error if an Encrypted .xlsx file is passed to HSSF + Avoid AIOOBE if a non-existant Xfs is requested for a style + Don't fail in SXSSF if a numeric cell is overwritten with a string + Constants for HAIR and DOTTED border styles are swapped + Add Eclipse project files + When creating a temp file, ensure the name isn't already taken + Extract text from HSLF tables + Support for SHA-512 hashes on OOXML protected documents, as used by Office 2013 + + + + + + Add fix for XmlValueDisconnectException during shifting rows + Fix handling of special case in FormulaShifter + Fix corruption of Workbook when setting sheet order + Fix SimpleFractionException when fraction goes to greater than overflow + Add support for quoting in date formatting + Do not make the XSSFSheet invalid during write() + MultiOperandNumericFunction.collectValue() currently uses concrete final classes but should use interfaces instead + Endless loop in CellRangeUtil.mergeRanges() when regions are overlapping + Integrate 55292 into XSSF extractors -- extract text from text boxes in xlsx files + Tika 792 - Avoid CTMarkup NoSuchMethodException stack trace by adding two beans to ooxml-lite" + Fix column grouping in XSSF + Enhancements to XSSFSimpleShape (textbox) including: ability to add multiple paragraphs, formatting (read/write) and text extraction + Avoid a ClassCastException if a HPSF string property isn't directly stored as a string + HSMF ascii encoding detection should use the CodePage properties where available + HSMF fixed length property parsing should be more forgiving of some type differences from the property default + Some HPSF documents require UnicodeStrings to be 4-byte aligned, spot these from the otherwise invalid length + Upgrade version of JUnit to 4.11 to avoid problems when executing unit tests using Apache Ant >= 1.7 + + + + + + Avoid issues if the length of a StyleTextPropAtom prop is longer than the parent text + Fix error message text for a workbook with no sheets when a sheet operation is performed + Presence of PLV record shouldn't affect HSSF Data Validation + Not all XWPF SDT blocks need newlines + XSSFDrawing.createCellComment causes CommentsTable to lose reference to comment in cell A1 + ExtractorFactory does not close files when extracting via OCPPackage.open() + NullPointerException in XSSFSheet.getTopRow() when the top row is 1 + Improve how DataFormatter handles fractions + Don't load XWPF Footnotes twice + Controlled content/Form (Std/StdBlock) content + HSSFWorkbook.getAllEmbeddedObjects() needs to recurse into container Shapes + Expose from XWPFParagraph the number level and format, if applied + Extract references from XWPF footnotes + Update License links following ECMA site re-organisation + Support embedding EMF/WMF pictures in HSSF + REPT formula support + COMPLEX formula support + CODE formula support + Support Unicode text (TextCharsAtom) in HSLF TextShape + UnhandledDataStructure should sanity check before allocating, not after + Simple wildcard support in HLOOKUP, VOOLKUP, MATCH, COUNTIF + Register user-defined functions in instance scope instead of static + Support for financial functions IPMT and PPMT + Avoid XmlValueDisconnectedException when merging slides + Support of statistical function SLOPE + Support of statistical function INTERCEPT + Don't mis-detect format patterns like .000 as dates + Support unusual .xls files with a BOOK directory entry (normally it is Workbook) + EDATE formula support + NPOIFS fix for 0 not -1 padded partially used XBATs + IfError handling of indirect references + IfError support (from Analysis Toolpak) + Prevent unreadable content and disallow to overwrite rows from input template in SXSSF + Fixed XSSF to read cells with missing R attribute + Ensure that shared formulas are updated when shifting rows in a spreadsheet + Synchronize table headers with parent sheet in XSSF + Fixed rendering text in flipped shapes in PPT2PNG and PPTX2PNG + + + + + + Avoid NPE in PPT2PNG + Replace System.err info messages with a POILogger + improved performance of DataFormatter with Fractions + Ensure that CTHMerge and CTTcBorders go to poi-ooxml-schemas jar + Fixed extracting text from table cells in HSLF + add support for drop-down lists in doc to html conversion + add workaround for files with broken CHP SPRMs + Reading combined character styling and direct formatting of a character run + Conversion to html : Problem in titles number + TableRow#getTopBorder() return bottom's border + Avoid exception when parsing OPC relationships with non-breaking spaces + Avoid exception when parsing workbooks with DConRefRecord in row aggregate + Fixed Ant build to support build directories with blanks + Avoid exceptions when parsing hyperlinks of type "javascript://" + Fixed compatibility bug with modifying xls files created by POI-3.6 and earlier + Support fetching properties of Numbered Lists from PPT files + Partial HSMF support for fixed sized properties + added method processSymbol() to allow converting word symbols + avoid style mess when using HSSFOptimiser + preserve leading / trailing spaces in SXSSF + Fixed XmlValueOutOfRangeException calling getDataValidations for custom validations with XSSFSheet + Avoid NPE when constructing HSSFWorkbook on Google App Engine + Fixed null returned by XSSFPicture.getPictureData() + fixed setForceFormulaRecalculation to reset workbook-level "manual" flag + avoid unnecessary re-converting content types to US-ASCII, it can cause exceptions on ibm mainframes + Set shapes anchors in XSSF when reading from existing drawings + HSSFOptimiser will now also tidy away un-used cell styles, in addition to duplicate styles + Fixed memory and temporary file leak in SXSSF + Fixed memory and temporary file leak in SXSSF + ArrayIndexOutOfBounds Exception parsing word 97 document. + Subtotal is not return correct value. + XLS formula evaluation logging + Unexpected adding of drawings into a workbook + [GSoC] Improved work with shapes. HSSF + feature: enhancements in EscherAggregate + EscherAggregate does not handle Continue records + First comment not cloned after cloneSheet() + Broken auto fit row height in the cells with word wrap + [GSoC2012] Improve drawing support in HSSF + Unmodified cell comments disappear after HSSFWorkbook.write + Corrupted File after cloneSheet() + Inserting images on cloned sheet with images. + The [EscherClientAnchorRecord] for object (eg: TextBox,Shape) may get lost. + [HSSF] Improve support for Shapes and Shape Groups + Using drawingPatriarch.createCellComment(anchor) leads to File error: data may have been lost + Background images cause problems in HSSF spreadsheet + It would be really nice to be able to set the background picture of a comment + Adding Image to Header in Excel Using HSSF + when we insert a new image to the existing excel file that corrupts the previous images + File Error: data may have been lost + If we have a comment but the row is not created we will not be able to get it. + Comments not saving in XLS files with collapsible columns + Not able to read Excel (xls) file having drawing objects + Excel crashes after using removeCellComment methods + cloning cloned sheet with autofilters corrupts the workbook + Lost picture in file output after saving with POI + File Error Data May Have been Lost error while opening commented workbook(excel file) + setLineStyleColor for comments do not work + Patch to correct BorderStyle enum positions + Ugly Duckling case study + XLS formula bugfix (CalFieldFunc) + WeekDay addon + Fixed some problems extracting PNGs + Fixed some parsing errors and encoding issues in HDGF + Improved performance of PageSettingsBlock in HSSF + Getter for repeating rows and columns + Fixed tests failing on JDK 1.7 + Fixed SXSSF to correctly write text before escaped Unicode control character + Change HSMF Types to have full data on ID, Name and Length, rather than just being a simple ID + Updated case study + Support Complex Name in formulas + properly update sheet dimensions when adding column + Add File based constructor to OPCPackage, alongside existing String one (which constructed a File from the string internally) + Handle formatting General and @ formats even if a locale is prefixed to them + Removed unconditional asserts in SXSSF + Updated documentation and example on using Data Validations + Corrected AddDimensionedImage.java to support XSSF/SXSSF + Utility for representing drawings contained in a binary Excel file as a XML tree + HWPF support for fetching the description (alt text) of a picture + support negative arguments to the DATE() function + allow specifying of a TimeZone to DateUtil.getJavaDate(), for when it is known that a file comes from a different (known) timezone to the current machine + don't duplicate hyperlink relationships when saving XSSF file + fixed evaluation of SUM over cell range > 255 + avoid exception when cloning sheets with no drawing records and initialized drawing patriarch + + + + + + + + NPOIFS: NIO driven API to read OLE2 filesystems with low memory footprint. + SXSSF: a low-memory footprint API built on top of XSSF that can be used when very large spreadsheets have to be produced, and heap space is limited + poi-excelant: Ant tasks for running POI against a workbook + Supported evaluation of new Excel formulas: IRR,NPV,MROUND,VAR,VARP,CLEAN,CHAR,ADDRESS,HOUR,MINUTE,SECOND,RATE,WORKDAY,NETWORKDAYS,SUMIFS,RANK + XSLF usermodel API: POI's implementation of the PowerPoint 2007 OOXML (.xlsx) file format. XSLF provides a rich usermodel API and a PPTX2PNG utility to export slides to images. + WordToFO, WordToHtml and WordToText converters: utilities to export MS Word .doc files into XSL-FO, html and text files. Output from WordToFO can be used to convert .doc files to pdf using Apache FOP. + + + Numerous improvements and refactorings in HWPF, Java API for MS Word .doc files: support for reading + footnotes, endnotes and bookmarks, improved support for handling tables, paragraphs, text runs and much more... + Initial support for charts in XSSF + support for OOXML Agile Encryption + + + DateFormatConverter: an utility to convert instances of java.text.DateFormat to Excel format patterns + show SSTIndex instead of XFIndex in LabelSSTRecord.toString() + Tolerate missing Count and UniqueCount attributes when parsing shared strings table in XSSF eventusermodel + Added implementation for RANK() + allow setting text with trailing carriage return in HSLF + use correct text attributes when presentation has multiple TxMasterStyleAtoms of the same type + support setting background color of sheet tab in XSSF + support for enforcing fields update in XWPF + support grouping rows in SXSSF + support replacement of content types in OPC packages + replace ISO control characters with question marks in SXSSF to be consistent with XSSF + updated formula test framework to be aware of recently added Functions + support setting header / footer page margins in HSSF + fixed WorkbookUtil#createSafeSheetName to escape colon + fixed reading shared formulas in XSSF + misc improvements in CellFormat + added a getter for length of encrypted data in Ecma and Agile decryptors + support adding TIFF,EPS and WPG pictures in OOXML documents + avoid OutOfMemoryError when rendering grouped pictures in HSLF + fixed XSSFRichtextString.append to preserve leading / trailing spaces + tolerate hyperlinks that have neither location nor relation + avoid duplicate text when rendering slides in HSLF + respect slide background when rendering slides in HSLF + fixed painting shape outlines in HSLF + fixed setting vertical alignment for XSLFTableCell + fixed merging slides with pictures with associated custom tags + allow runtime registration of functions in FormulaEvaluator + When reading from a ZipFileZipEntrySource that has already been closed, give IllegalArgumentException rather than NPE + MAPIMessage may not always have name chunks when checking for 7 bit encodings + fixed namespace issue in WordToFoConverter + avoid truncated array and vector data when reading OLE properties + CharacterRun NPE fix when fetching symbol fonts, where no fonts are defined + support merging table cells in XSLF + validate row number and column index in SXSSF when creating new rows / cells + fixed evaluation of blank cells in COUNTIF + support changing external file references in HSSFWorkbook + support external references in FormulaRenderer + avoid exception when matching shared formula records in HSSF + Added methods to set/get an XWPFRun's text color + Added methods to set/get vertical alignment and color in XWPFTableCell + Added methods to get/set a table row's Can't Split and Repeat Header attributes in XWPF + Added methods to set table inside borders and cell margins in XWPF + Support DConRefRecord in HSSF + added an option to ignore missing workbook references in formula evaluator + Validate address of hyperlinks in XSSF + Relax the M4.1 constraint on reading OOXML files, as some Office produced ones do have 2 Core Properties, despite the specification explicitly forbidding this + Added implementation for SUMIFS() + POIXMLPropertiesTextExtractor support for extracting custom OOXML properties as text + Support writing XWPF documents with glossaries (Glossaries are not yet supported, but can now be written out again without changes) + Handle files which have been truncated by a few bytes in NPropertyTable + Update CellDateFormatter to handle times without seconds + Support ?/? as well as #/# fractions, and tighten DataFormatter rules for fraction matching + Updated XWPF table example code + Support for WORKDAY and NETWORKDAYS functions + Merge the logic between the TEXT function and DataFormatter + Correctly support excel style date format strings in the TEXT function + XSSFExcelExtractor should format numeric cells based on the format strings applied to them + Event based XSSF parsing should handle formatting of formula values in XSSFSheetXMLHandler + Avoid exception when creating cell style in a workbook that has an empty xf table + fixed XSSFSimpleShape to set rich text attributes from XSSFRichtextString + enhanced SheetUtil.getColumnWidth + + + + + + Deprecated XSSFWorkbook(String path) constructor because it does not close underlying .zip file + fixed refcount of Fill pictures in HSLF + support compression of temp files in SXSSF + support cloning sheets with drawings in XSSF + Support XWPF smart tags text in Paragraphs + More XSSF new-line in formula support + POIFS EntryUtils.copyNodes(POFS,POIFS) now uses FilteringDirectoryNode, so can exclude from copying nodes not just directly under the root + POIFS Helper FilteringDirectoryNode, which wraps a DirectoryEntry and allows certain parts to be ignored + fixed inserting multiple pictures in XSLF + fixed HSLF TextExtractor to extract content from master slide + null check on XWPF setFontFamily + ensure that temporary files in SXSSF are deleted + Exception parsing MS Word 8.0 file (as duplicate of 47958) + ArrayIndexOutOfBoundsException from PicturesTable.getAllPictures() during Escher tree walk + PAPFormattedDiskPage.getPAPX - IndexOutOfBounds + HWPF - ArrayIndexOutOfBoundsException with no stack trace (broken after revision 1178063) + support for converting pptx files into images with a PPTX2PNG tool + Support for the Excel RATE function + HSLF fix for finishing parsing the picture stream on the first non-valid type + Avoid HWPF issue when identifying the picture type + Fix signed issue with very large word 6 files + Avoid NPE on double close of ZipFileZipEntrySource + XWPF fix for footnotes not always being present in a document + Correct AreaReference handling of references containing a sheet name which includes a comma + XSSFReader supplied StylesTables need to have the theme data available + Removed incorrect assert in SXSSFSheet#getSXSSFSheet + Opening and Writing .doc file results in corrupt document + Picture.fillRawImageContent - ArrayIndexOutOfBoundsException (duplicate) + ArrayIndexOutOfBounds ExceptionPicture.fillRawImageContent + Allow the passing of a File object to WorkbookFactory.create, which permits lower memory processing than the InputStream version + update HSMF to ignore Outlook 2002 Olk10SideProp entries, which don't behave like normal chunks + support creating comments in XSSF on an earlier slide when later ones already have them + optionally include Master Slide text in XSLF text extraction, as HSLF already offers + New PackagePart method getRelatedPart(PackageRelationship) to simplify navigation of relations between OPC Parts + handle XLS files where the WRITEPROTECT record precedes the FILEPASS one, rather than following as normal + correct GTE handling in COUNTIF + Add HWPF API to update range text and delete bookmarks + HWPF Bookmarks tables are correctly updated on text updates + avoid LeftoverDataException when reading .xls files with invalid LabelRecords + prevent NPE in XWPFPicture.getPictureData() + prevent NPE when getting object data from OLEShape in HSLF + more progress with Chart APi in XSSF + Allow XSSF setForceFormulaRecalculation to work with the minimal ooxml-schemas jar + IllegalArgumentException Parsing MS Word 97 - 2003 + XSLFPowerPointExtractor support for including comment authors with comment text + Converted XSLFPowerPointExtractor to use UserModel for all text extraction + XSLF initial UserModel support for Notes and Comments for Slides + support for uncompressed OLE embeddings + + + + + + Extracting text from Bug51524.zip is slow + HWPFDocument.write based on NPOIFSFileSystem throws a NullPointerException + support for tables and hyperlinks in XSLF + correct signed vs unsigned short reading in NDocumentInputStream + support SXSSF streaming from templates + initial support for XSLF usermodel API + fixed OPCPackage to correctly handle self references + Improved performance of XSSFSheet#write + Word Extractor considers text copied from some website as an embedded object + Add Word-to-Text converter and use it as replacement for WordExtractor + replace text fails for doc ( poi 3.8 beta release from download site ) + Fixed incorrect encoding of non-breaking space (0xA0) in SXSSF + Support for conditional formatting in XSSF + Support isRightToLeft and setRightToLeft on the common spreadsheet Sheet interface, as per existing HSSF support + Fixed evaluation of Subtotals to ignore nested subtotals + HWPFDocument.write destroys fields + fixed EscherProperty to return property name instead of 'unknown' for complex properties + Initial support for endnotes and footnotes in HWPF + avoid exception when cloning XSSF sheets with background images + Fixed autofilters in HSSF to avoid warnings in Excel 2007 + Avoid exception when changing name of a sheet containing shared formulas + Support for appending images to existing drawings in HSSF + Initial support for bookmarks in HWPF + Fixed cloning worksheets with images + PapBinTable constructor is slow (regression) + allow HSSFObjectData to work with both POIFS and NPOIFS + avoid NPE when copying nodes from one HSSF workbook to a new one, when opened from NPOIFS + avoid NPE when DefaultRowHeight or DefaultColumnWidth records are missing + Correct Subtotal function javadoc entry + Support for hyperlinks in SXSSF + Word 6/95 documents with sections cause ArrayIndexOutOfBoundsException + XSSF support for row styles, to match existing HSSF functionality + Correct XSSF cell formatting in HTML export + XWPF support for adding new footnotes + Problems with save output of HWPF (losing formatting) + Exception when working with table + StringIndexOutOfBoundsException in CharacterRun.replaceText() + Regression: Text from some table cells missing + Add getOverallRange() method to HWPFDocumentCore + PAPX referenced outside of TextPiecesTable are ignored now and not loaded + Fix main part range (and section) detection for files with additional parts (like footers/headers) + Fix wrong TextPiece parsing in very rare cases like Bug33519.doc + Inner tables are correctly supported + Allow user to retrieve Table nesting level (based on file information) + Functionality of internal tool HWPFLister is greatly improved, including output of document PAPX and paragraphs + Expand Word structures definitions (TAP, PAP, TLP, etc) based on official documentation + Add Excel-to-HTML converter (2007 versions) + Add Word-to-HTML converter (95-2007 versions) + Skip wrong-type SPRMs when characters SPRM is expected + Add toStrings() methods to internal HWPF structures: BorderCode, PAPX, Paragraph, PieceDescriptor, Section, SEPX, SprmOperation, TextPiece etc + SXSSF handling for null strings + Fixed HSSFWorkbook.setSheetOrder() to respect inter-sheet references + Avoid exception when evaluating workbooks with more than 256 sheets + Correct BitField wrapping when setting large values + Improve HSSF performance when loading very long rows, by switching the CellValue array to an iterator + Prevent corrupted output when saving files created by LibreOffice 3.3 + Support using RecalcIdRecord to trigger a full formula recalculation on load + Example demonstrating how to update Excel workbook embedded in a WordprocessingML document + Avoid IndexOutOfBoundException when removing freeze panes in XSSF + Fixed XSSFRichTextString to respect leading and trailing line breaks + Fixed default behaviour of XSSFCellStyle.getLocked() + Fixed setting column and row breaks in XSSF + Ignore exceptions in ParagraphSprmUncompressor + Fixed Workbook.createSheet(sheetName) to truncate names longer than 31 characters + Fixed internal IDs of shapes generated by HSSFPatriarch when there are more than 1023 drawing objects + Improved documentation for Sheet.setColumnWidth + Added handling of additional properties to HWPF ParagraphSprmCompressor + Support for sprmPJc paragraph SPRM in HWPF + New Case Study for POI web site + Avoid exceptions in HSSFDataFormat.getDataFormatString() + Fixed autosizing columns beyond 255 character limit + Fixed incorrect setting of lastPrinted OOXML core property + Word to XSL-FO converter + Fixed missing shapeId in XSSF drawings + Fixed arithmetic rounding in formula evaluation + Support autoSizeColumn in SXSSF + Parse picture goal and crop sizes in HWPF + Add sprmTCellPaddingDefault support in HWPF + Enhanced Handling of Picture Parts in XWPF + Additional HWPF Table Cell Descriptor values + + + + + + Correctly calculate image width/height, if image fits into one cell + Correct extra paragraphs from XWPF Table Cells + Support for getting and setting XWPF zoom settings + Support for adding Numbering and Styles to a XWPF document that doesn't already have them + Formula Value Cache fix for repeated evaluations + Improved performance of SharedValueManager + XSSF set colour support for black/white to match getter + Initial support for Spreadsheet Chart API + Add support for OOXML Agile Encryption + Initial version of SXSSF, a low memory footprint API to produce xlsx files + Improved performance of opening large .xls files + Add XWPF support for GIF pictures + NPOIFS Mini Streams now support extending the underlying big block stream to fit more data + XWPFDocument now properly tracks paragraphs and tables when adding/removing them + Correct sizing of LbsDataSubRecord with unused padding fields + NameCommentRecord correction for writing non ASCII strings + Correct XWPFTable tracking of new rows + Correct XWPFParagraph tracking of inserted runs + Correct XWPFParagraph tracking of new runs + Handle DataFormatter escaping of "." in the same way as "-" and "/" + Fix IOUtils issue for NPOIFS reading from an InputStream where every block is full + Correct XSSF cell style cloning between workbooks + Add get/setForceFormulaRecalculation for XSSF, and promote the methods to the common usermodel Sheet + Tweak the logic for sizing the HSSFCells array on a HSSFRow to reduce memory over allocation in many use cases + Support for adding a picture to a XSSFRun + Rename/Move xssf.model.Table to xssf.usermodel.XSSFTable as it now has usermodel-like features + Correct target URI for new XSSF Tables + Initial support for XSSF Charts. Provides easy access to the underlying CTChart object via the Sheet Drawing, but no high level interface onto the chart contents as yet + XSSF and HSSF freeze panes now behave the same + Support for adding a table to a XSSFSheet + Improve HSMF MAPIMessage access to the HTML and RTF versions of the message body (where available) + Add new method to HSMF of MAPIMessage.has7BitEncodingStrings() to make it easier to decide when encoding guessing is needed + OutlookTextExtractor now requests 7 bit encoding guessing + Improve HSMF encoding guessing for 7 bit fields in MAPIMessage + Allow HSMF access to the HTML body contents in MAPIMessage + + + + + + Implement the load method on MemoryPackagePart + Support for continued ExtSSTRecords + Support for HOUR, MINUTE and SECOND date formulas + Added NPOIFS constructors to most POIDocument classes and their extractors, and more widely deprecated the Document(DirectoryNode, POIFSFileSystem) constructor in favour of the more general Document(DirectoryNode) one + Fixed NPOIFS handling of new and empty Document Nodes + Fixed NPOIFS access to Document Nodes not in the top level directory + Improved SpreadSheet DataFormatter to handle scientific notation, invalid dates and format spacers + Correct createFreezePane in XSSF, so that the left row/column matches the documentation + HSSF + When setting repeating rows and columns for XSSF, don't break the print settings if they were already there + ExternalNameRecord support for DDE Link entries without an operation + More XSSFColor theme improvements, this time for Cell Borders + ChartEndObjectRecord is supposed to have 6 bytes at the end, but handle it not + HMEF - New component which supports TNEF (Transport Neutral Encoding Format), aka winmail.dat + support for getting HWPFDocument fields + fixed setting named styles to HSSFCells + fixed RecordFormatException when reading unicode strings with photenic data + More helpful error message when you try to create a CellReference with #REF! + XSSFColors return by XSSFFont now have theme information applied to them + Improve how XSSFColor inherits from Themes + XSSFFont now accepts the full range of Charsets from FontChartset + Speed up calls to HSSFColor.getIndexHash() by returning a cached, unmodifiable Map. HSSFColor.getModifiableIndexHash() provides access to the old (slow but modifiable) functionality + Change related formulas and named ranges when XSSFWorkbook.setSheetName is called + + + + + + Ant tasks for running POI against a workbook + Correct XBAT chaining explanation in /poifs/fileformat.html + Support for getting the tables associated with a XSSFSheet + More XSSFColor updates for ARGB vs RGB + Use stax:stax-api instead of org.apache.geronimo.specs:geronimo-stax-api_1.0_spec + Fix XSSFColor to fetch the RGB values of old-style indexed colours + Fix XSSFColor fetching of white and black background themes + Avoid NPE from xmlbeans when moving XSSF Comments from one cell to another + When creating HSSF Print Areas, ensure the named range is reference based not value based + When formatting numbers based on their Cell Style, treat GENERAL the same as the more typical General + fixed HSSFWorkbook.createCellStyle to throw exception if the maximum number of cell styles was exceeded + Better fix for html-style br tags (invalid XML) inside XSSF documents + allow overridden built-in formats in HSSFCellStyle + Added implementation for CLEAN(), CHAR() and ADDRESS() + Improved documentation on user-defined functions + Inside ExtractorFactory, support finding embedded OOXML documents and providing extractors for them + Partial HDGF LZW compression support + Support for continued NameRecords + Correct shifting of the first or last row in a sheet by multiple rows + Support evaluating formulas with newlines in them, which XSSF may have (but HSSF may not) + Added inline string support to XSSF EventModel + Properly position GutsRecord when reading HSSF workbooks + Added implementation for MROUND(), VAR() and VARP() + Code cleanup and optimizations to keep some IDE quiet + Support passing ranges to NPV() + Added implementation for IRR() + Improved performance of RowRecordsAggregate.getStartRowNumberForBlock / getEndRowNumberForBlock + Avoid crashing Excel when sorting XSSFSheet autofilter + Allow access from XSSFReader to sheet comments and headers/footers + Refactor XSSFEventBasedExcelExtractor to make it easier for you to have control over outputting the cell contents + avoid corruption of XSSFWorkbook after applying XSSFRichTextRun#applyFont + Allow white spaces and unicode in OPC relationship targets + Remove cell from Calculation Chain after setting cell type to blank + Ensure that XSSFRow#removeCell clears calculation chain entries + Fixed evaluation of cell references with column index greater than 255 + Tolerate Double.NaN when reading .xls files + Use cached formula result when auto-sizing formula cells + OLE2 does allow a directory with an empty name, so support this in POIFS + avoid NPE when XSSFReader comes across chart sheets + + + + + +OOXML +support for reading aes-encrypted/write-protected ooxml files +support Java 1.5 in auto-generated xmlbeans for ooxml schemas + + +Spreadsheet (Excel) +initial support for autofilters +support for data validation for ooxml format +initial support for themes for ooxml format +added implementation for new functions: RANDBETWEEN, POISSON, SUBTOTAL, TEXT, TRUNC +support evaluation of indirect defined names in INDIRECT +numerous fixes and performance optimizations in the Formula Evaluation module +ability to add, modify and remove series from HSSF Charts +numerous improvements in the cell data formatter (handling more formatting rules, + better color detection, allow overriding of default locale) +more examples including a rich "spreadsheet to HTML" converter + + +Document (Word) +initial support for the HWPF revision marks authors list +support for border codes in HWPF +support for processing of symbols in HWPF +support sections in Word 6 and Word 95 files +improved reading of auto-saved ("complex") documents in HWPF +improved support for manipulation of tables and paragraphs in XWPF + + +SlideShow (PowerPoint) +allow editing workbooks embedded into HSLF slide shows + + +Text Extraction +support for text extraction from XSLF tables +add PublisherTextExtractor support to extractorfactory +support attachments as embedded documents within the new OutlookTextExtactor +new event based XSSF text extractor (XSSFEventBasedExcelExtractor) +make it easier to tell which content types each POIXMLTextExtractor handles +paragraph level as well as whole-file text extraction for word 6/95 files + + +...and much much more: code cleanup, many bug fixes and performance improvements + + + avoid NPE in ListLevel.getNumberText() when numberText is null + marked commons-logging and log4j as optional dependencies in POI poms + allow overridden built-in formats in XSSFCellStyle + support for BorderCode in HWPF + support for processing of symbols in HWPF + support for retrieving pictures from HSSF workbooks + Avoid IllegalStateException when creating Data validation in sheet with macro + Improved rounding in MOD + Generate SHA1 hashes of distribution files, alongside existing MD5 ones + + + + + + If a HSSF header or footer lacks left/right/centre information, assume it is a centre one + Correctly remove calcChain entries for XSSF cells that stop holding formulas + XSSFCellStyle support for creating a style in one workbook based on a style from a different one + Avoid concurrency problems when re-ordering multiple HSSF header records for a PageSettingsBlock + Fix XWPFDocument.addPicture so that it correctly sets up relationships + Improve HWPF handling of lists in documents read and then saved, by preserving order better + Fix HWPF paragraph levels, so that outline levels can be properly fetched + Avoid infinite loops on broken HWPF documents with a corrupt CHP style with a parent of itself + Handle HWPF documents with problematic HeaderStories better + Support sections in Word 6 and Word 95 files (HWPFOldDocument) + Correctly handle space preservation of XSSFRichTextRuns when applying fonts to parts of the string + Correct XWPFRun detection of bold/italic in a paragraph with multiple runs of different styles + Link XWPFPicture to XWPFRun, so that embedded pictures can be access from where they live in the text stream + Improve handling of Hyperlinks inside XWPFParagraph objects through XWPFHyperlinkRun + Make XWPFParagraph make more use of XWPFRun, and less on internal StringBuffers + Add a getBodyElements() method to XWPF IBody, to make access to embedded paragraphs and tables easier + More XSLFRelation entries for common .pptx file parts + avoid exception in XSSFFormulaEvaluator.evaluateInCell when evaluating shared formulas + avoid corruption of XSSFWorkbook after removing all merged cells from sheet + fixed inconsistent behaviour between HSSF and XSSF when creating consecutive names + Add getMimeType() method to HWPF Picture, alongside existing file extension + Add code for reading Ole10Native data + Add getMimeType() method to HSSF/XSSF PictureData, alongside existing file extension + allow sheet names longer than 31 chars in XSSF, enforce name uniqueness on the first 31 chars + improved API for hiding sheets + fixed XSSFWorkbook.createSheet to throw exception if sheet name begins or ends with a single quote (') + fixed XSSFFormulaEvaluator to support blank cells + added a getter for _iStartAt in ListFormatOverrideLevel + change cell type to error when setting Double.NaN or Infinities + ensure that CTNumPr is included in poi-ooxml-schemas.jar + fixed LEFT and RIGHT to return #VALUE! when called with a negative operand + fixed evaluation of XSSF workbooks containing formulas with reference errors (#REF!) + fixed fetching names of user defined styles in HSSFCellStyle.getUserStyleName() + support for protecting a XSSF workbook + fixed FormulaParser to correctly process defined names with underscore + added implementation for RANDBETWEEN() + avoid exception in OperandResolver.parseDouble when input is minus ("-") + fixed OperandResolver to correctly handle inputs with leading decimal place + initial support for Excel autofilter + + + + + + Support for .msg attachments within a MAPIMessage .msg + Improve handling and warnings when closing OPCPackage objects + Correct XSSFWorkbook.getNumCellStyles to check the right styles list + Add WorkbookUtil, which provides a way of generating valid sheet names + Use DataFormatter when autosizing columns, to better match the real display width of formatted cells + Allow overriding and guessing of HSMF non-unicode string encodings + Allow the setting of user style names on newly created HSSF cell styles + Make it easier to tell which content types each POIXMLTextExtractor handles + Added clone support for UserSView* and Feat* families of records + Support for escaped unicode characters in Shared String Table + prevent ArrayIndexOutOfBoundException in UnknownEscherRecord + preserve leading and trailing white spaces in XWPFRun + Insert the content of fldSimple fields into the XWPFWordTextExtractor output + Fixed parsing formulas containing defined names beginning with an underscore + Added implementation for POISSON() + Support for setting cell text to be vertically rotated, via style.setRotation(0xff) + Case insensitive matching of OOXML part names + Ability to add, modify and remove series from HSSF Charts + Support for HSSFNames where the comment is stored in a NameCommentRecord + correct writing of noterecord author text when switching between ascii and unicode + improve reading of auto-saved ("complex") documents + paragraph level as well as whole-file text extraction for word 6/95 files through hwpf + text extraction support for older word 6 and word 95 files via hwpf + allow the addition of paragraphs to xwpf table cells + don't consider 17.16.23 field codes as properly part of the paragraph's text + xslfslideshow shouldn't break on .thmx (theme) files. support for them is still very limited though + + + + + + lazy caching of xssfcomment ctcomment objects by reference, to make repeated comment searching faster + better handling of outlook messages in hsmf when there's no recipient email address + when formatting numbers with dataformatter, handle brackets following colours + further xwpf support for tables, paragraphs, including enhanced support for adding new ones + tweak hwpf table cell detection to work across more files + initial support for external name references in hssf formula evaluation + fix up tab ids when adding new sheets, so that print areas don't end up invalid + improve replacetext on hwpf ranges + correct documentation on what happens when you request a string from a non-string formula cell + avoid npe when extracting ooxml file properties which are dates + only call decimalformat.setroundingmode on java 1.6 - it's needed to match excel's rendering of numbers + correct 1.6ism + parse the hsmf headers chunk if present, and use it to find dates in text extraction if needed + detect and support time formats like hh:mm;hh:mm + have excelextractor make use of hssfdataformatter, so that numbers and dates come out closer to how excel would render them + have eventbasedexcelextractor make use of hssfdataformatter, so that numbers and dates come out closer to how excel would render them + add clone support to chart begin and end records, to allow cloning of more chart containing sheets + list attachment names in the output of outlooktextextractor (to get attachment contents, use extractorfactory as normal) + allow dateformatter.formatrawcellcontents to handle 1904 as well as 1900 dates + handle mmmmm and elapsed time formatting rules in dataformatter + handle zero formatting rules, and better color detection in dataformatter + support for more kinds of formatting in dataformatter + fixed construction of the dib picture header + initial support for reading aes-encrypted/write-protected ooxml files + make the creation of multiple, un-modified fonts in a row in xssf match the old hssf behaviour + allow access to the hssfpatriarch from hssfsheet once created + allow you to get straight from a cellstyle to a color, irrespective of if the color is indexed or inline-defined + allow access of the hwpf dateandtime underlying date values + initial support for the hwpf revision marks authors list + ensure that ctdigsigblob is included in poi-ooxml jar + detect w:tab and w:cr entries in xwpf paragraphs, even when the xsd is silly and maps them to ctempty + correct handling for font character sets with indicies greater than 127 + track the valuerangerecords of charts in hssfchart, to allow the basic axis operations + track the linkdatarecords of charts in hssfchart + improved performance of xssfworkbook.write + avoid npe when finding cell comments + ensure that ctphoneticpr is included in poi-ooxml jar + fixed tests failing in non-english locales + support for xssf themes + support for data validation for ooxml format + worksheet/cell formatting, with view and html converter + workaround excel outputting invalid xml in button definitions by not closing br tags + improve performance of abstractescherholderrecord when there are lots of continue records + correct text size limit for ooxml .xlsx files + fix cellutils.setfont to use the correct type internally + properly support 4k big block size in poifs + avoid writing malformed cdata blocks in sharedstrings.xml + added implementation for text() + added implementation for trunc() + properly close internal inputstream in extractorfactory#createextractor(file) + fixed locale-sensitive formatters in packagepropertiespart + ensure that ctvectorvariant is included in poi-ooxml-schemas.jar + added accessors to coreproperties.keywords + propagate parent to parent-aware records decoded from escher + add extra paper size constans to printsetup, such as a3, b4 and b5 + make poifs.filesystem.directorynode preserve the original ordering of its files, which hsmf needs to be able to correctly match up chunks + support evaluation of indirect defined names in indirect + improve hdgf chunkv11 separator detection, and short string detection, to solve the "negative length of chunkheader" problem + optionally allow the overriding of the locale used by dataformatter to control how the default number and date formats should look + new event based xssf text extractor (xssfeventbasedexcelextractor) + extractorfactory can now be told to prefer event based extractors (current excel only) on a per-thread or overall basis + avoid failures in xlsx2csv when shared string table is missing + properly close all io streams created in opcpackage + always copy all declared inner classes and interfaces when generating poi-ooxml-schemas + low level record support for the extrst (phonetic text) part of unicode strings. no usermodel access to it as yet though + record.unicodestring has moved to record.common.unicodestring, to live with the other record-part classes, as it isn't a full record + avoid creating temporary files when opening opc packages from input stream + improved how hsmf handles multiple recipients + add publishertextextractor support to extractorfactory + add xslf support for text extraction from tables + support attachments as embedded documents within the new outlooktextextractor + add a text extractor (outlooktextextractor) to hsmf for simpler extraction of text from .msg files + some improvements to hsmf parsing of .msg files + initialise the link type of hssfhyperlink, so that gettype() on it works + improved performance of dateutil.iscelldateformatted() + fixed interfaceendrecord to tolerate unexpected record contents + improved javadoc on hsspicture.resize() + added ant target to install artifacts in local repository + fixed pagesettingsblock to allow multiple headerfooterrecord records + fixed cellrangeutil.mergecellranges to work for adjacent cell regions + fixed externalnamerecord to properly distinguish dde data from ole data items + allow editing workbooks embedded into powerpoint files + added implementation of subtotal function + switch to compiling the ooxml schemas for java 1.5 + + + + + fixed xssfsheet autosizecolumn() to tolerate empty richtextstring + fixed columninforecord to tolerate missing reserved field + fixed recordformatexception when reading list subrecords (lbsdatasubrecord) + memory usage optimization in xssf - avoid creating parentless xml beans + avoid corruption of workbook when adding cell comments + improved work with cell comments in xssf + add support for creating summaryinformation and documentsummaryinformation properties + on poidocuments that don't have them, via poidocument.createinformationproperties() + + be more forgiving of short chart records, which skip some unused fields + fix erronious wrapping of byte colours in hssfpalette.findsimilarcolor + fix fetching of error codes from xssf formula cells + fixed javadoc for hssfsheet.setcolumnwidth and xssfsheet setcolumnwidth + fixed xlsx2csv to avoid exception when processing cells with multiple "t" elements + short-circuit evaluation of if() and choose() + support for text extraction from ppt master slides + added a method to set arabic mode in hssfsheet + release system resources when using picture.resize() + avoid npe in xssfchartsheet when calling methods of the superclass + handle reading hwpf stylesheets from non zero offsets + when running the "compile-ooxml-xsds" ant task, also generate the source jar for the ooxml schemas + improve handling by missingrecordawarehssflistener of records that cover multiple cells (mulblankrecord and mulrkrecord) + relaxed validation check in recalcidrecord + improved error checking in blockallocationtablereader to trap unreasonable field values + fixed logic for matching cells and comments in hssfcell.getcellcomment() + added implementation of protection features to xlsx and docx files + preserve leading and trailing white spaces in xssfrichtextstring + added implementation for countblank function + added intersectioneval to allow evaluation of the intersection formula operator + avoid un-needed call to the jvm garbage collector when working on ooxml opc packages + added example hsmf application that converts a .msg file to text and extracts attachments + added ant target to compile scratchpad examples + improved api for ooxml custom properties + fixed xssfsheet.setcolumnwidth to handle columns included in a column span + fixed xssfsheet.setcolumnhidden to handle columns included in a column span + fixed xssfcell.getstringcellvalue() to properly handle cached formula results + + + + + fixed logic for locating shared formula records + improved work with user-defined functions + fixed xssfsheet.setcolumnwidth to produce xml compatible with mac excel 2008 + removed unnecessary svn:executable flag from files in svn trunk + added javadoc how to avoid excel crash when creating too many hssfrichtextstring cells + fixed problems with xssfworkbook.removesheetat when workbook contains chart + adjust sheet indices of named ranges when deleting sheets + built-in positive formats don't need starting '(' + added method setfunction(boolean) for defined names + implementation of excel "days360" and "npv" functions + do not allow hssf's cell text longer than 32,767 characters + added an example demonstrating how to convert an xlsx workbook to csv + fixed ppt parser to tolerate comment2000 containers with missing comment text + fix for extraction paragraphs and sections from headers/footers with xwpfwordextractor + support for extraction of header / footer images in hwpf + moved all test data to a top-level directory + Added implementation for INDIRECT() + Avoid exception when reading ClipboardData packet in OLE property sets + Added support for reading encrypted workbooks + Implementation of an XML to XLSX Importer using Custom XML Mapping + Avoid FormulaParseException in XSSFWorkbook.setRepeatingRowsAndColumns when removing repeated rows and columns + Fixed XSSFCell to correctly parse column indexes greater than 702 (ZZ) + Improved formula evaluator number comparison + Fixed XWPFWordExtractor to extract inserted/deleted text + Fixed RecordFactoryInputStream to properly read continued DrawingRecords + Fixed compatibility issue with OpenOffice 3.0 + + Fixed compatibility issue with Excel 2008 Mac sp2. Please see + the HSSF+XSSF project page + for more information. + + Fix for saving custom and extended OOXML properties + Fixed WordExtractor to tolerate files with empty footnote block + Fixed ExtractorFactory to support .xltx and .dotx files + Support for extraction of footnotes from docx files + Support for extraction of endnotes from docx files + Initial support for custom XML mappings in XSSF + Fixed NPE when retrieving core properties from a newly created workbook + Fixed HyperlinkRecord to properly handle URL monikers + Fixed XSSFWorkbook to read files with hyperlinks to document locations + Fix BoolErrRecord to tolerate incorrect format written by OOO + Allow HSSFEventFactory to handle non-zero padding at the end of the workbook stream + Support for getting OLE object data in PowerPointExtractor + Explicitly set the 1900 date system when creating XSSF workbooks + Support for text extraction of footnotes, endnotes and comments in HWPF + Fixed PageSettingsBlock to allow multiple PLS records + Fixed concurrency issue with EscherProperties.initProps() + Fixed OOM in HSSFWorkbook#getAllPictures when reading .xls files containing metafiles + Added implementation for ISNA() + fixed SimpleShape#getLineWidth to handle default line width + removed unused private fields in HWPF BorderCode + Improved HWPF TableCell to expose TableCellDescriptor + Improved HWPF to better handle unicode + Fixed SlideShow#removeSlide to remove references to Notes + Fixed HSSFHyperlink to correctly set inter-sheet and file links + Fixed ExternalNameRecord to handle unicode names + Fixed locale-sensitive unit tests to pass when running on non-US locale + + + + + Fixed HSSFSheet to allow addition of data validations after sheet protection + Fixed XSSFWorkbook#setRepeatingRowsAndColumns to tolerate sheet names with quotes + Fixed logic in HSSFCell.getCellComment to handle sheets with more than 65536 comments + Added clone() method to MulBlankRecord to fix crash in Sheet.cloneSheet() + Fixed HSSFSheet to handle missing header / footer records + Fixed formula parser to properly reject cell references with a '0' row component + Fixed PageSettingsBlock/Sheet to tolerate margin records after other non-PSB records + Fixed HSSFSheet#getFirstRowNum and HSSFSheet#getLastRowNum to return correct values after removal of all rows + Fixed XSSFCell to avoid generating xsi:nil entries in shared string table + Fixed XSSFCell to properly read inline strings + Fixed FontRecord to expect unicode flags even when name length is zero + Fixed formula evaluator comparison of -0.0 and 0.0 + Fixed ExternalNameRecord to handle DDE links + Control of header and footer extraction in ExcelExtractor / XSSFExcelExtractor + New ant target "jar-examples" + Support in XSSF for setGroupColumnCollapsed and setGroupRowCollapsed + Allow columns greater than 255 and rows greater than 0x100000 in XSSF formulas + Base class for "old version" exceptions, and new HSLF detection + use of old versions exception + Fix string encoding issues with HSMF chunks on non-windows platforms + Attachment support for HSMF + Handle the cell format @ as the same as General + Fixed evaluation of defined names with the 'complex' flag set + More tweaks to PageSettingsBlock parsing logic in Sheet constructor + Fixed XSSFWorkbook.createSheet to properly increment sheetId + Fixed XSLFPowerPointExtractor to properly process line breaks + Fixed POIFSFileSystem to set CLSID of root when constructing instances from InputStream + Fixed cloneStyleFrom to avoid exception when cloning styles of the same family + Fixed Sheet to read GutsRecord in the Sheet(RecordStream rs) + Automatically call sheet.setAlternativeExpression when sheet.setRowSumsBelow is called + Allow 255 arguments for excel functions in XSSF + Fixed XSSFCell to preserve cell style when cell value is set to blank + Avoid NPE in XSSFCell.setCellType() when workbook does not have SST + Allow RecordFactory to handle non-zero padding at the end of the workbook stream + Fix reading the name of a NameRecord when the name is very long + Fixed WriteAccessRecord and LinkTable to handle unusual format written by Google Docs + Fixed defined names to behave better when refersToFormula is unset + Allow merged regions with columns greater than 255 or rows bigger than 65536 in XSSF + Fixed formula parser to better handle range operators and whole row/column refs + Fixed evaluation of range operator to allow for area-ref operands + Fixed ExtendedPivotTableViewFieldsRecord(SXVDEX) to allow shorter format + Fixed formula evaluator to not cache intermediate circular-reference error results + Fixed PageItemRecord(SXPI) to allow multiple field infos + Fix POIFS issue with duplicate block 0 references on very old BIFF5/BIFF7 files + PageSettingsBlock should include HEADERFOOTER record + update cell type when setting cached formula result in XSSFCell + added modifiers for anchor type to XSSFClientAnchor + support built-in data formats in XSSFDataFormat + fixed XSSFSheet.shiftRows to correctly preserve row heights + preserve custom column widths across re-serialization of XSSFWorkbook + added setDisplayZeros / isDisplayZeros to common interface org.apache.poi.ss.usermodel.Sheet + added getMergedRegion(int) to common interface org.apache.poi.ss.usermodel.Sheet + fixed Sheet.autoSizeColumn() to use cached formula values when processing formula cells + Fixed formula parser to handle names with backslashes + added Workbook getHidden() and setHidden(boolean) + Fixed bugs serialization bugs in records: CHARTFORMAT, SHTPROPS, SXVD and SXVDEX + Fixed offset of added images if Pictures stream contains pictures with zero length + + + + + When shifting rows, update formulas on that sheet to point to the new location of those rows + Fixed XSSFSheet.shiftRows to properly update references of the shifted cells + Remove reference from calculation chain when a formula is deleted + HSSFRow/RowRecord to properly update cell boundary indexes + Fixed formula parser to encode range operator with tMemFunc + Fixed COUNTIF NE operator and other special cases involving type conversion + Added a method to remove slides + Fixed HSSFFont.applyFont() to properly apply font to overlapping regions + Fixed ObjRecord to ignore excessive padding written by previous POI versions + Fixed evaluator to perform case insensitive string comparisons + command line interface for hssf ExcelExtractor + Allow addition of conditional formatting after data validation + Page Settings Block fixes - continued PLS records and PSB in sheet sub-streams + added implementation for SUMIF function + Support for reading HSSF column styles + Hook up POIXMLTextExtractor.getMetadataTextExtractor() to the already written POIXMLPropertiesTextExtractor + Avoid NPE in HPSFPropertiesExtractor when no properties exist + fixed bugs related to cached formula values and HSSFFormulaEvaluator.evaluateInCell() + added implementation for CHOOSE() function + resolve licensing issues around the HDGF resource file, chunks_parse_cmds.tbl + added implementation for TIME() function + added HSSFPictureData.getFormat() + fixed HSSFSheet.shiftRow to move hyperlinks + fixed formula parser to correctly resolve sheet-level names + support for shared formulas in XSSF + support for carriage return and line break in XWPFRun + support for line spacing in XWPFParagraph + initial support for creation of XWPFTable + Added getters to parent objects: HSSFSheet.getWorkbook(), HSSFRow.getSheet() and HSSFCell.getRow() + (also patch 46362) fix serialization of StyleRecord with unicode name + Fix HSSFRichTextRun and strings longer than 32768 characters + Support sheet-level names + Fixed XSSFCell to properly handle cell references with column numbers up to XFD + Fixed warning message "WARN. Unread n bytes of record 0xNN" + Improved number to text conversion to be closer to that of Excel + Fixed ValueRecordsAggregate to handle removal of new empty row + Improved error message when attempting to read BIFF2 file + Fixed Sheet to tolerate missing DIMENSION records + added pivot table records: SXDI, SXVDEX, SXPI, SXIDSTM, SXVIEW, SXVD, SXVS, et al + Fixed RowRecordsAggregate etc to properly skip PivotTable records + + + + + Fixed FormulaRecordAggregate to gracefully ignore extra StringRecords + Fixed HSSFName to handle general formulas (not just area references) + added chart records: CHARTFRTINFO, STARTBLOCK, ENDBLOCK, STARTOBJECT, ENDOBJECT, and CATLAB + More tweaks to EmbeddedObjectRefSubRecord + Changes to formula evaluation allowing for reduced memory usage + Support odd files where the POIFS header block comes after the data blocks, and is on the data blocks list + More odd escaped date formats + Include the sheet number in the output of XLS2CSVmra + correctly write out HPSF properties with HWPF + added CreationHelper.createFormulaEvaluator(), implemeted both for HSSF and XSSF + fixed Slideshow.readPictures() to skip pictures with invalid headers + Handle odd files with a ContinueRecord after EOFRecord + Fixed problem with linking shared formulas when ranges overlap + More fixes to SeriesTextRecord + fixed TableCell to correctly set text type + fixed Picture.draw to skip rendering if picture data was not found + memory usage optimisation - converted Ptg arrays into Formula objects + added implementation for VALUE function + added implementation for FIND function + fixed ObjRecord to read ftLbsData properly + fixed evaluation cache dependency analysis when changing blank cells + + + + + Fix up ColumnHelper to output valid col tags, by making 1 based and 0 based bits clearer, and using the right ones + Handle very long cells in the XSSF EventUserModel example + Initial ExtractorFactory support for building TextExtractors for embedded documents + + + + + Support stripping XSSF header and footer fields (eg page number) out of header and footer text if required + Add POIXMLPropertiesTextExtractor, which provides to the OOXML file formats a similar function to HPSF's HPSFPropertiesExtractor + Improve XWPFWordExtractor to extract headers and footers + Improve how XWPF handles paragraph text + Support in XWPF handles headers and footers + Improve XWPF text extraction to include tables always, and picture text where possible + Improve XSLF usermodel support, and include XSLF comments in extracted text + Fix XSSF header and footer support, and include headers and footers in the output of XSSFExcelExtractor + Support for .xlsm files, sufficient for simple files to be loaded by excel without warning + New class org.apache.poi.hssf.record.RecordFormatException, which DDF uses instead of the HSSF version, and the HSSF version inherits from + Partial support for .xlm files. Not quite enough for excel to load them though + Correct named range sheet reporting when no local sheet id is given in the xml + + + + + Support for fetching embedded documents from within an OOXML file + Port support for setting a policy on missing / blank cells when fetching, to XSSF too + Common text extraction factory, which returns the correct POITextExtractor for the supplied data + Text Extraction support for the new OOXML files (.xlsx, .docx and .pptx) + Initial support for processing OOXML Excel files (.xlsx), both directly through XSSF, and also through the new common UserModel + Created a common interface for handling PowerPoint files, irrespective of if they are .ppt or .pptx + Created a common interface for handling Excel files, irrespective of if they are .xls or .xlsx + + + + + allowed for change of unicode compression across Continue records + support for link formulas in Text Objects + support for evaluating formulas with missing args + fixed ArrayIndexOutOfBoundsException in EmbeddedObjectRefSubRecord + fixed ArrayIndexOutOfBoundsException when constructing HSLF Table with a single row + Initial support for creating hyperlinks in HSLF + fixed BoundSheetRecord to allow sheet names longer than 31 chars + fixed HSSFSheet.shiftRows to also update conditional formats + modified Formula Parser/Evaluator to handle cross-worksheet formulas + Optimised the FormulaEvaluator to take cell dependencies into account + Initial support for whole-row cell styling + Update hssf.extractor.ExcelExtractor to optionally output blank cells too + Include the sheet name in the output of examples.XLS2CSVmra + Support long chart titles in SeriesTextRecords + Throw an exception if HSSF Footer or Header is attempted to be set too long, rather than having it break during writing out + Additional diagnostics for HSLF SlideShowRecordDumper + HSSFPicture.getImageDimension() failed when DPI of image is zero + Bit mask values in StyleTextPropAtom were not preserved across read-write + Specify RecordType for slide show Handout (4041) + Fixed 16-bit signed/unsigned bug in HSSFSheet.getColWidth etc + Fixed HSSFSheet.shiftRows to also update Area refs + Update HSMF to handle Outlook 3.0 msg files, which have a different string chunk type + Expose the name of Named Cell Styles via HSSFCellStyle (normally held on the parent style though) + Fixed IOOBE in Ref3DPtg.toFormulaString() due eager initialisation of SheetReferences + Made HSSFFormulaEvaluator no longer require initialisation with sheet or row + Extended support for cached results of formula cells + Fixed AIOOBE due to bad index logic in ColumnInfoRecordsAggregate + Fixed special cases of INDEX function (single column/single row, errors) + Support for Very Hidden excel sheets in HSSF + Initial HWPF support for Office Art Shapes + Fixed HSSFWorkbook.cloneSheet to correctly clone sheets with drawings + Fix for SlideShow.reorderSlide in HSLF + Initial support for embedded movies and controls in HSLF + signed/unsigned error when parsing 3-d area refs, performance problem evaluating area refs, and ClassCastExcecption in IF() + Support for HPBF Publisher hyperlinks, including during text extraction + preserve position of ArrayRecords and TableRecords among cell value records + Impove empty header or footer handling in HWPF HeaderStories + Avoid NPE in hssf.usermodel.HeaderFooter when stripping fields out + Avoid NPE in EscherBSERecord on older escher records + Basic text extraction support in HPBF + Initial, low level support for Publisher files, in the form of HPBF + Fix RowRecordsAggregate to tolerate intervening MERGEDCELLS records + Fix LinkTable to tolerate multiple EXTERNSHEET records + Fix for cloning of CFRecordsAggregate + Initial support for evaluating external add-in functions like YEARFRAC + Fix for MissingRecordAwareHSSFListener to prevent multiple LastCellOfRowDummyRecords when shared formulas are present + Fix for HSSFSheet.autoSizeColumn() for widths exceeding Short.MAX_VALUE + Support for additional HSSF header and footer fields, including bold and full file path + Support stripping HSSF header and footer fields (eg page number) out of header and footer text if required + Support stripping HWPF fields (eg macros) out of text, via Range.stripFields(text) + New HPSF based TextExtractor for document metadata, org.apache.poi.hpsf.extractor.HPSFPropertiesExtractor + Properly update the array of Slide's text runs in HSLF when new text shapes are added + Fix for Header/footer extraction for .ppt files saved in Office 2007 + Big improvement in how HWPF handles unicode text, and more sanity checking of text ranges within HWPF + Include headers and footers int he extracted text from HWPF's WordExtractor + Added support to HWPF for headers and footers + Improve how HWPF deals with unicode internally. Should avoid some odd behaviour when manipulating unicode text + Added implementations for Excel functions NOW and TODAY + Fix for workbook streams with extra bytes trailing the EOFRecord + Include headers and footers (of slides and notes) in the extracted text from HSLF + Fixed incorrect default row height in OpenOffice 2.3 + HSSFPicture.resize() stretched image when there was a text next to it + Optionally extract comment text with PowerPointExtractor, and initial hslf model support for comments + Include excel headers and footers in the output of ExcelExtractor + refactor duplicate logic from EventRecordFactory to RecordFactory + Support for Headers / Footers in HSLF + Extensive fixes for data validation + Fixed to keep datavalidation records together + Support for creating new HSLF CurrentUserAtoms + Partial support for removing excel comments (won't work for all excel versions yet) + Detect encrypted word documents, and throw an EncryptedDocumentException instead of a OOM + New class, hssf.usermodel.HSSFDataFormatter, for formatting numbers and dates in the same way that Excel does + Don't add too many UncalcedRecords to sheets with charts in them + Support detecting date formats containing "am/pm" as date times + Removed dependency from contrib on commons beanutils,collections and lang + New helper, HSSFOptimiser, which handles removing duplicated font and style records, to avoid going over the limits in Excel + Fixed NPE in HSSFSheet.autoSizeColumn() when cell number format was not found + Missing return keyword in ArrayPtg.toFormulaString() + Record level support for Data Tables. (No formula parser support though) + Include a version class, org.apache.poi.Version, to allow easy introspection of the POI version + Allow the cloning of one HSSFCellStyle onto another, including cloning styles from one HSSFWorkbook onto another + finished support for special comparison operators in COUNTIF + Avoid generating multiple NamedRanges with the same name, which Excel dislikes + Fix cell.getRichStringCellValue() for formula cells with string results + Handle more excel number formatting rules in FormatTrackingHSSFListener / XLS2CSVmra + Improve the performance of HSSFSheet.shiftRows + Fixed bug when last row removed from sheet is row zero + Tweaks to RVA formula logic + Fixed recognition of named ranges within formulas + Fix HSSFWorkbook to give you the same HSSFFont every time, and then fix it to find newly added fonts + Fix HSSFColor.getTripletHash() + Fixed formula parser to handle dots in identifiers + Improvement for HWPF Range.replaceText() + Further fix for HWPF Range.delete() and unicode characters + Support for variable length operands in org.apache.poi.hwpf.sprm.SprmOperation + Avoid spurious missing lines with the MissingRecordAware event code, and odd files that contain RowRecords in the middle of the cell Records + Support for parsing formulas during EventUserModel processing, via the new EventWorkbookBuilder + + + + + Fixed re-serialization of tRefErr3d and tAreaErr3d + Removed incorrect shared formula conversion in CFRuleRecord + Improved HWPF Range.replaceText() + Fixed HSSFPicture.resize() to properly resize pictures if the underlying columns/rows have modified size + Support custom image renderers in HSLF + Correctly increment the reference count of a blip when a picture is inserted + Fixed TextShape.resizeToFitText() to properly resize TextShape + Fixed serialization of RefN~ tokens. Simplified Ptg class hierarchy + Fixed OBJ Record (5Dh) to pad the sub-record data to a 4-byte boundary + Fixed Sheet to always enforce RowRecordsAggregate before ValueRecordsAggregate + Fixed SharedFormulaRecord.convertSharedFormulas() to propagate token operand classes + Correctly detect date formats like [Black]YYYY as being date based + Improved token class transformation during formula parsing + Improved handling of HSSFObjectData, especially for entries with data held not in POIFS + Support for getting excel cell comments when extracting text + Extend the support for specifying a policy to HSSF on missing / blank cells when fetching, to be able to specify the policy at the HSSFWorkbook level + improved FormulaParser parse error messages + allowed EXTERNALBOOK(0x01AE) to be optional in the LinkTable + fixed sheet encoding size mismatch problems + Support embedded HDGF visio documents + Partial fix for HWPF Range.insertBefore() and Range.delete() with unicode characters + Support for AM/PM in excel date formats + Support for specifying a policy to HSSF on missing / blank cells when fetching + Partial support for extracting Escher images from HWPF files + Avoid an infinite loop when reading some HWPF pictures + Correctly handle short last blocks in POIFS + + + + + fixed reading/writing of AttrPtg(type=choose) and method toFormulaString() for CHOOSE formulas + added HSSFName.isDeleted() to check if the name points to cell that no longer exists + fixed selected/active sheet after removing sheet from workbook + fixed workbook sheet selection and focus + Fixed NPE in ListLevel when numberText is null + Properly update TextSpecInfoAtom when the parent text is changed + fixed HSSFSheet to properly read xls files without ROW records + fixed HSSFFormulaEvaluator.evaluateInCell() and Area3DEval.getValue() also added validation for number of elements in AreaEvals + fixed LabelRecord to use empty string instead of null when the length is zero + fixed ArrayPtg to use ConstantValueParser. Fixed a few other ArrayPtg encoding issues + Follow-on from 28754 - StringPtg.toFormulaString() should escape double quotes + Improved error handling in HSSFWorkbook when attempting to read a BIFF5 file + Parameter operand classes (function metadata) required to encode SUM() etc properly. Added parse validation for number of parameters + allow Ptg.writeBytes() to be called on relative ref Ptgs (RefN* and AreaN*) + Fix/suppress warning message "WARN. Unread n bytes of record 0xNN" + made HSSFWorkbook.getSheet(String) case insensitive + Correctly process PICT metafile in EscherMetafileBlip + Take into account indentation in HSSFSheet.autoSizeColumn + + + + + Avoid OOM on unknown escher records when EscherMetafileBlip is incorrect + Support for getting embedded sounds from slide show + Initial support for rendering slides into images + Support for getting OLE object data from slide show + Implemented more methods in PPGraphics2D + Added Freeform shape which can contain both lines and Bezier curves + Improved text extraction in HSLF + Conditional Formatting - improved API, added HSSFSheetConditionalFormatting + Update the formula parser code to use a HSSFWorkbook, rather than the low level model.Workbook, to make things cleaner and make supporting XSSF formulas in future much easier + Fix the logger used by POIFSFileSystem, so that commons-logging isn't required when not used + Update HSLFSlideShow and HSSFWorkbook to take advantage of POIFS updates, and allow reading embedded documents + Improve how POIFS works with directory entries, and update HWPFDocument to support reading an embedded word document + Initial support for getting and changing chart and series titles + Implement a proxy HSSFListener which tracks the format records, and lets you lookup the format string for a given cell. Convert the xls to csv example to use it + fixed encode/decode problems in ExternalNameRecord and CRNRecord + Fix how HDGF deals with trailing data in the list of chunk headers + More work on Conditional Formatting + refactored all junits' usage of HSSF.testdata.path to one place + Small fixes for conditional formatting (regions with max row/col index) + HPSF: Support for property sets without sections + Implement Sheet.removeShape(Shape shape) in HSLF + Various fixes: Recognising var-arg built-in functions #, ExternalNameRecord serialisation bug #, PMT() bug # + More work on Conditional Formatting + Move the Formula Evaluator code out of scratchpad + Move the missing record aware eventusermodel code out of scratchpad + Improved handling of Pictures in Word Documents + Fix formula parsing of RefVPtg, which was causing #VALUE to be shown on subsequent edits + Improve the thread safety of POILogFactory + Initial support for Conditional Formatting + Handle leading spaces in formulas, such as '= 4' + Support for PercentPtg in the formula evaluator + Support calculated string values for evaluated formulas + Add accessors to horizontal and vertical alignment in HSSFTextbox + Improved handling of short DVRecords + Fix Range.delete() in HWPF + Support for area references in formulas of rows >= 32768 + Improved support for detecting read-only recommended files + Correctly update the internal last cell number when adding and removing cells (previously sometimes off-by-one) + Added initial support for recognising external functions like YEARFRAC and ISEVEN (using NameXPtg), via LinkTable support + Improvements to FormulaParser - operators, precedence, error literals, quotes in string literals, range checking on IntPtg, formulas with extra un-parsed stuff at the end, improved parse error handling + Fixed number conversion inconsistencies in many functions, and improved RefEval + Added initial support for recognising external functions like YEARFRAC and ISEVEN (using NameXPtg), via LinkTable support + Improvements to FormulaParser - operators, precedence, error literals, quotes in string literals, range checking on IntPtg, formulas with extra un-parsed stuff at the end, improved parse error handling + Fixed number conversion inconsistencies in many functions, and improved RefEval + Fix formula evaluation with evaluateInCell on boolean formulas + Fix how DVALRecord works with dropdowns + Handle named cell ranges in formulas that have lower case parts + Don't have the new-style "HPSF properties are always available" affect the old-style use of HPSF alongside HSSF + Crystal Reports generates files with short StyleRecords, which isn't allowed in the spec. Work around this + Handle named cell ranges in formulas that have lower case parts + Don't have the new-style "HPSF properties are always available" affect the old-style use of HPSF alongside HSSF + Crystal Reports generates files with short StyleRecords, which isn't allowed in the spec. Work around this + Support for Lookup, HLookup and VLookup functions + Avoid getting confused when two sheets have shared formulas for the same areas, and when the shared formula is set incorrectly + InputStreams passed to POIFSFileSystem are now automatically closed. A warning is generated for people who might've relied on them not being closed before, and a wrapper to restore the old behaviour is supplied + Support for the Offset function + Have HSSFPalette.findSimilar() work properly + Fix the contrib SViewer / SViewerPanel to not fail on sheets with missing rows + Further support for unusual, but valid, arguments to the Mid function + Support for whole-column ranges, such as C:C, in formula strings and the formula evaluator + Update Match function to properly support Area references + Improved handling of references for the need to quote the sheet name for some formulas, but not when fetching a sheet by name + Fix for circular references in INDEX, OFFSET, VLOOKUP formulas, where a cell is actually allowed to reference itself + Fix for Mid function handling its arguments wrong + Support for Match, NA and SumProduct functions, as well as initial function error support + Cope with a broken dictionary in Document Summary Information stream. RuntimeExceptions that occured when trying to read bogus data are now caught. Dictionary entries up to but not including the bogus one are preserved, the rest is + ignored + Handle timezones better with cell.setCellValue(Calendar), so now 20:00-03:00, 20:00+00:00 and 20:00+03:00 will all be recorded as 20:00, and not 17:00 / 20:00 / 23:00 (pass a Date not a Calendar for old behaviour) + Have HSSFDateUtil.isADateFormat recognize more formats as being dates + Support for Excel hyperlinks + Implement hashCode() and equals(obj) on HSSFFont and HSSFCellStyle + Implement CountA, CountIf, Index, Rows and Columns functions + Properly escape sheet names as required when figuring out the text of formulas + Improvements to how SystemOutLogger and CommonsLogger log messages with exceptions, and avoid an infinite loop with certain log messages with exceptions + Support for a completed Record based "pull" stream, via org.apache.poi.hssf.eventusermodel.HSSFRecordStream, to complement the existing "push" Event User Model listener stuff + + + + + IntPtg must operate with unsigned short. Reading signed short results in incorrect formula calculation + Fix for reading slide background images + Avoid swapping AreaPtgs from relative to absolute + Correctly process the last paragraph in a word file + Avoid some unread byte warnings, and properly understand DVALRecord + Add another formula evaluation method, evaluateFormulaCell(cell), which will re-calculate the value for a formula, without affecting the formula itself + Fix how we handle signed cell offsets in relative areas and references + Support for getting and setting a flag on the sheet, which tells excel to re-calculate all formulas on it at next reload + Enable cloning of sheets with data validation rules + Enable cloning of sheets with notes + Add a moveCell method to HSSFRow, and deprecate setCellNum(), which didn't update things properly + Support setting row grouping on files from CR IX, which lack GutsRecords + Support cloning of sheets with certain drawing objects on them + Don't consider merged regions when auto-sizing columns + Avoid "Expected ExpPtg to be converted from Shared to Non-Shared Formula" on large, formula heavy worksheets + Add support for named ranges with unicode names + When shifting rows, update formulas on that sheet to point to the new location of those rows + Support getting all the cells referenced by an AreaReference, not just the corner ones + Add support for named ranges in formulas, including non-contiguous named ranges + Add support for hiding and un-hiding sheets, and checking their current hidden status + Fix for non-contiguous named ranges + Fix for shifting comments when shifting rows + + + + + Support for tables in HSLF + Fix for extracting text from TextBoxes HSLF in + Improve JavaDocs relating to hssf font and fill colourings + Support for Mid, Replace and Substitute excel functions + Support for getting the from field from HSMF messages + Support for 1904 date windowing in HSSF (previously only supported 1900 date windowing) + Support for String continue records + Support for data validation, via DVRecord and DVALRecord + + + + + Fix for handling mixed OBJ and CONTINUE records + Fix for handling mixed OBJ and CONTINUE records + Support for unicode NameRecords + Throw an IllegalArgumentException if asked to create a merged region with invalid columns or rows, rather than writing out a corrupt file + Support for unicode NameRecords + Support for Chart Title Format records + Fix for BOF records from things like Access + Fix for IntPtg and short vs int + Fix for handling rotated text in HSSFSheet.autoSizeColumn + Include an Excel text extractor, and put all existing text extractors under a common superclass + Improvements to the LZW compression engine used by HDGF + HSSFPicture.resize() - a handy method to reset a picture to its original width and height + Add a getSheetIndex(HSSFSheet) method to HSSFWorkbook, and allow a HSSFSheet to get at its parent HSSFWorkbook + Move POIDocument out of Scratchpad, and update HSSFWorkbook to use it + Fix for Cell References for rows > 32678 + Improved Formula Parser support for numbers and ranges + When writing HSLF files out, optionally preserve all OLE2 nodes (default is just the HSLF related nodes) + Support for adding Pictures to ShapeGroups in HSLF + Support for getting OLE object data from HSSFWorkbook + Support for getting OLE object data from slideshows + Support for reading EMF, WMF and PICT images via HSSFWorkbook.getAllPictures() + Fix for reading files with long cell comments and text boxes + Fix for the EventUserModel and records that aren't immediately followed by their ContinueRecords + Fix for saving Crystal Reports xls files when preserving nodes + Fix for Escher layer handling of embedded OLE2 documents + Where permissions deny fetching System Properties, use sensible defaults + Fix formula evaluator support for Area3D references to other sheets + Improvements to HSSFDateUtils.isADateFormat, and have HSSFDateUtil.isCellDateFormatted use this + Fix for HSSFPatriarch positioning problems + Support for write-protecting a HSSF workbook + Support for querying, setting and un-setting protection on sheets in a HSSF workbook + Initial HSMF (outlook) support + Tidy up the javadocs + + + + + + Administrative updates to the Maven POMs, and the release artifact build process + Fix for HSSF setSheetOrder and tab names + Better HSLF support for problem shape groups + Better HSLF support for corrupt picture records + Initial support for a "missing record aware" HSSF event model + Additional HSLF support for Title and Slide Master Sheets + Improved HSLF note to slide matching, and a NPE + Tweak some HSLF exceptions, to make it clearer what you're catching + Fix for HSLF writing of files with tables + Improved way of detecting HSSF cells that contain dates, isADateFormat + Initial, read-only support for Visio documents, as HDGF + + + + + + Fix POM for Maven users + Add createPicture to HSSFShapeGroup + Detect Office 2007 XML documents, and throw a meaningful exception + Additional HSLF support for PowerPoint + Initial support for HWPF image extraction + + + + + + Additional HSLF support for PowerPoint + + + + + + HSSF Formula support + Additional HSLF support for PowerPoint + Extended Ascii support for WingDings + + + + + + Bugzilla Bug 29976 HSSF hyperlink formula size problem + Image writing support + HSLF - Initial PowerPoint Support. Includes: Support for text extraction across the whole file; Support for getting individual slides, and their notes, and extracting text from those; Initial support for changing (but not adding) text + + + +
diff --git a/src/documentation/content/xdocs/devel/history/changes-pre3x.xml b/src/documentation/content/xdocs/devel/history/changes-pre3x.xml new file mode 100644 index 0000000000..2068fcbb15 --- /dev/null +++ b/src/documentation/content/xdocs/devel/history/changes-pre3x.xml @@ -0,0 +1,326 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Current releases +

The change log for the current release can be found in the home section.

+
+ + + + + Outlining support + HSSFDateUtil.getExcelDate() is one hour off when DST changes + wrong lastrow entry + Unable to open read-write excel file including forms + + + + + + Add support for the Escher file format + java.lang.IndexOutOfBoundsException during Workbook.cloneSheet() + + + + + + No changes + + + + + + HSSFCell.getStringCellValue() on cell which has string formula will return swap bye unicode characters + Updated website for upcoming release + Formula Parser fixes with tests, by Peter M Murray Bug 25457 + Fixed cloning merge regions + The cloned reference for merged cells did not create a new collection, so deletes cascaded to the original + Call to getCustomPalette() from a newly created workbook now works + Some compilation got ambiguous classes. Explicitly imports the classes. Patch supplied by Jean-Pierre Paris + + + + + + HSSFWorkbook throws Exceptions + values dont get copied to another sheet + Exception thrown when cell has =Names call + Error Reading Formula Record (optimized if, external link) + Sheet name cannot exceed 31 characters and cannot contain : + Error reading FormulaRecord + Name in Formula - ArrayOutOfBoundsException + ArrayIndexoutofbounds Exception. POI - Version 1.8 + Unable to open written spreadsheet in Excel, but can in Open + testCustomPalette.xls crashes Excel 97 + testBoolErr.xls crashes Excel '97 + HSSFFont - BOLDWEIGHT_NORMAL + The sheet made by HSSFWorkbook#cloneSheet() doesn't work cor + [RFE]Refactor the transformation between byte array a + java.lang.IllegalArgumentException + Sheet.getColumnWidth() returns wrong value + Can not modify a blank spreadsheet + Macro functions + [RFE]String Formula Cells + Documentation changes for @(Greater|Less|Not)EqualPt + build.xml fixes + [RFE] Support for Storage Class ID + Failed to create HSSFWorkbook! + HSSFSheet.shiftRows() throws java.lang.IndexOutOfBoundsExcep + org.apache.poi.hpsf.SummaryInformation.getEditTime() should + Error passing inputstream to POIFSFileSystem + Add a ProtectRecord to Sheets and give control over + DBCELL, INDEX EXTSST (was Acess 97 import) + [RFE] POIFS, RawDataBlock: Missing workaround for lo + Unable to modify empty sheets + Make POI handle chinese better + [RFE] creating a cell with a hyperlink + Post 1.5.1 POI causes spreadsheet to become unopenable + + + + + + HPSF is now able to read properties which are given in the property set stream but which don't have a value ("variant" type VT_EMPTY). The getXXX() methods of the PropertySet class return null if their return type is a reference (like a string) or 0 + if the return type is numeric. Details about the return types and about how to distinguish between a property value of zero and a property value that is not present can be found in the API documentation + Gridlines can now be turned on and off + NamePTG refactoring/fixes + minor fixes to ExternSheet and formula strings + Sheet comparisons now ignore case + + + + + + A nasty concurrency problem has been fixed. Any users working in a multithreaded environment should seriously consider upgrading to this release + The EXTSST record has been implemented. This record is used by excel for optimized reading of strings + When rows are shifted, the merged regions now move with them. If a row contains 2 merged cells, the resulting shifted row should have those cells merged as well + There were some issues when removing merged + regions (specifically, removing all of them and then adding some more) and have been resolved. + + When a sheet contained shared formulas (when a formula is + dragged across greater than 6 cells), the clone would fail. We now support cloning of + sheets that contain this Excel optimization. + + Support added for reading formulas with UnaryPlus and UnaryMinus operators + + + + + Patch applied for deep cloning of worksheets was provided + Patch applied to allow sheet reordering + Added additional print area setting methods using row/column numbers + Negative Array size fix + Added argument pointers to support the IF formula + Formulas: Added special character support for string literals, specifically for SUMIF formula support and addresses a bug as well + BlockingInputStream committed to help ensure reads + Fixed problem with NaN values differing from the investigated value from file reads in FormulaRecords + Patch for getColumnWidth in HSSF + Patch for dealing with mult-level numbered lists in HDF + Due to named reference work, several named-ranged bugs were closed + Patch applied to prevent sheet corruption after a template modification + Shared Formulas now Supported + Added GreaterEqual, LessEqual and NotEqual to Formula Parser + Added GreaterThan and LessThan functionality to formulas + Patches for i10n + POI Build System Updated + font names can now be null + + + + + Support for zoom level + Freeze and split pane support + Row and column headers on printouts + + + + + Custom Data Format Support + Enhanced Unicode Support for Russian and Japanese + Enhanced formula support including read-only for + "optimized if" statements. + + Support for cloning objects + Fixes for header/footer + Spanish Documentation translations + Support for preserving VBA macros + + + + + Removed runtime dependency on commons logging + Formula support + + + + + Removed depedency on commons logging. Now define poi.logging system property to enable logging to standard out + Fixed SST string handling so that spreadsheets with rich text or extended text will be read correctly + + + + + New project build + New project documentation system based on Cocoon + Package rename + Various bug fixes + Early stages of HSSF development (not ready for development) + Initial low level record support for charting (not complete) + + + + + Changes not recorded + + + + + Created new event model + Optimizations made to HSSF including aggregate records for values, rows, etc. + predictive sizing, offset based writing (instead of lots of array copies) + minor re-factoring and bug fixes + + + + + Changes not recorded + + + + + Changes not recorded + + + + + Minor documentation updates + + + + + Added DataFormat helper class and exposed set and get format on HSSFCellStyle + Fixed column width apis (unit wise) and various javadoc on the subject + Fix for Dimensions record (again)... (one of these days I'll write a unit test for this ;-p). + Some optimization on sheet creation + + + + + Changes not recorded + + + + + Added MulBlank, Blank, ColInfo + Added log4j facility and removed all sys.out type logging + Added support for adding font's, styles and corresponding high level api for styling cells + added support for changing row height, cell width and default row height/cell width. + Added fixes for internationalization (UTF-16 should work now from HSSFCell.setStringValue, etc when the encoding is set) + added support for adding/removing and naming sheets + + + + + Bugfix release. We were throwing an exception when reading RKRecord objects. + + + + + Got continuation records to work (read/write) + Added various pre-support for formulas + Massive API reorganization, repackaging + Better API support for modification + + + + + Added encoding flag to high and low level api to use utf-16 + when needed (HSSFCell.setEncoding()) + + added read only support for Label records (which are + reinterpreted as LabelSST when written) + + Broken continuation record implementation (oops) + BiffViewer class added for validating POI and/or HSSF Output. + + + + + Support for read/write and modify + Read only support for MulRK records (converted to Number when writing) + + + + + Changes not recorded + + + + + Changes not recorded + + + + + Changes not recorded + + + + + Changes not recorded + + + + + First ever public release + + + +
diff --git a/src/documentation/content/xdocs/devel/history/index.xml b/src/documentation/content/xdocs/devel/history/index.xml new file mode 100644 index 0000000000..e3b31b83d5 --- /dev/null +++ b/src/documentation/content/xdocs/devel/history/index.xml @@ -0,0 +1,163 @@ + + + + + +
+ Apache POI™ - Project History + + + +
+ + + +
Apache POI™ - The name +

Refer to the explanation on Wikipedia + for some folklore about how the name "POI" came into existence. +

+
+ +
Apache POI™ - Brief Project History + +

The POI project was dreamed up back around April 2001, when + Andrew Oliver landed a short term contract to do Java-based + reporting to Excel. He'd done this project a few times before + and knew right where to look for the tools he needed. + Ironically, the API he used to use had skyrocketed from around + $300 ($US) to around $10K ($US). He figured it would take two + people around six months to write an Excel port so he + recommended the client fork out the $10K. +

+ +

Around June 2001, Andrew started thinking how great it would + be to have an open source Java tool to do this and, while he + had some spare time, he started on the project and learned + about OLE 2 Compound Document Format. After hitting some real + stumpers he realized he'd need help. He posted a message to + his local Java User's Group (JUG) and asked if anyone else + would be interested. He lucked out and the most talented Java + programmer he'd ever met, Marc Johnson, joined the project. He + ran rings around Andrew at porting OLE 2 CDF and rewrote his + skeletal code into a more sophisticated library. It took Marc + a few iterations to get something they were happy with. +

+ +

While Marc worked on that, Andrew ported XLS to Java, based + on Marc's library. Several users wrote in asking to read XLS + (not just write as had originally been planned) and one user + had special requests for a different use for POIFS. Before + long, the project scope had tripled. POI 1.0 was released a + month later than planned, but with far more features. Marc + quickly wrote the serializer framework and HSSF Serializer in + record time and Andrew banged out more documentation and worked + on making people aware of the project +

+ +

Shortly before the release, POI was fortunate to come into + contact with Nicola -Ken- Barrozzi who gave them samples for + the HSSF Serializer and help uncover its unfortunate bugs + (which were promptly fixed). More recently, Ken ported most + of the POI project documentation to XML from Andrew's crappy + HTML docs he wrote with Star Office. +

+ +

Around the same time as the release, Glen Stampoultzis + joined the project. Glen was ticked off at Andrew's flippant attitude + towards adding graphing to HSSF. Glen got so ticked off he decided to + grab a hammer and do it himself. Glen has already become an integral + part of the POI development community; his contributions to HSSF have + already started making waves. +

+ +

Somewhere in there we decided to finally submit the project + to The Apache + Cocoon Project, only to discover the project had + outgrown fitting nicely into just Cocoon long ago. + Furthermore, Andrew started eyeing other projects he'd like to + see POI functionality added to. So it was decided to donate + the Serializers and Generators to Cocoon, other POI + integration components to other projects, and the POI APIs + would become part of Jakarta. It was a bumpy road but it + looks like everything turned out since you're reading this! +

+ +

In Early 2007, we graduated from + Jakarta, and became + our own Top Level Project (TLP) within Apache.

+
+ + + + +
+ + Copyright (c) @year@ The Apache Software Foundation All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+ + +
diff --git a/src/documentation/content/xdocs/devel/index.xml b/src/documentation/content/xdocs/devel/index.xml new file mode 100644 index 0000000000..4470dd4cfc --- /dev/null +++ b/src/documentation/content/xdocs/devel/index.xml @@ -0,0 +1,168 @@ + + + + + +
+ Apache POI™ - How To Build + + + + + +
+ +
+ JDK Version +

+ POI 4.0 and later require JDK version 1.8 or later. JDK version 11 is required to compile module support. +

+

+ POI 3.11 and later 3.x versions require JDK version 1.6 or later. +

+

+ POI 3.5 to 3.10 required the JDK version 1.5 or later. + Versions prior to 3.5 required JDK 1.4+. +

+
+
+ Install Apache Forrest +

+ The POI build system requires + Apache Forrest + to build the documentation. +

+

+ Specifically, the build has been tested to work with Forrest 0.9. When building with Forrest, + it is recommended to use Java 8. +

+

+ Remember to set the FORREST_HOME environment variable. +

+
+
+ Building Targets with Gradle +

+ The main Apache POI build was traditionally done with Apache Ant. + In 2021, we moved to using Gradle. + After checking out the POI code, you will find gradlew and + gradlew.bat. These command files are used for running Gradle on Linux/Mac and Windows respectively. + Gradlew checks if you the right version of Gradle installed and will install it if you don't. +

+

+ Note that our source releases no longer contain gradlew or gradlew.bat. You can install the Gradle tool + yourself and use it to build POI. +

+

+ The main targets of interest to our users are: +

+ + + + + + + + + + + + + + + + + + + + + +
Gradle TargetDescription
cleanErase all build work products (ie. everything in the + build directory
testRun all unit tests from main, ooxml and scratchpad
jarProduce jar files
jenkins + Runs the tests which Jenkins, our Continuous Integration system, does. This includes the unit tests and various code quality checks. + Also, packages up the jars and build distributions. +
+

+ To run the tests from just one test class, use a command like: +

+

+ ./gradlew poi-ooxml:test --tests *TestXSSFBugs +

+

+ gradlew poi-ooxml:test --tests *TestXSSFBugs +

+

+ The example command runs tests in the poi-ooxml sub-project that match the name '*TestXSSFBugs'. + The '*' wildcard is useful to avoid typing the full Java package name. +

+
+
+ Working with Eclipse +

+ Apache POI no longer includes a pre-defined Eclipse project file. When importing the POI project, + your IDE should recognise that there is Gradle support and offer to do the build using that. +

+

+ First make sure that Java is set up properly and that you can execute the 'javac' executable in your shell. +

+

+ Next, open Eclipse and create either a local SVN repository, or a copy of the Git repository, + and import the project into Eclipse. +

+

+ Note: when executing junit tests from within Eclipse, you might need to set the system + property "POI.testdata.path" to the actual location of the 'test-data' directory to make + the test framework find the required test-files. A simple value of 'test-data' usually works. +

+
+
+ Working with IntelliJ Idea +

+ Import the Gradle project into your IDE. Execute a build to get all the dependencies and generated code + in place. +

+

+ Note: when executing junit tests from within IntelliJ, you might need to set the system + property "POI.testdata.path" to the actual location of the 'test-data' directory to make + the test framework find the required test-files. A simple value of 'test-data' usually works. +

+
+
+ Setting environment variables +

Linux: + help.ubuntu.com, + unix.stackexchange.com +

+

Windows: + en.wikipedia.org +

+
+ +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
+ + diff --git a/src/documentation/content/xdocs/devel/nightly.xml b/src/documentation/content/xdocs/devel/nightly.xml new file mode 100644 index 0000000000..cbc29e2cc4 --- /dev/null +++ b/src/documentation/content/xdocs/devel/nightly.xml @@ -0,0 +1,57 @@ + + + + + +
+ Apache POI™ - Nightly Builds +
+ +
+ Nightly Builds +

The POI nightly builds are run on the Jenkins + continuous integration server.
+ These builds should not be used in production: they are mostly intended for use by + developers to help with resolving bugs and evaluating new features or users who want to try out the + latest version. +

+ +
+ +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
+ + diff --git a/src/documentation/content/xdocs/devel/plan/index.xml b/src/documentation/content/xdocs/devel/plan/index.xml new file mode 100644 index 0000000000..f68075670e --- /dev/null +++ b/src/documentation/content/xdocs/devel/plan/index.xml @@ -0,0 +1,74 @@ + + + + + +
+ Planning Documentation + Overview + + + + +
+ + +
Overview + +

This is a collection of notes to assist with long-term planning and + development. +

+ +

There is much discussion of issues and research topics (RT) threads on + the dev mailing list (and elsewhere). However, details + get lost in the sheer volume. This is the place to document the summary of + discussions on some key topics. Some new and complex capabilities will take + lots of design and specification before they can be implemented. +

+ +

Another use for this collection of notes is as a place to quickly store + a snippet from an email discussion or even a link to a discussion thread. + The concepts can then be fleshed-out over time. +

+ +

Anyone can participate in this process. Please get involved in discussion + on dev and contribute patches for these summary planning + documents via the normal contribution + process. +

+ +

These planning documents are intended to be concise notes only. They are + also ever-evolving, because as issues are addressed these notes will be + revised. +

+
+ +
Topics and Issues + + +
+ + +
diff --git a/src/documentation/content/xdocs/devel/plan/vision10.xml b/src/documentation/content/xdocs/devel/plan/vision10.xml new file mode 100644 index 0000000000..40c9a791b1 --- /dev/null +++ b/src/documentation/content/xdocs/devel/plan/vision10.xml @@ -0,0 +1,521 @@ + + + + + +
+ POI 1.0 Vision Document + + + + +
+ + + +
Preface +

+ (21-Jan-02) While this document is just full of useful project + introductory information and I do suggest those interested in getting + involved in the project read it, it is woefully out of date. +

+

+ We deliberately allowed this document to run out of date because it + is a good reflection of what the original vision was for POI 1.0. + You'll note that some of the terminology is not used in quite the same + way any longer. I've made some minor corrections where reading this + confused me. An example: in some places this document may refer to + POI API instead of POIFS API. When this vision was written we had + an incomplete understanding of the project. +

+

+ Lastly, the scope of the project expanded dramatically near the end + of the 1.0 cycle. Our vision at the time was to focus merely on the + Excel port (having no idea how the project would grow or be received) + and provide the OLE 2 Compound Document port for others to port later + formats. We now plan to spearhead these ports under the umbrella of + the POI project. So, you've been warned. Read on, but just realize + that we had a fuzzy view of things to come, and hindsight is 20-20. +

+

+ If I recall major holes were: a complete understanding of the format + of OLE 2 Compound Document format, Excel file format, and exactly how + Cocoon 2 Serializers worked. (that just about covers the whole range + huh?) +

+
+ +
1. Introduction +
1.1 Purpose of this document +

+ The purpose of this document is to + collect, analyze and define high-level requirements, user needs and + features of the HSSF Serializer for Cocoon 2 and related libraries. + The HSSF Serializer is a java class supporting the Serializer + interface from the Cocoon 2 project and outputting in a compatible + format of that used by the spreadsheet program Microsoft Excel '97. + The HSSF Serializer will be responsible for converting XML + spreadsheet-like documents into Excel-compatible XLS spreadsheets. +

+
+ + +
1.2 Project Overview +

+ Many web apps today hit a brick wall + when it comes to the user request that they be able to easily + manipulate their reports and data extracts in the popular Microsoft + Excel spreadsheet format. This often causes inferior technologies to be + chosen for the project simply because they easily support this + format. This project seeks to extend existing XML, Java and Apache + Cocoon 2 project technologies by: +

+ +
    +
  • + providing an extensible library + (POIFS) which reads/writes in a compatible format to OLE 2 Compound + Document Format (aka Structured Storage Format) for easy + implementation of other document types; +
  • +
  • + providing a library (HSSF) for + manipulating spreadsheet data and outputting it in a compatible + format to Microsoft Excel XLS format; +
  • +
  • + and providing a Cocoon 2 + Serializer (HSSFSerializer) for serializing XML documents as + Excel-compatible spreadsheets. +
  • +
+ +
+
+
2. User Description +
2.1 User/Market Demographics +

+ There are a number of enthusiastic + users of XML, UNIX and Java technology. Secondly, the Microsoft + solution for outputting Office Document formats often involves + actually manipulating the software as an OLE Server. This method + provides extremely low performance, extremely high overhead and is + only capable of handling one document at a time. +

+
    +
  1. + Our intended audience for the HSSF + Serializer portion of this project are developers writing reports or + data extracts in XML format. +
  2. +
  3. + Our intended audience for the HSSF + library portion of this project is ourselves as we are developing + the Serializer and anyone who needs to write to Excel spreadsheets + in a non-XML Java environment or who has specific needs not + addressed by the Serializer. +
  4. +
  5. + Our intended audience for the + "POIFS" OLE 2 Compound Document format reader/writer is + ourselves as we are writing the HSSF library and secondly, anyone + wishing to provide other libraries for reading/writing OLE 2 + Compound Document Format in Java. +
  6. +
+
+
2.2. User environment +

+ The users of this software shall be + developers in a Java environment on any Operating System or power + users who are capable of XML document generation/deployment. +

+
+
2.3. Key User Needs +

+ The OLE 2 Compound Document format is + undocumented for all practical purposes and cryptic for all + impractical purposes. Developer needs in this area include + documentation and an easy to use library for reading and writing in + this format without requiring the developer to have intimate + knowledge of the format. +

+

+ There is currently no good way to write + to Microsoft Excel documents from Java or from a non-Microsoft + Windows based platform for that matter. Developers need an easy to + use library that supports a reasonable feature set and allows + separation of data from formatting/stylistic concerns. +

+

+ There is currently no good way to + transform XML data to Microsoft Excel. Apache's Cocoon 2 project + supplies a complete framework for XML, but nothing for outputting in + Excel's XLS format. Developers and power users alike need a simple + method to output XML documents to Excel through server-side + processing. +

+ + +
+
+
3. Project Overview +
3.1. Project Perspective +

+ The produced code shall be licensed by + the Apache License as used by the Cocoon 2 project and maintained on + a project page until such time as the Cocoon 2 developers accept it + as a donation (at which time the copyright will be turned over to + them). +

+
+
3.2. Project Position Statement +

+ For developers on a Java and/or XML + environment this project will provide all the tools necessary for + outputting XML data in the Microsoft Excel format. This project seeks + to make the use of Microsoft Windows based servers unnecessary for + file format considerations and to fully document the OLE 2 Compound + Document format. The project aims not only to provide the tools for + serializing XML to Excel's file format and the tools for writing to + that file format from Java, but also to provide the tools for later + projects to convert other OLE 2 Compound Document formats to pure + Java APIs. +

+
+
3.3. Summary of Capabilities +

+ HSSF Serializer for Apache Cocoon 2 +

+ + + + + + + + + + + + + + + + + + + + + +
+ Benefit + + Supporting Features +
+ Standard XML tag language for sheet data + + Serializer will transform documents utilizing a defined tag + language +
+ Utilize XML to output in Excel + + Serializer will output in Excel +
+ Java API to output in Excel on any platform + + The project will develop an API that outputs in Excel using + pure Java. +
+ Make it easy for developers to port other OLE 2 Compound + Document-based formats to Java. + + The POIFS library will contain both a high-level abstraction + along with low-level constructs. The project will fully document + the OLE 2 Compound Document Format. +
+
+
3.4. Assumptions and Dependencies +
    +
  • + The HSSF Serializer will run on + any Java 2 supporting platform with Apache Cocoon 2 installed along + with the HSSF and POIFS APIs. +
  • +
  • + The HSSF API requires a Java 2 + implementation and the POI API. +
  • +
  • + The POIFS API requires a Java 2 + implementation. +
  • +
+
+
+
4. Project Features +

+ The POIFS API will include: +

+
    +
  • + Low level structures representing + the structures in a POI filesystems. +
  • +
  • + A low-level API for + creating/manipulating POI filesystems. +
  • +
  • + A set of high level interfaces + abstracting the user from the POI filesystem constructs and + representing it as a standard filesystem (Files, directories, etc) +
  • +
+

+ The HSSF API will include: +

+
    +
  • + Low level structures representing + the structures in an Excel file. +
  • +
  • + A low-level API for creating and + manipulating Excel files and writing them into POI filesystems. +
  • +
  • + A high level model and style + interface for manipulating spreadsheet data without knowing anything + about the Excel format itself. +
  • +
+
4.1 POI Filesystem API +

+ The POI Filesystem API includes: +

+
    +
  • An implementation of Big Blocks
  • +
  • An implementation of Small Blocks
  • +
  • An implementation of Header Blocks
  • +
  • An implementation of Block Allocation Tables
  • +
  • An implementation of Property Sets
  • +
  • An implementation of the POI + filesystem including functions to get and set the above constructs; + compound functions for reading/writing files/directories. +
  • +
  • An abstraction of the POI + filesystem providing interfaces representing Files, Directories, + FileSystems in normal terminology and encapulating the above + constructs. +
  • +
  • Full documentation of the POI file + format. +
  • +
  • Full documentation of the APIs and + interfaces provided through Javadoc, user documentation (aimed at + developers using the APIs) +
  • +
  • Examples aimed at teaching the + user to write code using POI. (titled: recipes for POI) +
  • +
  • Performance specifications. + (Example POI filesystems rated by some measure of complexity along + with system specifications and execution times for given operations) +
  • +
+
+
4.2 HSSF API +

+ The HSSF API includes: +

+
    +
  • An implementation of Record + (binary 2 byte type followed by 2 byte size (n) followed by n bytes)
  • +
  • Implementations of many standard + record types mapping the data bytes to fields along with methods to + reserialize those fields
  • +
  • An implementation of the HSSF File + including functions to get/set the above constructs, create a blank + file with the minimum required record types and mappings between + getting/setting data and style in a workbook to the creation of + record types, and read HSSF files.
  • +
  • An abstraction of the HSSF file + format providing interfaces representing the HSSF File, HSSF + Workbook, HSSF Sheet, HSSF Column, HSSF Formulas in a manner + separating the data from the styling and encapsulating the above + constructs.
  • +
  • Full documentation of the HSSF + file format (which will be a subset of the Excel '97 File format). + This must be done with care for legal reasons.
  • +
  • Full documentation of the APIs and + interfaces provided through Javadoc, user documentation (aimed at + developers using the APIs).
  • +
  • Examples aimed at teaching + developers to use the APIs. +
  • +
  • Performance specifications. + (Example files rated by some measure of complexity along with system + specifications and execution times for given operations - possibly + the same files used for POI's tests)
  • +
+
+
4.3 HSSF Serializer +

+ The HSSF Serializer subproject: +

+
    +
  • A class supporting the Cocoon 2 + Serializer Interface.
  • +
  • An interface between the SAX + events and the HSSF APIs.
  • +
  • A specified tag language for using + with the Serializer.
  • +
  • Documentation on the tag language + for the HSSF Serializer
  • +
  • Normal javadocs.
  • +
  • Example XML files
  • +
  • Performance specifications. + (Example XML docs and stylesheets rated by some measure of + complexity along with system specifications and execution times)
  • +
+
+
+
5. Other Product Requirements +
5.1. Applicable Standards +

+ All Java code will be 100% pure Java. +

+
+
5.2. System Requirements +

+ The minimum system requirements for POIFS are: +

+
    +
  • 64 Mbytes memory
  • +
  • Java 2 environment
  • +
  • Pentium or better processor (or equivalent on other platforms)
  • +
+

+ The minimum system requirements for HSSF are: +

+
    +
  • 64 Mbytes memory
  • +
  • Java 2 environment
  • +
  • Pentium or better processor (or equivalent on other platforms)
  • +
  • POIFS API
  • +
+

+ The minimum system requirements for the HSSF Serializer are: +

+
    +
  • 64 Mbytes memory
  • +
  • Java 2 environment
  • +
  • Pentium or better processor (or equivalent on other platforms)
  • +
  • Cocoon 2
  • +
  • HSSF API
  • +
  • POI API
  • +
+
+
5.3. Performance Requirements +

+ All components must perform well enough + to be practical for use in a webserver environment (especially + Cocoon2/Tomcat/Apache combo) +

+
+
5.4. Environmental Requirements +

+ The software will run primarily in + developer environments. We should make some allowances for + not-highly-technical users to write XML documents for the HSSF + Serializer. All other components will assume intermediate Java 2 + knowledge. No XML knowledge will be required except for using the + HSSF Serializer. As much documentation as is practical shall be + required for all components as XML is relatively new, and the + concepts introduced for writing spreadsheets and to POI filesystems + will be brand new to Java and many Java developers. +

+
+
+
6. Documentation Requirements +
6.1 POI Filesystem +

+ The filesystem as read and written by + POI shall be fully documented and explained so that the average Java + developer can understand it. +

+
+
6.2. POI API +

+ The POI API will be fully documented + through Javadoc. A walkthrough of using the high level POI API shall + be provided. No documentation outside of the Javadoc shall be + provided for the low-level POI APIs. +

+
+
6.3. HSSF File Format +

+ The HSSF File Format as implemented by + the HSSF API will be fully documented. No documentation will be + provided for features that are not supported by HSSF API that are + supported by the Excel 97 File Format. Care will be taken not to + infringe on any "legal stuff". +

+
+
6.4. HSSF API +

+ The HSSF API will be documented by + javadoc. A walkthrough of using the high level HSSF API shall be + provided. No documentation outside of the Javadoc shall be provided + for the low level HSSF APIs. +

+
+ +
6.5. HSSF Serializer +

+ The HSSF Serializer will be documented + by javadoc. +

+
+ +
6.6 HSSF Serializer Tag language +

+ The XML tag language along with + function and usage shall be fully documented. Examples will be + provided as well. +

+
+
+
7. Terminology +
7.1 Filesystem +

+ filesystem shall refer only to the POI formatted archive. +

+
+
7.2 File +

+ file shall refer to the embedded data stream within a + POI filesystem. This will be the actual embedded document. +

+
+
+ +
diff --git a/src/documentation/content/xdocs/devel/plan/vision20.xml b/src/documentation/content/xdocs/devel/plan/vision20.xml new file mode 100644 index 0000000000..f348541880 --- /dev/null +++ b/src/documentation/content/xdocs/devel/plan/vision20.xml @@ -0,0 +1,594 @@ + + + + + +
+ POI 2.0 Vision Document + + + + + + +
+ + + +
Preface +

+ This is the POI 2.0 cycle vision document. Although the vision + has not changed and this document is certainly not out of date and + the vision has not changed, the structure of the project has + changed a bit. We're not going to change the vision document to + reflect this (however proper that may be) because it would only + involve deletion. There is no purpose in providing less + information provided we give clarification. +

+

+ This document was created before the POI components for + Apache Cocoon + were accepted into the Cocoon project itself. It was also + written before POI was accepted into Jakarta. So while the + vision hasn't changed some of the components are actually now + part of other projects. We'll still be working on them on the + same timeline roughly (minus the overhead of coordination with + other groups), but they are no longer technically part of the + POI project itself. +

+
+ +
1. Introduction +
1.1 Purpose of this document +

+ The purpose of this document is to + collect, analyze and define high-level requirements, user needs, + and features of the second release of the POI project software. + The POI project currently consists of the following components: + the HSSF Serializer, the HSSF library and the POIFS library. +

+
    +
  • + The HSSF Serializer is a set of Java classes whose main + class supports the Serializer interface from the Cocoon + 2 project and outputs the serialized data in a format + compatible with the spreadsheet program Microsoft Excel + '97. +
  • +
  • + The HSSF library is a set of classes for reading and + writing Microsoft Excel 97 file format using pure Java. +
  • +
  • + The POIFS library is a set of classes for reading and + writing Microsoft's OLE 2 Compound Document format using + pure Java. +
  • +
+

By the completion of this release cycle the POI project will also + include the HSSF Generator and the HWPF library. +

+
    +
  • The HSSF Generator will be responsible for using HSSF to read + in the XLS (Excel 97) file format and create SAX events. The HSSF + Generator will support the applicable interfaces specified by the + Apache Cocoon 2 project. +
  • +
  • The HWPF library will provide a set of high level interfaces + for reading and writing Microsoft Word 97 file format using pure + Java.
  • +
+ +
+ + +
1.2 Project Overview +

+ The first release of the POI project + was an astounding success. This release seeks to build on that + success by: +

+
    +
  • + Refactoring POIFS into input and + output classes as well as an event-driven API for reading. +
  • +
  • + Refactor HSSF for greater + performance as well as an event-driven API for reading +
  • +
  • + Extend HSSF by adding the ability to read and write formulas. +
  • +
  • + Extend HSSF by adding the ability to read and write + user-defined styles. +
  • +
  • + Create a Cocoon 2 Generator for HSSF using the same tags + as the HSSF Serializer. +
  • +
  • + Create a new library (HWPF) for reading and writing + Microsoft Word DOC format. +
  • +
  • + Refactor the HSSFSerializer into a separate extensible + POIFSSerializer and HSSFSerializer +
  • +
  • + Providing the create excel charts. (write only) +
  • +
+
+
+
2. User Description +
2.1 User/Market Demographics +

+ There are a number of enthusiastic + users of XML, UNIX and Java technology. Furthermore, the Microsoft + solution for outputting Office Document formats often involves + actually manipulating the software as an OLE Server. This method + provides extremely low performance, extremely high overhead and is + only capable of handing one document at a time. +

+
    +
  1. + Our intended audience for the HSSF + Serializer portion of this project are developers writing reports or + data extracts in XML format. +
  2. +
  3. + Our intended audience for the HSSF + library portion of this project is ourselves as we are developing + the HSSF serializer and anyone who needs to read and write Excel + spreadsheets in a non-XML Java environment, or who has specific + needs not addressed by the Serializer +
  4. +
  5. + Our intended audience for the + POIFS library is ourselves as we are developing the HSSF and HWPF + libraries and anyone wishing to provide other libraries for + reading/writing other file formats utilizing the OLE 2 Compound + Document Format in Java. +
  6. +
  7. + Our intended audience for the HSSF + generator are developers who need to export Excel spreadsheets to + XML in a non-proprietary environment. +
  8. +
  9. + Our intended audience for the HWPF + library is ourselves, as we will be developing a HWPF Serializer in a + later release, and anyone wishing to add .DOC file processing and + creation to their projects. +
  10. +
+
+
2.2. User environment +

+ The users of this software shall be + developers in a Java environment on any operating system, or power + users who are capable of XML document generation/deployment. +

+
+
2.3. Key User Needs +

+ The HSSF library currently requires a + full object representation to be created before reading values. This + results in very high memory utilization. We need to reduce this + substantially for reading. It would be preferable to do this for + writing, but it may not be possible due to the constraints imposed by + the file format itself. Memory utilization during read is our top + user complaint. +

+

+ The POIFS library currently requires a + full object representation to be created before reading values. This + results in very high memory utilization. We need to reduce this + substantially for reading. +

+

+ The HSSF library currently ignores + formula cells and identifies them as "UnknownRecord" at the + lower level of the API. We must provide a way to read and write + formulas. This is now the top requested feature. +

+

+ The HSSF library currently does not support + charts. This is a key requirement of some users who wish to use HSSF + in a reporting engine. +

+

+ The HSSF Serializer currently does not + provide serialization for cell styling. User's will want stylish + spreadsheets to result from their XML. +

+

+ There is currently no way to generate + the XML from an XLS that is consistent with the format used by the + HSSF Serializer. +

+

+ There should be a way to read and write + the DOC file format using pure Java. +

+ +
+
+
3. Project Overview +
3.1. Project Perspective +

+ The produced code shall be licensed by + the Apache License as used by the Cocoon 2 project (APL 1.1) and + maintained on at http://poi.sourceforge.net + and http://sourcefoge.net/projects/poi. + It is our hope to at some point integrate with the various Apache + projects (xml.apache.org and jakarta.apache.org), at which point we'd + turn the copyright over to them. +

+
+
3.2. Project Position Statement +

+ For developers on a Java and/or XML + environment this project will provide all the tools necessary for + outputting XML data in the Microsoft Excel format. This project seeks + to make the use of Microsoft Windows based servers unnecessary for + file format considerations and to fully document the OLE 2 Compound + Document format. The project aims not only to provide the tools for + serializing XML to Excel and Word file formats and the tools for + writing to those file formats from Java, but also to provide the + tools for later projects to convert other OLE 2 Compound Document + formats to pure Java APIs. +

+
+
3.3. Summary of Capabilities +

+ HSSF Serializer for Apache Cocoon 2 +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Benefit + + Supporting Features +
+ Ability to serialize styles from XML spreadsheets. + + HSSFSerializer will support styles. +
+ Ability to read and write formulas in XLS files. + + HSSF will support reading/writing formulas. +
+ Ability to output in MS Word on any platform using Java. + + The project will develop an API that outputs in Word format + using pure Java. +
+ Enhance performance for reading and writing XLS files. + + HSSF will undergo a number of performance enhancements. HSSF + will include a new event-based API for reading XLS files. POIFS + will support a new event-based API for reading OLE2 CDF files. +
+ Ability to generate XML from XLS files + + The project will develop an HSSF Generator. +
+ The ability to generate charts + + HSSF will provide low level support for chart records as well + as high level API support for generating charts. The ability + to read chart information will not initially be provided. +
+
+
3.4. Assumptions and Dependencies +
    +
  • + The HSSF Serializer and Generator + will support the Gnumeric 1.0 XML tag language. +
  • +
  • + The HSSF Generator and HSSF + Serializer will be mutually validating. It should be possible to + have an XLS file created by the Serializer run through the Generator + and the output back through the Serializer (via the Cocoon pipeline) + and get the same file or a reasonable facsimile (no one cares if it + differs by the order of the binary records in some minor but + non-visually recognizable manner). +
  • +
  • + The HSSF Generator will run on any + Java 2 supporting platform with Apache Cocoon 2 installed along with + the HSSF and POIFS APIs. +
  • +
  • + The HSSF Serializer will run on + any Java 2 supporting platform with Apache Cocoon 2 installed along + with the HSSF and POIFS APIs. +
  • +
  • + The HWPF API requires a Java 2 + implementation and the POIFS API. +
  • +
  • + The HSSF API requires a Java 2 + implementation and the POIFS API. +
  • +
  • + The POIFS API requires a Java 2 + implementation. +
  • + +
+
+
+
4. Project Features +

+ Enhancements to the POIFS API will + include: +

+
    +
  • + An event driven API for reading + POIFS Filesystems. +
  • +
  • + A low-level API for + creating/manipulating POI filesystems. +
  • +
  • + Code improvements supporting + greater separation between read and write structures. +
  • +
+

+ Enhancements to the HSSF API will + include: +

+
    +
  • + An event driven API for reading + XLS files. +
  • +
  • + Performance improvements. +
  • +
  • + Formula support (read/write) +
  • +
  • + Support for user-defined data + formats +
  • +
  • + Better documentation of the file + format and structure. +
  • +
  • + An API for creation of charts. +
  • +
+

+ The HSSF Generator will include: +

+
    +
  • + A set of classes supporting the + Cocoon 2 Generator interfaces providing a method for reading XLS + files and outputting SAX events. +
  • +
  • + The same tag format used by the + HSSFSerializer in any given release. +
  • +
+

+ The HWPF API will include: +

+
    +
  • + An event driven API for reading + DOC files. +
  • +
  • + A set of high and low level APIs + for reading and writing DOC files. +
  • +
  • + Documentation of the DOC file + format or enhancements to existing documentation. +
  • +
+
+
5. Other Product Requirements +
5.1. Applicable Standards +

+ All Java code will be 100% pure Java. +

+
+
5.2. System Requirements +

+ The minimum system requirements for the POIFS API are: +

+
    +
  • 64 Mbytes memory
  • +
  • Java 2 environment
  • +
  • Pentium or better processor (or equivalent on other platforms)
  • +
+

+ The minimum system requirements for the HSSF API are: +

+
    +
  • 64 Mbytes memory
  • +
  • Java 2 environment
  • +
  • Pentium or better processor (or equivalent on other platforms)
  • +
  • POIFS API
  • +
+

+ The minimum system requirements for the HWPF API are: +

+
    +
  • 64 Mbytes memory
  • +
  • Java 2 environment
  • +
  • Pentium or better processor (or equivalent on other platforms)
  • +
  • POIFS API
  • +
+ +

+ The minimum system requirements for the HSSF Serializer are: +

+
    +
  • 64 Mbytes memory
  • +
  • Java 2 environment
  • +
  • Pentium or better processor (or equivalent on other platforms)
  • +
  • Cocoon 2
  • +
  • HSSF API
  • +
  • POI API
  • +
+
+
5.3. Performance Requirements +

+ All components must perform well enough + to be practical for use in a webserver environment (especially + the "killer trio": Cocoon2/Tomcat/Apache combo) +

+
+
5.4. Environmental Requirements +

+ The software will run primarily in + developer environments. We should make some allowances for + not-highly-technical users to write XML documents for the HSSF + Serializer. All other components will assume intermediate Java 2 + knowledge. No XML knowledge will be required except for using the + HSSF Serializer. As much documentation as is practical shall be + required for all components as XML is relatively new, and the + concepts introduced for writing spreadsheets and to POI filesystems + will be brand new to Java and many Java developers. +

+
+
+
6. Documentation Requirements +
6.1 POI Filesystem +

+ The filesystem as read and written by + POI shall be fully documented and explained so that the average Java + developer can understand it. +

+
+
6.2. POI API +

+ The POI API will be fully documented + through Javadoc. A walkthrough of using the high level POI API shall + be provided. No documentation outside of the Javadoc shall be + provided for the low-level POI APIs. +

+
+
6.3. HSSF File Format +

+ The HSSF File Format as implemented by + the HSSF API will be fully documented. No documentation will be + provided for features that are not supported by HSSF API that are + supported by the Excel 97 File Format. Care will be taken not to + infringe on any "legal stuff". Additionally, we are + collaborating with the fine folks at OpenOffice.org on + *free* documentation of the format. +

+
+
6.4. HSSF API +

+ The HSSF API will be documented by + javadoc. A walkthrough of using the high level HSSF API shall be + provided. No documentation outside of the Javadoc shall be provided + for the low level HSSF APIs. +

+
+
6.5 HWPF API +

+ The HWPF API will be documented by + javadoc. A walkthrough of using the high level HWPF API shall be + provided. No documentation outside of the Javadoc shall be provided + for the low level HWPF APIs. +

+
+
6.6 HSSF Serializer +

+ The HSSF Serializer will be documented + by javadoc. +

+
+
6.7 HSSF Generator +

+ The HSSF Generator will be documented + by javadoc. +

+
+
6.8 HSSF Serializer Tag language +

+ The XML tag language along with + function and usage shall be fully documented. Examples will be + provided as well. +

+
+
+
7. Terminology +
7.1 Filesystem +

+ filesystem shall refer only to the POI formatted archive. +

+
+
7.2 File +

+ file shall refer to the embedded data stream within a + POI filesystem. This will be the actual embedded document. +

+
+
+ +
diff --git a/src/documentation/content/xdocs/devel/references/3rdparty.xml b/src/documentation/content/xdocs/devel/references/3rdparty.xml new file mode 100644 index 0000000000..7a85232327 --- /dev/null +++ b/src/documentation/content/xdocs/devel/references/3rdparty.xml @@ -0,0 +1,86 @@ + + + + + +
+ Third Party Contributions + + + +
+ + + +
How to Contribute +

+ See How to contribute to Poi. +

+ +
+ +
Contributed Components +

+ These are not necessarily deemed to be high enough quality to be included in the + core distribution, but they have been tested under + several key environments, they are provided under the same license + as Poi, and they are included in the POI distribution under the + contrib/ directory. +

+ +

+ None as yet! - although you can expect that some of the links + listed below will eventually migrate to the "contributed components" level, and + then maybe even into the main distribution. +

+
+ +
Patch Queue +

Submissions of modifications + to POI which are awaiting review. Anyone can + comment on them on the dev mailing list - code reviewers are needed! + Use these at your own risk - although POI has no guarantee + either, these patches have not been reviewed, let alone accepted. +

+
+ +
Other Extensions +

The other extensions listed here are not endorsed by the POI + project either - they are provided as a convenience only. They may or may not work, + they may or may not be open source, etc. +

+ +

To have a link added to this table, see How to contribute + to POI.

+ + + + + + + + + + +
Name and LinkTypeDescriptionStatusLicensingContact
+ +
+ +
diff --git a/src/documentation/content/xdocs/devel/references/index.xml b/src/documentation/content/xdocs/devel/references/index.xml new file mode 100644 index 0000000000..bbb9f51673 --- /dev/null +++ b/src/documentation/content/xdocs/devel/references/index.xml @@ -0,0 +1,66 @@ + + + + + +
+ Live Sites using Poi + + + + + + + + +
+ + +
References + +
Live Sites using POI +

Currently we don't have any sites listed that use POI, but we're + sure they're out there. Help us change this. If you've written a site + that utilises POI let us know.

+ +
+ +
Products/Projects using POI +

Publicly available products/projects using POI include:

+ +
+ +
File Format Descriptions +

POI depends on publicly available documents describing various + file formats. The list below contains links to some of them.

+ +
+ +
+ +
diff --git a/src/documentation/content/xdocs/devel/references/logocontest.xml b/src/documentation/content/xdocs/devel/references/logocontest.xml new file mode 100644 index 0000000000..efd84f1255 --- /dev/null +++ b/src/documentation/content/xdocs/devel/references/logocontest.xml @@ -0,0 +1,194 @@ + + + + + +
+ + + + + +
+ + +
POI logos +

+ Here are the current logo submissions. Thanks to the artists! +

+
Michael Mosmann +

+ logo +

+
+
Loc Lefvre +

+ logo    + logo +

+
+
Glen Stampoultzis +

+ logo +

+
+
Marcus Gustafsson +

+ logo    + logo +

+
+
Adrianus Handoyo +

+ logo    + logo    + logo +

+
+
RussellBeattie +

+ logo    + logo    + logo +

+

+ logo    + logo +

+
+
Daniel Fernandez +

+ logo +

+
+
Andrew Clements +

+ logo    + logo +

+
+
Wendy Wise +

+ logo    + logo +

+
+
Nikhil Karmokar +

+ logo    + logo +

+

+ logo    + logo +

+

+ logo    + logo +

+

+ logo    + logo +

+

+ logo    + logo +

+

+ logo    + logo +

+
+
Lieven Janssen +

+ logo    + logo +

+
+
RaPi GmbH +

+ Contact Person: Fancy at: fancy at my-feiqi.com +

+

+ logo    + logo +

+

+ logo +

+

+ logo +

+

+ logo +

+

+ logo +

+

+ logo +

+

+ logo +

+

+ logo +

+

+ logo +

+
+
Randy Stanard +

+ logo +

+

+ logo +

+

+ logo +

+

+ logo +

+

+ logo +

+

+ logo +

+

+ logo +

+

+ logo +

+
+
+ +
+ + Copyright (c) @year@ The Apache Software Foundation All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/devel/resolutions/index.xml b/src/documentation/content/xdocs/devel/resolutions/index.xml new file mode 100644 index 0000000000..6df469cdf3 --- /dev/null +++ b/src/documentation/content/xdocs/devel/resolutions/index.xml @@ -0,0 +1,55 @@ + + + + + +
+ Resolutions + About this section + + + +
+ + +
About Resolutions +

+ Every project in Apache has resolutions that they vote on. + Decisions are made, etc. But what happens once those decisions + are made? They are archived in the mail list archive never to + be read again (once its not in the top 10 or so posts). So they + get discussed again and again. +

+

+ Rather than have that big waste of time, we have this section to + record important POI decisions. Once a decision is passed it + need only be linked to this page (either by creating a page for + it or by simply linking it to the archive messages). Wherever + possible a brief about how many votes for and against an maybe + some background should be posted. +

+

+ This section is intended mainly to reduce big waste of time + discussions from taking away from whats important...developing + POI! :-D +

+
+ +
diff --git a/src/documentation/content/xdocs/devel/resolutions/res001.xml b/src/documentation/content/xdocs/devel/resolutions/res001.xml new file mode 100644 index 0000000000..dbc64c10a6 --- /dev/null +++ b/src/documentation/content/xdocs/devel/resolutions/res001.xml @@ -0,0 +1,113 @@ + + + + + +
+ POI Resoluton + Resolution 001 - Minimal Coding Standards + + + +
+ + +
Resolution 001 - Minimal Coding Standards +
Majority Position +

+ As the POI project has grown the "styles" used have become more + varied, some see this as a bad thing, but in reality it + can be a good thing. Each can learn from the different + styles by working with different code. That being said + there are some universal "good quality" guidelines that + must be adopted on a project of any proportions. +

+

+ Marc Johnson Authored the following resolution: +

+

+ On Tue, 2002-01-08 at 22:23, Marc Johnson wrote: + Standards are wonderful; everyone should have a set. + Here's what I propose for coding standards for POI WRT comments (should I + feel the need, I'll post more of these little gems): +

+
    +
  1. + All classes and interfaces MUST have, right at the + beginning of the file, the Apache Software License + 2.0 License Header. (see /legal/LICENSE). +
  2. +
  3. + All classes and interfaces MUST include class javadoc. Conventionally, + this goes after the package and imports, and before the start of the class + or interface. + + +
  4. +
  5. + All methods that are accessible outside the class MUST have javadoc + comments. In other words, if it isn't private, it MUST have javadoc + comments. Simple getters can consist of a simple @return tag; simple setters + can consist of a simple @param tag. Anything else requires some verbiage + plus all the standard javadoc tags as appropriate. You MUST include @throws + or @throws for any non-runtime exceptions, and you SHOULD document any + runtime exceptions you expect to throw. @throws/@throws tags SHOULD + include an explanation of why that exception would be thrown. If your method + might return null, you MUST say so. An accompanying explanation of the + circumstances for doing so would be nice. +
  6. +
+
+
Amendments (informal by extension and not by vote) +
License +

+ As opposed to the formerly used POI License (which was + based on the Apache Public License), now that POI is + part of Apache, use the standard Apache Software + License 2.0 header. As per standard Apache Software + Foundation policy, the full (long) version of the + header should be used. +

+
+
2 cents +

+ Tip: No laughing or joking allowed in conversations regarding coding + standards. + Any mail on coding standards will be treated very seriously, + and sent here with a RTFM. +

+
+
+
Dissent +

+ The motion was passed unanimously with no negative or + neutral votes. +

+
+
Comments +

+ Andy didn't feel like going through his mail and sucking + out the comments.. If there is anything you feel should + be added here do it yourself ;-). +

+
+
+ +
diff --git a/src/documentation/content/xdocs/devel/subversion.xml b/src/documentation/content/xdocs/devel/subversion.xml new file mode 100644 index 0000000000..66cd8e5de6 --- /dev/null +++ b/src/documentation/content/xdocs/devel/subversion.xml @@ -0,0 +1,250 @@ + + + + + +
+ Apache POI™ - Source Code Repository + + + +
+ + +
Download the Source +

+ Most users of the source code probably don't need to have day to + day access to the source code as it changes. Therefore most users will want + to make use of our source release + packages, which contain the complete source tree for each binary + release, suitable for browsing or debugging. These source releases + are available from our + download page. +

+

+ The Apache POI source code is also available as source artifacts + in the Maven Central repository, + which may be helpful for those users who make use of POI via Maven + and wish to inspect the source (eg when debugging in an IDE). +

+
+
Access the Version Controlled Source Code +

+ For general information on connecting to the ASF Subversion, + repositories, see the + version control page. +

+ +

Apache POI uses Subversion as its version control system, + but also has a read-only git mirror +

+ +

NOTE: When checking out a subproject using + subversion, either perform a sparse checkout or check out + the trunk or a single branch or tag to avoid filling up + your hard-disk and wasting bandwidth. +

+ + + +

If you are not a Committer, but you want to submit patches + or even request commit privileges, please see our + Contribution Guidelines for more + information.

+
+
Git access to POI sources +

+ The master source repository for Apache POI is the Subversion + one listed above. To support those users and developers who prefer + to use the Git tooling, read-only access to the POI source tree is + also available via Git. The Git mirrors normally track SVN to + within a few minutes. +

+

+ The official read-only Git repository for Apache POI is available + from git.apache.org/ . + The Git Clone URL is: git://git.apache.org/poi.git + and Https Clone URL: https://git.apache.org/poi.git . + Please see the Git at + Apache page for more details on the service. +

+

+ In addition to the git.apache.org + repository, changes are also mirrored in near-realtime to GitHub. + The GitHub repository is available at + https://github.com/apache/poi . + Please note that the GitHub repository is read-only, but pull requests sent + to it will result in an email being sent to the mailing list. A Git-formatted + patch added to Bugzilla is generally preferred though, as it can be tracked + along with all the other contributions. Please see the + contribution guidelines for more + information on getting involved in the project.

+
+
Using Git via the SVN-Git bridge +
General information +

+ Git provides a nice functionality "git-svn" which allows to read the history + of a Subversion repository and convert it into a full Git repository. This + will keep information from the SVN revisions so that the Git repository can + be updated with newer revisions from Subversion as well as allowing to push + commits from Git "upstream" into the Subversion repository. See the + + official documentation for more details. +

+
+
Set up the repository +

+ The git-svn functionality is provided as a set of sub-commands to + "git svn". To start retrieving information from SVN and create the + initial Git repository run the following command: + +

+ + git svn clone https://svn.apache.org/repos/asf/poi/trunk poisvngit --revision 1732982:HEAD + +

+ Running without --revision from:HEAD will run for a long time and will retrieve the full version history of + the Subversion repository. If you need more repository history, change the from revision to an + earlier release or omit the --revision + specifier altogether. +

+

+ When this finishes you have a Git repository whose "master" branch + mirrors the SVN "trunk". +
+ From here you can use the full power of Git, i.e. quick branching, + rebasing, merging, ... +
+ See below for some common usage hints. +

+
+
Fetching newer SVN revisions +

+ In order to fetch the latest SVN revisions, you need to "rebase" onto + the SVN trunk: +

+ + git checkout master + git svn rebase + +

+ This will fetch the latest changes from Subversion and will rebase + the master-branch onto them. +

+
+
Pushing Git commits to Subversion +

+ The following command will push all changes on master back to + Subversion: +

+ + git svn dcommit + +

+ Note that usually all commits on master will be sent to Subversion + in one go, so it's similar to a "push" to another Git repository. + + The dcommit may fail if there are newer revisions in Subversion, you + will need to run a git svn rebase first in this case. +

+
+
General usage guidelines +

+ Although you can use the full power of Git, there are a few + things that work well and some things that will get you into + trouble: +

+

+ You should not develop on master, rather use some branching + concept where you do work on sub-branches and only merge/cherry-pick the + changes that are ready for being sent upstream. + It seems to work better to constantly rebase changes onto the + master branch as this will keep the history clean compared to + the SVN repository and will avoid sending useless "Merge" commits to + Subversion. +

+

+ You can keep some changes that are only useful locally by using + two branches that are rebased onto each other. E.g. + something like the following has proven to work well: +

+ + master + -> localchanges - commits that should not be sent upstream -> + -> workbranch - place for doing development work + +

+ When things are ready in the workbranch do a +

+ + git checkout master + git cherry-pick commitid ... + +

+ to get all the finished commits onto master as preparation for pushing them upstream. + + Then you can git svn dcommit to send the changes upstream + and a git svn rebase to get master updated with the newly + created SVN revisions. + + Finally do the following to update both branches onto the new SVN head +

+ + # rebase you local changes onto the latest SVN state + git checkout localchanges + git rebase master + + # also set the working branch to the latest state from SVN. + git checkout workbranch + git rebase workbranch + +

+ Sounds like too much work? Put these steps into a small script and all + this will become a simple poiupdate to get all branches + rebased onto HEAD from Subversion. +

+
+
+
Code metrics +

+ Code quality reports for Apache POI are available on the + Apache Sonar instance. +

+

+ Sonar provides lots of useful numbers and statistics, especially + watching the project over time shows how some of the indicators evolve + and allows to see which areas need some polishing. +

+
+ +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/devel/who.xml b/src/documentation/content/xdocs/devel/who.xml new file mode 100644 index 0000000000..d95768a0a8 --- /dev/null +++ b/src/documentation/content/xdocs/devel/who.xml @@ -0,0 +1,134 @@ + + + + + +
+ Apache POI™ - Who We Are + + + +
+ + + +
Apache POI™ - Who we are +

+ The Apache POI Project operates on a meritocracy: the more you do, the more + responsibility you will obtain. This page lists all of the people who have + gone the extra mile and are Committers. If you would like to get involved, + the first step is to join the mailing lists. +

+ +

+ We ask that you please do not send us emails privately asking for support. + We are non-paid volunteers who help out with the project and we do not + necessarily have the time or energy to help people on an individual basis. + The mailing lists have many individuals + who will help answer detailed requests for help. The benefit of + using mailing lists over private communication is that they are a shared + resource where others can also learn from common questions. +

+

+ POI Developers count on feedback from the mailing lists. Many developers do take + an active role on the lists. +

+ + + + + + + + +
Project Chair +
    +
  • Dominik Stadler (centic at apache dot org)
  • +
+
+
Committers +
    + +
  • Tim Allison (tallison at apache dot org)
  • +
  • Andreas Beeker (kiwiwings at apache dot org)
  • +
  • Nick Burch (nick at apache dot org)
  • +
  • Amol S Deshmukh (amol at apache dot org)
  • +
  • David Fisher (wave at apache dot org)
  • +
  • Jason Height (jheight at apache dot org)
  • +
  • Marc Johnson (mjohnson at apache dot org)
  • +
  • Rainer Klute (klute at apache dot org)
  • +
  • Yegor Kozlov (yegor at apache dot org)
  • +
  • Shawn Laubach (slaubach at apache dot org)
  • +
  • Josh Micich (josh at apache dot org)
  • +
  • Mark Murphy (jmarkmurphy at apache dot org)
  • +
  • Danny Mui (dmui at apache dot org)
  • +
  • David North (dnorth at apache dot org)
  • +
  • Javen O'Neal (onealj at apache dot org)
  • +
  • Uwe Schindler (uschindler at apache dot org)
  • +
  • Avik Sengupta (avik at apache dot org)
  • +
  • Dominik Stadler (centic at apache dot org)
  • +
  • Glen Stampoultzis (glens at apache.org)
  • +
  • Jon Svede (jsvede at apache dot org)
  • +
  • Maxim Valyanskiy (maxcom at apache dot org)
  • +
  • Sergey Vladimirov (sergey at apache dot org)
  • +
  • Greg Woolsey (gwoolsey at apache dot org)
  • +
+
+ +
Emeritus Committers +
    +
  • Andrew C. Oliver (acoliver at gmail dot com)
  • +
  • Nicola Ken Barozzi (barozzi at nicolaken dot com)
  • +
  • Ryan Ackley (sackley at apache dot org)
  • +
  • Tetsuya Kitahata (ai at spa dot nifty dot com)
  • +
+
+
+ +
I want some progress on a bug report! +

+ So you took the time to report a bug, provided information that should make + it possible to reproduce the problem and fix it. Surely the fix is easy and + should take a seasoned developer a few minutes at max to fix! + + So why is there no progress on your bug report? Is there nobody + taking care when your problem is clearly stopping nearly everybody + from using POI? + + We know that the absence of responses on bug-reports can be frustrating, + sometimes bugs lie dormant for a long time for no apparent reason. + + Please always remember: nobody is paid to work on POI, the team is + a bunch of volunteers who look at things in their free time. + + Because of that developers might choose to work on things based on a + different priority than yours! Especially the quality and maturity of + bug reports will affect if somebody decides to look at it. + + So the best way to help a bug report see progress is to provide more information + if available or supply patches together with unit-tests. + + If you can, look at Contribution Guidelines + for more information about providing patches. +

+
+ + +
diff --git a/src/documentation/content/xdocs/download.xml b/src/documentation/content/xdocs/download.xml new file mode 100644 index 0000000000..e7aee674ed --- /dev/null +++ b/src/documentation/content/xdocs/download.xml @@ -0,0 +1,171 @@ + + + + + +
+ Apache POI™ - Download Release Artifacts +
+ + +
+ Available Downloads +

+ This page provides instructions on how to download and verify the Apache POI release artifacts. There + are different versions available depending on how stable your code should be. +

+ +

+ Apache POI releases are available under the + Apache License, Version 2.0. + See the NOTICE file contained in each release artifact for applicable copyright attribution notices. +

+

+ To ensure that you have downloaded the true release you should + verify the integrity + of the files using the signatures and checksums available from this page. +

+
+ + + +
6 April 2025 - POI 5.4.1 available +

The Apache POI team is pleased to announce the release of 5.4.1. + Featured are a handful of new areas of functionality and numerous bug fixes.

+

A summary of changes is available in the + Release Notes. + A full list of changes is available in the change log. + People interested should also follow the dev list + to track progress.

+

+ The POI source release is listed below. + Pre-built versions of all POI components + are available in the central Maven repository under Group ID "org.apache.poi" and Version + "5.4.1". +

+
Source Distribution + +
+
+ +
+ Binary Artifacts +

+ POI 5.2.3 was the last version where we produced a set of poi-bin*.zip and poi-bin*.tgz files. + We will continue to publish jars to Maven Central. If you are not using a build tool like + Apache Maven or Gradle, you can still find these jars by traversing the directories at + https://repo1.maven.org/maven2/org/apache/poi/. +

+

+ If you want to download a legacy poi-bin archive, see the + archives of all prior releases. +

+
+ +
+ Verify +

+ It is essential that you verify the integrity of the downloaded files using the PGP and SHA2 signatures. + Please read + Verifying Apache HTTP Server Releases + for more information on why you should verify our releases. This page provides detailed instructions + which you can use for POI artifacts. +

+

+ The PGP signatures can be verified using PGP or GPG. First download the + KEYS + file as well as the .asc signature files for the relevant release packages. Make sure you get these + files from the main distribution directory, rather than from a mirror. + Then verify the signatures. +

+

Batch check of all distribution files:

+ + find . -name "*.sha256" -type f -execdir sha256sum -c {} \; + find . -name "*.sha512" -type f -execdir sha512sum -c {} \; + find . -name "*.asc" -exec gpg --no-secmem-warning --verify {} \; + +

Sample verification of poi-bin-3.5-FINAL-20090928.tgz

+ % gpg --import KEYS +gpg: key 12DAE9BE: "Glen Stampoultzis <glens at apache dot org>" not changed +gpg: key 4CEED75F: "Nick Burch <nick at gagravarr dot org>" not changed +gpg: key 84B5A42E: "Rainer Klute <rainer.klute at gmx dot de>" not changed +gpg: key F5BB52CD: "Yegor Kozlov <yegor.kozlov at gmail dot com>" not changed +gpg: Total number processed: 4 +gpg: unchanged: 4 +% gpg --verify poi-bin-3.5-FINAL-20090928.tgz.asc poi-bin-3.5-FINAL-20090928.tgz +gpg: Signature made Mon Sep 28 10:28:25 2009 PDT using DSA key ID F5BB52CD +gpg: Good signature from "Yegor Kozlov <yegor.kozlov at gmail dot com>" +gpg: aka "Yegor Kozlov <yegor at dinom dot ru>" +gpg: aka "Yegor Kozlov <yegor at apache dot org>" +Primary key fingerprint: 7D77 0C77 6CE7 754E E6AF 23AA 6934 0A02 F5BB 52CD +% gpg --fingerprint F5BB52CD +pub 1024D/F5BB52CD 2007-06-18 [expires: 2012-06-16] + Key fingerprint = 7D77 0C77 6CE7 754E E6AF 23AA 6934 0A02 F5BB 52CD +uid Yegor Kozlov <yegor.kozlov at gmail dot com> +uid Yegor Kozlov <yegor at dinom dot ru> +uid Yegor Kozlov <yegor at apache dot org> +sub 4096g/7B45A98A 2007-06-18 [expires: 2012-06-16] +
+
+ Release Archives +

+ Apache POI became a top level project in June 2007 and POI 3.0 artifacts were re-released. Prior to that + date POI was a sub-project of + Apache Jakarta. +

+ +
+ +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved.
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache POI project logo are trademarks of The + Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/encryption.xml b/src/documentation/content/xdocs/encryption.xml new file mode 100644 index 0000000000..635544a2a4 --- /dev/null +++ b/src/documentation/content/xdocs/encryption.xml @@ -0,0 +1,510 @@ + + + + + + +
+ Apache POI™ - Encryption support + + + + +
+ + +
+ Overview + +

Apache POI contains support for reading few variants of encrypted office files:

+
    +
  • Binary formats (.xls, .ppt, .doc, ...)
    + encryption is format-dependent and needs to be implemented per format differently.
    + Use + Biff8EncryptionKey.setCurrentUserPassword(String password) + to specify the decryption password before opening the file or (where applicable) before saving. + Setting a null password before saving removes the password protection.
    + The password is set in a thread local variable. Do not forget to reset it to null after text extraction. +
  • +
  • XML-based formats (.xlsx, .pptx, .docx, ...)
    + use the same encryption logic over all formats. When encrypted, the zipped files will be + stored within an OLE file in the EncryptedPackage stream.
    + If you plan to use POI to actually generate encrypted documents, be aware not to use anything less than + agile encryption, because RC4 is not really secure and + ECB chaining is problematic too. + Of course you'll need to make sure, that your clients can read the documents, + i.e. the various free Excel, Powerpoint, Word viewers have limitations in the cipher or hashing parameters.
    + If you want to use high encryption parameters, you need to install the "Java Cryptography Extension (JCE) Unlimited + Strength Jurisdiction Policy Files" for your JRE version + (Oracle JDK6, + JDK7, + JDK8, + IBM JDK8). +
  • +
+ +

Some "write-protected" files are encrypted with the built-in password "VelvetSweatshop", POI can read that files too.

+
+ +
+ Supported feature matrix + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EncryptionHSSFHSLFHWPF
XOR obfuscation *)Yes (Writing since 3.16)N/ANo
40-bit RC4 encryptionYes (Writing since 3.16)N/AYes (since 3.17)
Office Binary Document RC4 CryptoAPI EncryptionYes (Since 3.16)YesYes (since 3.17)
+ XSSFXSLFXWPF
Office Binary Document RC4 Encryption **)YesYesYes
ECMA-376 Standard EncryptionYesYesYes
ECMA-376 Agile EncryptionYesYesYes
ECMA-376 XML SignatureYesYesYes
+ +

*) the xor encryption is flawed and works only for very small files - see #59857. +

+ +

**) the MS-OFFCRYPTO + documentation only mentions the RC4 (without CryptoAPI) encryption as a "in place" encryption, but + apparently there's also a container based method with that key generation logic. +

+
+ +
Binary formats +

As mentioned above, use + + Biff8EncryptionKey.setCurrentUserPassword(String password) + to specify the password.

+ +
+ XOR/RC4 decryption for xls + +
+ +
+ RC4 CryptoApi support ppt - decryption + +
+
+ +
+ XML-based formats - Decryption + +

XML-based formats are stored in OLE-package stream "EncryptedPackage". Use org.apache.poi.poifs.crypt.Decryptor + to decode file:

+ + + +

If you want to read file encrypted with build-in password, use Decryptor.DEFAULT_PASSWORD.

+
+ +
+ XML-based formats - Encryption + +

Encrypting a file is similar to the above decryption process. Basically you'll need to choose between + binaryRC4, standard and agile encryption, + the cryptoAPI mode is used internally and its direct use would result in an incomplete file. + Apart of the CipherMode, the EncryptionInfo class provides further parameters to specify the cipher and + hashing algorithm to be used.

+ +
+ +
+ XML-based formats - Signing (XML Signature) + + As of #64186 the configuration of the + OPCPackage has changed, the examples below have been adopted and reflect the POI 5.0.0 API + +

An Office document can be digital signed by a XML Signature + to protect it from unauthorized modifications, i.e. modifications without having the original certificate. + The current implementation is based on the + eID Applet which + is dual-licensed to + Apache License 2.0 and LGPL v3.0. + Instead of using the internal JDK API + this version is based on Apache Santuario.

+

The classes have been tested against the following libraries, which need to be included additionally to the + default dependencies:

+
    +
  • BouncyCastle bcpkix, bcprov and bcutil (tested against 1.81)
  • +
  • Apache Santuario "xmlsec" (tested against 3.0.5)
  • +
  • and slf4j-api (tested against 2.0.x)
  • +
+

Depending on the configuration + and the activated facets + various XAdES levels are supported - the support for higher levels (XAdES-T+) + depend on supporting services and although the code is adopted, the integration is not well tested ... please support us on + integration (testing) with timestamp and revocation (OCSP) services. +

+

Further test examples can be found in the corresponding test class.

+ +

If you want to use a hash algorithm with 64 bytes (currently only applies to SHA512), + a base64 "feature" in xmlsec + leads to line breaks in the digest values, which won't be accepted by Office. To workaround this, you + need to set the following system property:
+ -Dorg.apache.xml.security.ignoreLineBreaks=true

+
+ +
+ Validating a signed office document + + +
+ +
+ Signing an office document + +
+ Signing a file + +
+ +
+ Signing a stream - in-memory + +

When saving a OOXML document, POI creates missing relations on the fly. Therefore calling the signing method before + would result in an invalid signature. Instead of trying to fix all save invocations, the user is asked to save the stream + before in an intermediate byte array (stream) and process this stream instead.

+ + +
+
+ +
+ Encrypting temporary files created when unzipping an OOXML document + +

For security-conscious environments where data at rest must be stored encrypted, + the creation of plaintext temporary files is a grey area.

+ +

The code example, written by PJ Fanning, modifies the behavior of SXSSFWorkbook + to extract an OOXML spreadsheet zipped container and write the contents to disk using AES + encryption.

+ +

See SXSSFWorkbookWithCustomZipEntrySource.java + and other files + that are needed for this example.

+
+ +
+ Debugging XML signature issues +

Finding the source of a XML signature problem can be sometimes a pain in the ... neck, because + the hashing of the canonicalized form is more or less done in the background.

+ + +

One of the tripping hazards are different + linebreaks in Windows/Unix, therefore use the non-indent form of the xmls. Furthermore the + elements/ancestors containing namespace definitions and the used prefix might also differ.

+ +

The next thing is to compare successful signed documents from Office vs. POIs generated signature, + i.e. unzip both files and look for differences. Usually the package relations (*.rels) will be different, + and the sig1.xml, core.xml and [Content_Types].xml due to different order of the references.

+ +

The package relationships (*.rels) will be specially handled, i.e. they will be filtered and only + a subset will be processed - see 13.2.4.24 Relationships Transform Algorithm.

+ +

POI and Santuario (XmlSec) use Log4J 2.x and + SLF4J respectively for logging.

+ +
    +
  • + (Since the change to Log4J 2 in POI 5.1.0, this hasn't been tested, and you need to adapt the + logging settings to get all log output of XmlSec and POI) +
  • +
  • + add the following JVM parameters: + + -Xbootclasspath/p: + ]]> +
  • +
  • + To check the processed files in the canonicalized form, the below UnsyncBufferedOutputStream class needs + to be injected/replaced. Put the .class file in separate directory and add it to the JVM parameters (see above): + + size) { + flushBuffer(); + if (len > size) { + out.write(arg0, arg1,len); + out2.write(arg0, arg1,len); + return; + } + newLen = len; + } + System.arraycopy(arg0, arg1, buf, pointer, len); + pointer = newLen; + } + + private void flushBuffer() throws IOException { + if (pointer > 0) { + out.write(buf, 0, pointer); + out2.write(buf, 0, pointer); + } + pointer = 0; + + } + + public void write(int arg0) throws IOException { + if (pointer >= size) { + flushBuffer(); + } + buf[pointer++] = (byte)arg0; + + } + + public void flush() throws IOException { + flushBuffer(); + out.flush(); + out2.flush(); + } + + public void close() throws IOException { + flush(); + out.close(); + out2.close(); + } + + } + ]]> +
  • +
+
+ + +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/help/faq.xml b/src/documentation/content/xdocs/help/faq.xml new file mode 100644 index 0000000000..cf28c18e87 --- /dev/null +++ b/src/documentation/content/xdocs/help/faq.xml @@ -0,0 +1,742 @@ + + + + + + Frequently Asked Questions + + + My code uses some new feature, compiles fine but fails when live with a "MethodNotFoundException" or "IncompatibleClassChangeError" + + +

You almost certainly have an older version of Apache POI + on your classpath. Quite a few runtimes and other packages + will ship older version of Apache POI, so this is an easy problem + to hit without your realising. Some will ship just one old jar, + some may ship a full set of old POI jars.

+

The best way to identify the offending earlier jar files is + with a few lines of java. These will load a Core POI class, an + OOXML class and a Scratchpad class, and report where they all came + from.

+ +
+
+ + + My code uses the scratchpad, compiles fine but fails to run with a "MethodNotFoundException" + + +

You almost certainly have an older version earlier on your + classpath. See the prior answer.

+
+
+ + + I'm using the poi-ooxml-lite (previously known as poi-ooxml-schemas) jar, but my code is failing with "java.lang.NoClassDefFoundError: org/openxmlformats/schemas/*something*" + + +

To use the new OOXML file formats, POI requires a jar containing + the file format XSDs, as compiled by + XMLBeans. These + XSDs, once compiled into Java classes, live in the + org.openxmlformats.schemas namespace.

+

There are two jar files available, as described in + the components overview section. + The full jar of all of the schemas is poi-ooxml-full-XXX.jar (previously known as ooxml-schemas) + (lower versions for older releases, see table below), + and it is currently around 16mb. The smaller poi-ooxml-lite (previously known as poi-ooxml-schemas) + jar is only about 6mb. This latter jar file only contains the + typically used parts though.

+

Many users choose to use the smaller poi-ooxml-lite jar to save + space. However, the poi-ooxml-lite jar only contains the XSDs and + classes that are typically used, as identified by the unit tests. + Every so often, you may try to use part of the file format which + isn't included in the minimal poi-ooxml-lite jar. In this case, + you should switch to the full poi-ooxml-full jar. Longer term, + you may also wish to submit a new unit test which uses the extra + parts of the XSDs, so that a future poi-ooxml-lite jar will + include them.

+

There are a number of ways to get the full poi-ooxml-full jar. + If you are a maven user, see the + the components overview section + for the artifact details to have maven download it for you. + If you download the source release of POI, and/or checkout the + source code from subversion, + then you can run the ant task "compile-ooxml-xsds" to have the + OOXML schemas downloaded and compiled for you (This will also + give you the XMLBeans generated source code, in case you wish to + look at this). Finally, you can download the jar by hand from the + POI + Maven Repository.

+

Note that historically, different versions of poi-ooxml-full / ooxml-schemas were + used

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Version of ooxml-schemasVersion of POICommment
ooxml-schemas-1.0.jarPOI 3.5 and 3.6
ooxml-schemas-1.1.jarPOI 3.7 to POI 3.13Generics support added, can be used with POI 3.5 and POI 3.6 as well
ooxml-schemas-1.2.jar-Not released
ooxml-schemas-1.3.jarPOI 3.14 and newerVisio XML format support added, can be used with POI 3.7 - POI 3.13 as well
ooxml-schemas-1.4.jarPOI 4.*.*Provide schema for AlternateContent, can be used with previous versions of POI as well
poi-ooxml-full jarPOI 5.0.0 and newerUpgrade to ECMA-376 5th edition - which is not downward compatible
+
+
+ + + Why is reading a simple sheet taking so long? + + +

You've probably enabled logging. Logging is intended only for + autopsy style debugging. Having it enabled will reduce performance + by a factor of at least 100. Logging is helpful for understanding + why POI can't read some file or developing POI itself. Important + errors are thrown as exceptions, which means you probably don't need + logging.

+
+
+ + + What is the HSSF "eventmodel"? + + +

The SS eventmodel package is an API for reading Excel files without loading the whole spreadsheet into memory. It does + require more knowledge on the part of the user, but reduces memory consumption by more than + tenfold. It is based on the AWT event model in combination with SAX. If you need read-only + access, this is the best way to do it.

+
+
+ + + Why can't read the document I created using Star Office 5.1? + + +

Star Office 5.1 writes some records using the older BIFF standard. This causes some problems + with POI which supports only BIFF8.

+
+
+ + + Why am I getting an exception each time I attempt to read my spreadsheet? + + +

It's possible your spreadsheet contains a feature that is not currently supported by POI. + If you encounter this then please create the simplest file that demonstrates the trouble and submit it to + Bugzilla.

+
+
+ + + How do you tell if a spreadsheet cell contains a date? + + +

Excel stores dates as numbers therefore the only way to determine if a cell is + actually stored as a date is to look at the formatting. There is a helper method + in HSSFDateUtil that checks for this. + Thanks to Jason Hoffman for providing the solution.

+ +
+
+ + + I'm trying to stream an XLS file from a servlet and I'm having some trouble. What's the problem? + + +

+ The problem usually manifests itself as the junk characters being shown on + screen. The problem persists even though you have set the correct mime type. +

+

+ The short answer is, don't depend on IE to display a binary file type properly if you stream it via a + servlet. Every minor version of IE has different bugs on this issue. +

+

+ The problem in most versions of IE is that it does not use the mime type on + the HTTP response to determine the file type; rather it uses the file extension + on the request. Thus you might want to add a + .xls to your request + string. For example + http://yourserver.com/myServelet.xls?param1=xx. This is + easily accomplished through URL mapping in any servlet container. Sometimes + a request like + http://yourserver.com/myServelet?param1=xx&dummy=file.xls is also + known to work. +

+

+ To guarantee opening the file properly in Excel from IE, write out your file to a + temporary file under your web root from your servlet. Then send an http response + to the browser to do a client side redirection to your temp file. (Note that using a + server side redirect using RequestDispatcher will not be effective in this case) +

+

+ Note also that when you request a document that is opened with an + external handler, IE sometimes makes two requests to the webserver. So if your + generating process is heavy, it makes sense to write out to a temporary file, so that multiple + requests happen for a static file. +

+

+ None of this is particular to Excel. The same problem arises when you try to + generate any binary file dynamically to an IE client. For example, if you generate + pdf files using + FOP, you will come across many of the same issues. +

+ +
+
+ + + I want to set a cell format (Data format of a cell) of an excel sheet as ###,###,###.#### or ###,###,###.0000. Is it possible using POI ? + + +

+ Yes. You first need to get a DataFormat object from the workbook and call getFormat with the desired format. Some examples are here. +

+
+
+ + + I want to set a cell format (Data format of a cell) of an excel sheet as text. Is it possible using POI ? + + +

+ Yes. This is a built-in format for excel that you can get from DataFormat object using the format string "@". Also, the string "text" will alias this format. +

+
+
+ + + How do I add a border around a merged cell? + + +

Add blank cells around where the cells normally would have been and set the borders individually for each cell. + We will probably enhance HSSF in the future to make this process easier.

+
+
+ + + I am using styles when creating a workbook in POI, but Excel refuses to open the file, complaining about "Too Many Styles". + + +

You just create the styles OUTSIDE of the loop in which you create cells.

+

GOOD:

+ +

BAD:

+ + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet("new sheet"); + HSSFRow row = null; + + for (int x = 0; x < 1000; x++) { + // Aqua background + HSSFCellStyle style = wb.createCellStyle(); + style.setFillBackgroundColor(HSSFColor.AQUA.index); + style.setFillPattern(HSSFCellStyle.BIG_SPOTS); + HSSFCell cell = row.createCell((short) 1); + cell.setCellValue("X"); + cell.setCellStyle(style); + + // Orange "foreground", + // foreground being the fill foreground not the font color. + style = wb.createCellStyle(); + style.setFillForegroundColor(HSSFColor.ORANGE.index); + style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); + + // Create a row and put some cells in it. Rows are 0 based. + row = sheet.createRow((short) k); + + for (int y = 0; y < 100; y++) { + cell = row.createCell((short) k); + cell.setCellValue("X"); + cell.setCellStyle(style); + } + } + + // Write the output to a file + FileOutputStream fileOut = new FileOutputStream("workbook.xls"); + wb.write(fileOut); + fileOut.close();]]> +
+
+ + + I think POI is using too much memory! What can I do? + + +

This one comes up quite a lot, but often the reason isn't what + you might initially think. So, the first thing to check is - what's + the source of the problem? Your file? Your code? Your environment? + Or Apache POI?

+

(If you're here, you probably think it's Apache POI. However, it + often isn't! A moderate laptop, with a decent but not excessive heap + size, from a standing start, can normally read or write a file with + 100 columns and 100,000 rows in under a couple of seconds, including + the time to start the JVM).

+

Apache POI ships with a few programs and a few example programs, + which can be used to do some basic performance checks. For testing + file generation, the class to use is in the examples package, + SSPerformanceTest + (viewvc). + Run SSPerformanceTest with arguments of the writing type (HSSF, XSSF + or SXSSF), the number rows, the number of columns, and if the file + should be saved. If you can't run that with 50,000 rows and 50 columns + in HSSF and SXSSF in under 3 seconds, and XSSF in under 20 seconds + (and ideally all 3 in less than that!), then the problem is with + your environment.

+

Next, use the example program + ToCSV + (viewvc) + to try reading the file in with HSSF or XSSF. Related is + XLSX2CSV + (viewvc), + which uses SAX parsing for .xlsx. Run this against both your problem file, + and a simple one generated by SSPerformanceTest of the same size. If this is + slow, then there could be an Apache POI problem with how the file is being + processed (POI makes some assumptions that might not always be right on all + files). If these tests are fast, then performance problems likely are in your + code.

+
+
+ + + I can't seem to find the source for the OOXML CT.. classes, where do they + come from? + + +

The OOXML support in Apache POI is built on top of the file format + XML Schemas, as compiled into Java using + XMLBeans. Currently, + the compilation is done with XMLBeans 5.x, for maximum compatibility + with installations.

+

All of the org.openxmlformats.schemas.spreadsheetml.x2006 CT... + classes are auto-generated by XMLBeans. The resulting generated Java goes + in the poi-ooxml-full-*-sources jar, and the compiled version into the + poi-ooxml-full jar.

+

The full poi-ooxml-full jar is distributed with Apache POI, + along with the cut-down poi-ooxml-lite jar containing just + the common parts. Use the sources off poi-ooxml-full for the lite version, + which is available from Maven Central - ask your favourite Maven + mirror for the poi-ooxml-full-*-sources jar. Alternately, if you download + the POI source distribution (or checkout from SVN) and build, Ant will + automatically compile it for you to generate the source and binary poi-ooxml-full jars.

+
+
+ + + An OLE2 ("binary") file is giving me problems, but I can't share it. How can I investigate the problem on my own? + + +

The first thing to try is running the + Binary File Format Validator + from Microsoft against the file, which will report if the file + complies with the specification. If your input file doesn't, then this + may well explain why POI isn't able to process it correctly. You + should probably in this case speak to whoever is generating the file, + and have them fix it there. If your POI generated file is identified + as having an issue, and you're on the + latest codebase, report a new + POI bug and include the details of the validation failure.

+

Another thing to try, especially if the file is valid but POI isn't + behaving as expected, are the POI Dev Tools for the component you're + using. For example, HSSF has org.apache.poi.hssf.dev.BiffViewer + which will allow you to view the file as POI does. This will often + allow you to check that things are being read as you expect, and + narrow in on problem records and structures.

+
+
+ + + An OOXML ("xml") file is giving me problems, but I can't share it. How can I investigate the problem on my own? + + +

There's not currently a simple validator tool as there is for the + OLE2 based (binary) file formats, but checking the basics of a file + is generally much easier.

+

Files such as .xlsx, .docx and .pptx are actually a zip file of XML + files, with a special structure. Your first step in diagnosing the + issues with the input or output file will likely be to unzip the + file, and look at the XML of it. Newer versions of Office will + normally tell you which area of the file is problematic, so + narrow in on there. Looking at the XML, does it look correct?

+

When reporting bugs, ideally include the whole file, but if you're + unable to then include the snippet of XML for the problem area, and + reference the OOXML standard for what it should contain.

+
+
+ + + Why do I get a java.lang.NoClassDefFoundError: javax/xml/stream/XMLEventFactory.newFactory() + + +

Applies to versions <= 3.17 (Java 6):

+

This error indicates that the class XMLEventFactory does not provide + functionality which POI is depending upon. There can be a number of + different reasons for this:

+
    +
  • Outdated xml-apis.jar, stax-apis.jar or xercesImpl.jar:
    + These libraries were required with Java 5 and lower, but are not actually + required with spec-compliant Java 6 implementations, so try removing those + libraries from your classpath. If this is not possible, try upgrading to a + newer version of those jar files. +
  • +
  • Running IBM Java 6 (potentially as part of WebSphere Application Server):
    + IBM Java 6 does not provide all the interfaces required by the XML standards, + only IBM Java 7 seems to provide the correct interfaces, so try upgrading + your JDK. +
  • +
  • Sun/Oracle Java 6 with outdated patchlevel:
    + Some of the interfaces were only included/fixed in some of the patchlevels for + Java 6. Try running with the latest available patchlevel or even better use + Java 7/8 where this functionality should be available in all cases. +
  • +
+
+
+ + + Can I mix POI jars from different versions? + + +

No. This is not supported.

+

All POI jars in use must come from the same version. A combination + such as poi-3.11.jar and poi-ooxml-3.9.jar is not + supported, and will fail to work in unpredictable ways.

+

If you're not sure which POI jars you're using at runtime, and/or + you suspect it might not be the one you intended, see + this FAQ entry for details on + diagnosing it. If you aren't sure what POI jars you need, see the + Components Overview + for details

+
+
+ + + Can I access/modify workbooks/documents/slideshows in multiple threads? + What are the multi-threading guarantees that Apache POI makes + + +

In short: Handling different document-objects in different threads will + work. Accessing the same document in multiple threads will not work.

+

This means the workbook/document/slideshow objects are not checked for + thread safety, but any globally held object like global caches or other + data structures are guarded against multi threaded access accordingly.

+

There have been + discussions + about accessing different Workbook-sheets + in different threads concurrently. While this may work to some degree, it may lead + to very hard to track errors as multi-threading issues typically only + manifest after long runtime when many threads are active and the system + is under high load, i.e. in production use! Also it might break in future + versions of Apache POI as we do not specifically test using the library + this way.

+
+
+ + + What are the advantages and disadvantages of the different constructor and + write methods? + + +

Across most of the UserModel classes ( +POIDocument +and +POIXMLDocument), + you can open the document from a read-only File, a read-write File + or an InputStream. You can always write out to an OutputStream, + and increasing also to a File. +

+

Opening your document from a File is suggested wherever possible. + This will always be quicker and lower memory then using an InputStream, + as the latter has to buffer things in memory.

+

When writing, you can use an OutputStream to write to a new file, or + overwrite an existing one (provided it isn't already open!). On slow links / disks, + wrapping with a BufferedOutputStream is suggested. To write like this, use +write(OutputStream). +

+

To write to the currently open file (an in-place write / replace), you need to + have opened your document from a File, not an InputStream. In + addition, you need to have opened from the File in read-write mode, not + read-only mode. To write to the currently open file, on formats that support it + (not all do), use +write(). +

+

You can also write out to a new File. This is available no matter how + you opened the document, and will create/replace a new file. It is faster and lower + memory than writing to an OutputStream. However, you can't use this to + replace the currently open file, only files not currently open. To write to a + new / different file, use +write(File) +

+

More information is also available in the +HSSF and XSSF documentation, + which largely applies to the other formats too. +

+

Note that currenly (POI 3.15 beta 3), not all of the write methods are available + for the OOXML formats yet. +

+
+
+ + + Can POI be used with OSGI? + + +

Starting with POI 3.16 there's a workaround for OSGIs context classloader handling, + i.e. it replaces the threads current context classloader with an implementation of + limited class view. This will lead to IllegalStateExceptions, as xmlbeans can't find + the xml schema definitions in this reduced view. The workaround is to initialize + the classloader delegate of POIXMLTypeLoader , which defaults to the current + thread context classloader. The initialization should take place before any other + OOXML related calls. The class in the example could be any class, which is + part of the poi-ooxml-schema or ooxml-schema:
+ POIXMLTypeLoader.setClassLoader(CTTable.class.getClassLoader()); +

+
+
+ + + Can Apache POI be compiled/used with Java 11, 17 and 21? + + +

+ POI is successfully tested with many different versions of Java. It is + recommended that you use Java versions that have Long Term Support (Java 11, 17 and 21). +

+

Including the existing binaries as normal jar-files + should work when using recent versions of Apache POI. You may see + some warnings about illegal reflective access, but it should work fine + despite those. We are working on getting the code changed so we avoid + discouraged accesses in the future. +

+

NOTE: Apache POI tries to support the Java module system but it is more complicated + because Apache POI is still supporting Java 8 and the module system + cannot be fully supported while maintaining such support. +

+

+ FYI, jaxb in current versions also causes some warnings about reflective access, + we cannot fix those until jaxb >= 2.4.0 is available, see + https://stackoverflow.com/a/50251510/411846 for details, you can set a system + property "com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize" to avoid this warning. +

+

+ For compiling Apache POI, you should use at least version 4.1.0 when it becomes available + or a recent trunk checkout until then. +

+

+ If you are building POI yourself from source files, use an up to date version of Gradle. + If you use Ant, again check the Ant version supports the version of Java you are using. +

+
+
+ + + Can Apache POI be compiled/used with Java 9 or Java 10? + + +

Apache POI does not actively support Java 9 or Java 10 any longer as those versions were + obsoleted by Oracle already. See the previous FAQ entry for information about support for + Java LTS versions. +

+
+
+ + + Anything to consider when using IBM JDK? + + +

The IBM Java runtime is using a JIT compiler which doesn't behave sometimes. ;) + Especially when rendering slideshows it throws errors, which don't occur when debugging the code. + E.g. an ArrayIndexOutOfBoundsException is thrown in TexturePaintContext when the image contains + textures - see #62999 for more + details on how to detected JIT errors.

+

To prevent the JIT errors, the affected methods need be excluded from JIT compiling. + Currently (tested with IBM JDK 1.8.0_144 and _191) the following should be added to the VM parameters:
+

+ + -Xjit:exclude={sun/java2d/pipe/AAShapePipe.renderTiles(Lsun/java2d/SunGraphics2D;Ljava/awt/Shape;Lsun/java2d/pipe/AATileGenerator;[I)V},exclude={sun/java2d/pipe/AlphaPaintPipe.renderPathTile(Ljava/lang/Object;[BIIIIII)V},exclude={java/awt/TexturePaintContext.getRaster(IIII)Ljava/awt/image/Raster;} + +
+
+ + + Tomcat is reporting memory leaks caused by some class in Apache POI which uses ThreadLocal + + +

Apache POI uses Java ThreadLocals + in order to cache some data when Apache POI is used in a multi-threading environment (see also the FAQ about thread-safety above!) +

+

WebServers like Tomcat use thread-pooling to re-use threads to avoid the cost of frequent thread-startup and shutdown. + In order to guard against memory-leaks, Tomcat performs checks on allocated memory in ThreadLocals and reports them as warnings. +

+

In order to get rid of these warnings, Apache POI, starting with version 5.2.4, provides a utility ThreadLocalUtils which can + be used to clear all objects held in thread-local objects before returning the thread back to the global pool. +

+ + org.apache.poi.util.ThreadLocalUtil.clearAllThreadLocals(); + + // if you use poi-ooxml, also clear thread-locals in XMLBeans + org.apache.xmlbeans.ThreadLocalUtil.clearAllThreadLocals(); + +
+
+ + + How can I demand fixes or features in Apache POI to be done with urgency? + + +

Apache POI is an open source project developed by a very small group of volunteers. +

+

Currently no-one is paid to work on new features or bug-fixes. +

+

So it is considered fairly rude to "demand" things, especially "ASAP" is quite frowned + upon and may even reduce the likelihood that your issue is picked up and worked on. +

+

If you would like to increase chances that your problem is tackled, you can do a number of things + as follows, sorted by the amount of effort which may be required from you: +

+
    +
  • Ensure your bug-report is complete and contains instructions/samples which allow to reproduce the problem. + Ideally a self-sufficient test-case which does not need lots of manual setup.
  • +
  • Provide a summary of research of the root-cause of your problem.
  • +
  • Provide a patch which fixes the problem. We usually like to have unit-tests accompanying changes to + have high code-coverage and good confidence that issues are fixed and few regressions are introduced + over time.
  • +
  • Become a contributor! The entry threshold is actually not too high as soon as you provided your + first successful bugfix. If you think you can spare the time to contribute for some longer time, + becoming an official committer should not be too hard.
  • +
+
+
+ + + Does Apache POI support building reproducibly and/or producing reproducible output? + + +

There are two angles to reproducibility: building reproducible jars for Apache POI itself and making Apache POI + produce byte-for-byte identical files when it is used to create documents. +

+
    +
  • The build of jars for Apache POI should be reproducible since version 5.2.4 by removing the build-timestamp + from the generated Version.java. Make sure the exact same combination of build-tools is used, + especially the version of the JDK.
  • +
  • Producing reproducible output files will be supported in the future (after version 5.3.0), initial support is available in + nightly builds.
    + Note: Files are only written without timestamps if the environment variable SOURCE_DATE_EPOCH is set to a + non-empty value.
  • +
+

Please create a bug entry if you find things which break reproducibility, both for building and output files.
+ Please provide exact steps how to reproduce your issue! +

+

See https://reproducible-builds.org/ for general information about why reproducible builds + and output may be important. +

+
+
+
diff --git a/src/documentation/content/xdocs/help/index.xml b/src/documentation/content/xdocs/help/index.xml new file mode 100644 index 0000000000..b7f4fbd24c --- /dev/null +++ b/src/documentation/content/xdocs/help/index.xml @@ -0,0 +1,142 @@ + + + + + +
+ Mailing Lists + + + +
+ + +
Mailing Lists - Guidelines +

+ Before subscribing or participating in any of the mailing + lists, we suggest you read and understand the following + guidelines: +

+ +
+
Lists +
The POI Developer List +

+ Medium Traffic + View, + Participate and Subscribe to the Dev List +

+

+ This is the list where participating developers of the POI + project meet and discuss issues, code changes/additions, etc. + Subscribers to this list also get notices of each and every + code change, build results, testing notices, etc. + Do not send mail to this list with usage questions or + configuration problems. Use the POI User List or community sites + such as Stack Overflow, instead. +

+

+ Alternate options: + Subscribe + Unsubscribe + Old Archive + + Nabble + MarkMail +

+
+
The POI User List +

+ Low Traffic + View, + Participate and Subscribe to the User List +

+

+ This list is for users of POI to ask questions, share knowledge, + and discuss issues. POI developers are also expected to be + lurking on this list to offer support to users of POI. +

+

+ Alternate options: + Subscribe + Unsubscribe + Old Archive + + Nabble + MarkMail +

+
+
The POI General List +

+ Very Low Traffic + View, + Participate and Subscribe to the General List +

+

+ This list exists for general discussions on POI, not specific to + code or problems with code. Used for discussion of general matters + relating to all of the POI project, such as the website and + changes in procedures. +

+

+ Alternate options: + Subscribe + Unsubscribe + Old Archive +

+
+
+
Stack Overflow and other communities +

+ There are many POI users in the Stack Overflow community who have asked + and answered questions that may be similar to the problem you are facing. + Search for the apache-poi + tag on Stack Overflow. +

+

Regardless of which community you seek help from, remember to be courteous. + Short, working code examples, an explanation of observed and expected behavior, + the version of POI you are using, and genuine troubleshooting and research effort + on your part go a long way towards getting a helpful answer. +

+

Please read through the FAQ, + Quick Guide, + How To or + Cookbook, and + Examples + of the POI module that you are trying to use before consulting help. You may also find your + question has already been answered on the POI dev + or user mailing lists, + bugzilla, +

+
+ +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/images/add.png b/src/documentation/content/xdocs/images/add.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb9021c39371d12fb8ead442e9268336ca516fb GIT binary patch literal 626 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 literal 0 HcmV?d00001 diff --git a/src/documentation/content/xdocs/images/group.svg b/src/documentation/content/xdocs/images/group.svg new file mode 100644 index 0000000000..44da1b5512 --- /dev/null +++ b/src/documentation/content/xdocs/images/group.svg @@ -0,0 +1,522 @@ + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/documentation/content/xdocs/images/icon.png b/src/documentation/content/xdocs/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3be8bbbe65c73bfdd555f521844f5e343d789954 GIT binary patch literal 696 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 eRKOow@%saeUntTVfBD4#0000 + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TM +P +O +W +E +R +E +D + +B +Y + + \ No newline at end of file diff --git a/src/documentation/content/xdocs/images/project-header.png b/src/documentation/content/xdocs/images/project-header.png new file mode 100644 index 0000000000000000000000000000000000000000..92bf1b04db5c7ec94bc5ad95b3a681749079d844 GIT binary patch literal 9587 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 MSxc!_!7BX!0bY*ZR{#J2 literal 0 HcmV?d00001 diff --git a/src/documentation/content/xdocs/images/remove.png b/src/documentation/content/xdocs/images/remove.png new file mode 100644 index 0000000000000000000000000000000000000000..cdf8054f2f5a480eab1380faeb5060a7a6381c5a GIT binary patch literal 539 zcmV+$0_6RPP)WtSllZk{?AA5QHrx7&USh&f#)sawd83!_M2C$IQR)e--4MMTGKPVJA-EJdR;M z`dG$19$*eD5z%k&uZF~S;0*5Ip!M+vSJ8`z)qzemc$;$`$4%Ve4?hBCFcT49a?U!f zliezU|04!d7*8q9Mnu0;dUg(XZ5~I_G)?oO$~lkW6|${i0cUHR-Ucx^gz36iV>_@5 zC%QP^BKx?HS=1W{{3y4()Zz|TIp=T1$nX&tBVulpBjubA;9ZMatA}jTEj22}hSpUV zOPDA`!gS7gFTXvy4%W(8wz1qTvpLaf?B!DZ4Fvmt>GML3hyU16ZBWBvtLW9};q5lq z<~<(OSizMoiml>aL@afhrjb(mP=3PHCd7W?X+&IuPRX&gl+rwQmqG80DE1XkBI3dz zs5?#53=;c$O6eIsV_&gQcbzM~#_fo>-cJ2?z_ycnqD0zB9KoLQ*(bcjb3BfSWtg0t dw79qkegWCzhl#uwjOzdZ002ovPDHLkV1oSV>lOe2 literal 0 HcmV?d00001 diff --git a/src/documentation/content/xdocs/images/update.png b/src/documentation/content/xdocs/images/update.png new file mode 100644 index 0000000000000000000000000000000000000000..339f99dd16f955202a95d8c2e4cbcbbf6fa8e563 GIT binary patch literal 665 zcmV;K0%rY*P)9s3EjaNmnhbrJ)N~x(H&d zO^X)hLIM{`Ekp!K5M5|Qprj%#ey5GaAVh6a7Y)zNz3}+?d$aKik9Y4o?|kn$-*eAt zAR=U@vTiWM2lxnEFoPBka0B1tCLU#GyRfied3kxdZQJQ)jBFaav556n#vOc)>sXC% zu&b%oh=^Ii zBrav(6Etik&@j*T^_iUC&P%Q3P~GxK`=FgG`+ZCj9;e@Dc%8qs+E1MI+j*+0Qo zm8=$QG#YgydZD2yu&=YfiOb_xX$&7@dr#$;n}~P^8%hfIGxPRJcO@d$Vk=%K zJ{1lAc*bFNcGmp-d>@(T#!4iUY)wRL!^>mgSNxQjOMPUSDI(s+YvpqeaHfZ_!A@M9 zMA#|VX}nq1-%b^>O3;0Nz^^^g)ebw*A^R6UPxZ)i9-n3AQdg&lsHwK)b}V*$MmXO` zxE=3~r6x10Zu@ZoFBQ{&_&PHmHxbcxn!82!kh?fr+EEdIFW&0>^FO}J%tJFXGX@>Q zFZjI-)jCPuDC4OQk8n0K55aIaG*wQ&f<2je5QlNA^mQMel;{s<<|kF((P*TJh}ZE? zX8zR?e?4}UF|`@%O68Yu8&`2IGykm9s1A^)JEgn024g*N00000NkvXXu0mjf_O~MH literal 0 HcmV?d00001 diff --git a/src/documentation/content/xdocs/images/usemap.gif b/src/documentation/content/xdocs/images/usemap.gif new file mode 100644 index 0000000000000000000000000000000000000000..91a8e6c385da2fd174b4381b14e71fc483a00963 GIT binary patch literal 1688 zcmd5+Nl#N@6n!lyR1LuxDx%_}kD^QtR9Y3%SEmk?LKUr1v9Ztz1+1kg)@kcnH?ABa zA&5ha3nyY+=z;`@O)yb|#;tMVU+|oKFYoEbxU@O_60&=sY&7wo0gWKlPrVc1E4ev7=&e-K)E5%7!0^1 zL~zF6RHe?0XAuqV0u?569T1+%r-$djKwijLClAg@4eQaRF5&j8&?|acILw*OgN)I7 z548aJ#8MFp7?j?j~OpxoR+xomnpbHfphO3!x^1<1kTOf2agmc!PyVv;Ip6Z zfiqujgU`SOw6oxO|Blmoz)KO})%>wQ#-_^f$u**V1%$QghgFKyI=9e{J|-%fc{HVd zg~8SK;o?9rz8bC_78>SIpPli=UXVaAX@%1|6a@!3F)z%06|~|MXd|q_t9G&Aw=Y|m z=!WhYvW@<@J{5s`5|)oQf^D3j%+lyA{roh&Fm+<~8REs~88Dy*g?^pZDh=W6bI`Xp zprYl~ouVE5_S&k(=-dlERuzsl+GlS%cy@CyMUVG)_QI*=|5#vQvIkCd{*?$nKIxym zWwb877!mpTX`wnV-@u*!j(SU_N5pDTsaf8^%}T1t4A~e4vC+K5l6Ual0F#iiWl&Zx z;8Y{UN$pB`oJE>J_G|^U7Wb7yfDJ7i?vz@=Mh);fWu766;Urvumwz6lY90buE040J)XhbJn#aC^E?02Rgy*@+_#GWuH+K3y@jy@O Jj@2x+{Q@@}L)QQR literal 0 HcmV?d00001 diff --git a/src/documentation/content/xdocs/index.xml b/src/documentation/content/xdocs/index.xml new file mode 100644 index 0000000000..b96aece515 --- /dev/null +++ b/src/documentation/content/xdocs/index.xml @@ -0,0 +1,259 @@ + + + + + +
+ Apache POI™ - the Java API for Microsoft Documents +
+ + +
Project News + +
8 April 2025 - CVE-2025-31672 - Improper Input Validation vulnerability in Apache POI before 5.4.0 +

+ While parsing of OOXML format files like xlsx, docx and pptx, a specially crafted file could + be used to provide multiple entries with the same name in the zip-compressed file-format. +
+ Products reading the affected file could read different data because one of the zip entries with the + duplicate name is selected over another by different products differently.

+ This issue affects Apache POI component poi-ooxml before 5.4.0. Starting with 5.4.0 poi-ooxml performs + a check that throws an exception if zip entries with duplicate file names are found in the input file.

+ Users are recommended to upgrade to version poi-ooxml 5.4.0 or later, which fixes the issue. + Please refer to our security guidelines + for recommendations about how to use the POI libraries securely. +

+

+ References: +

+ +
+ + +
6 April 2025 - POI 5.4.1 available +

The Apache POI team is pleased to announce the release of 5.4.1. + Several dependencies were updated to their latest versions to pick up security fixes and other improvements.

+

A summary of changes is available in the + Release Notes. + A full list of changes is available in the change log. + People interested should also follow the dev list to track progress.

+

See the downloads page for more details.

+

POI requires Java 8 or newer since version 4.0.1.

+
+ +
11 November 2024 - Avoid log4j-api 2.24.1 +

While testing a potential Apache POI 5.4.0 release, we discovered a serious bug in + log4j-api 2.24.1. This leads to NullPointerExceptions when you use a version of log4j-core that is not of + the exact same version (2.24.1). We recommend that users avoid log4j 2.24.1 and use the latest + 2.24.x version where this issue is fixed again.

+

XMLBeans release 5.2.2 had the problematic log4j-api 2.24.1 dependency and thus + can lead to such issues if used in some other context. In the meantime a version 5.3.0 + of XmlBeans was released which avoids this issue.

+

Please direct any queries to the Log4j Team. The main issue is + Issue 3143.

+
+ +
4 March 2022 - CVE-2022-26336 - A carefully crafted TNEF file can cause an out of memory exception in Apache POI poi-scratchpad versions prior to 5.2.0 +

Description:
+ A shortcoming in the HMEF package of poi-scratchpad (Apache POI) allows an attacker to cause an Out of Memory exception. + This package is used to read TNEF files (Microsoft Outlook and Microsoft Exchange Server). + If an application uses poi-scratchpad to parse TNEF files and the application allows untrusted users to supply them, then a carefully crafted file can cause an Out of Memory exception.

+ +

Mitigation:
+ Affected users are advised to update to poi-scratchpad 5.2.1 or above + which fixes this vulnerability. It is recommended that you use the same versions of all POI jars.

+ +
+ +
10+16+18 December 2021- Log4j vulnerabilities CVE-2021-44228, CVE-2021-45046 and CVE-2021-45105 +

The Apache POI PMC has evaluated the security vulnerabilities reported + for Apache Log4j.

+

POI 5.1.0 and XMLBeans 5.0.2 only have dependencies on log4j-api 2.14.1. + The security vulnerabilities are not in log4j-api - they are in log4j-core.

+

If any POI or XMLBeans user uses log4j-core to control their logging of their application, + we strongly recommend that they upgrade all their log4j dependencies to the latest + version (currently v2.20.0) - including log4j-api.

+
+ +
13 January 2021 - CVE-2021-23926 - XML External Entity (XXE) Processing in Apache XMLBeans versions prior to 3.0.0 +

Description:
+ When parsing XML files using XMLBeans 2.6.0 or below, the underlying parser + created by XMLBeans could be susceptible to XML External Entity (XXE) attacks.

+ +

This issue was fixed a few years ago but on review, we decided we should have a CVE + to raise awareness of the issue.

+ +

Mitigation:
+ Affected users are advised to update to Apache XMLBeans 3.0.0 or above + which fixes this vulnerability. XMLBeans 4.0.0 or above is preferable.

+ +

References: + XML external entity attack +

+
+ +
20 October 2019 - CVE-2019-12415 - XML External Entity (XXE) Processing in Apache POI versions prior to 4.1.1 +

Description:
+ When using the tool XSSFExportToXml to convert user-provided Microsoft + Excel documents, a specially crafted document can allow an attacker to + read files from the local filesystem or from internal network resources + via XML External Entity (XXE) Processing.

+ +

Mitigation:
+ Apache POI 4.1.0 and before: users who do not use the tool XSSFExportToXml + are not affected. Affected users are advised to update to Apache POI 4.1.1 + which fixes this vulnerability.

+ +

Credit: + This issue was discovered by Artem Smotrakov from SAP

+ +

References: + XML external entity attack +

+
+ + + +
26 March 2019 - XMLBeans 3.1.0 available +

The Apache POI team is pleased to announce the release of XMLBeans 3.1.0. + Featured are a handful of bug fixes.

+

The Apache POI project has unretired the XMLBeans codebase and is maintaining it as a sub-project, + due to its importance in the poi-ooxml codebase.

+

A summary of changes is available in the + Release Notes. + People interested should also follow the POI dev list to track progress.

+

The XMLBeans JIRA project has been reopened and feel free to open issues.

+

POI 4.1.0 uses XMLBeans 3.1.0.

+

XMLBeans requires Java 6 or newer since version 3.0.2.

+
+ +
11 January 2019 - Initial support for JDK 11 +

We did some work to verify that compilation with Java 11 is working and + that all unit-tests pass. +

+

See the details in the FAQ entry.

+
+
+ +
Mission Statement +

+ The Apache POI Project's mission is to create and maintain Java APIs for manipulating various file formats + based upon the Office Open XML standards (OOXML) and Microsoft's OLE 2 Compound Document format (OLE2). + In short, you can read and write MS Excel files using Java. + In addition, you can read and write MS Word and MS PowerPoint files using Java. Apache POI is your Java Excel + solution (for Excel 97-2008). We have a complete API for porting other OOXML and OLE2 formats and welcome others to participate. +

+

+ OLE2 files include most Microsoft Office files such as XLS, DOC, and PPT as well as MFC serialization API based file formats. + The project provides APIs for the OLE2 Filesystem (POIFS) and + OLE2 Document Properties (HPSF). +

+

+ Office OpenXML Format is the new standards based XML file format found in Microsoft Office 2007 and 2008. + This includes XLSX, DOCX and PPTX. The project provides a low level API to support the Open Packaging Conventions + using openxml4j. +

+

+ For each MS Office application there exists a component module that attempts to provide a common high level Java api to both OLE2 and OOXML + document formats. This is most developed for Excel workbooks (SS=HSSF+XSSF). + Work is progressing for Word documents (WP=HWPF+XWPF) and + PowerPoint presentations (SL=HSLF+XSLF). +

+

+ The project has some support for Outlook (HSMF). Microsoft opened the specifications + to this format in October 2007. We would welcome contributions. +

+

+ There are also projects for + Visio (HDGF and XDGF), + TNEF (HMEF), + and Publisher (HPBF). +

+

+ As a general policy we collaborate as much as possible with other projects to + provide this functionality. Examples include: Cocoon for + which there are serializers for HSSF; + Open Office.org with whom we collaborate in documenting the + XLS format; and Tika / + Lucene, + for which we provide format interpretors. When practical, we donate + components directly to those projects for POI-enabling them. +

+
Why should I use Apache POI? +

+ A major use of the Apache POI api is for Text Extraction applications + such as web spiders, index builders, and content management systems. +

+

+ So why should you use POIFS, HSSF or XSSF? +

+

+ You'd use POIFS if you had a document written in OLE 2 Compound Document Format, probably written using + MFC, that you needed to read in Java. Alternatively, you'd use POIFS to write OLE 2 Compound Document Format + if you needed to inter-operate with software running on the Windows platform. We are not just bragging when + we say that POIFS is the most complete and correct implementation of this file format to date! +

+

+ You'd use HSSF if you needed to read or write an Excel file using Java (XLS). You'd use + XSSF if you need to read or write an OOXML Excel file using Java (XLSX). The combined + SS interface allows you to easily read and write all kinds of Excel files (XLS and XLSX) + using Java. Additionally there is a specialized SXSSF implementation which allows to write + very large Excel (XLSX) files in a memory optimized way. +

+
+
Components +

+ The Apache POI Project provides several component modules some of which may not be of interest to you. + Use the information on our Components page to determine which + jar files to include in your classpath. +

+
+
+ +
Contributing +

+ So you'd like to contribute to the project? Great! We need enthusiastic, + hard-working, talented folks to help us on the project, no matter your + background. So if you're motivated, ready, and have the time: Download the + source from the + Subversion Repository, + build the code, join the + mailing lists, and we'll be happy to + help you get started on the project! +

+

+ Please read our Contribution Guidelines. + When your contribution is ready submit a patch to our + Bug Database. +

+
+ +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
\ No newline at end of file diff --git a/src/documentation/content/xdocs/legal.xml b/src/documentation/content/xdocs/legal.xml new file mode 100644 index 0000000000..b5113e2574 --- /dev/null +++ b/src/documentation/content/xdocs/legal.xml @@ -0,0 +1,100 @@ + + + + + +
+ Apache POI™ - Legal Stuff + + + + +
+ + +
License and Notice +

+ Apache POI™ releases are available under the Apache License, Version 2.0. + See the NOTICE file contained in each release artifact for applicable copyright attribution notices. Release artifacts are available + from the Download page. +

+
+
Copyrights and Trademarks +

+All material on this website is Copyright © 2002-2025, The Apache +Software Foundation. +

+

+Apache POI, POI, Apache, the Apache feather logo, and the Apache POI +project logo are trademarks of The Apache Software Foundation. +

+

+Sun, Sun Microsystems, Solaris, Java, JavaServer Web Development Kit, +and JavaServer Pages are trademarks or registered trademarks of Sun +Microsystems, Inc. UNIX is a registered trademark in the United States +and other countries, exclusively licensed through 'The Open Group'. +Microsoft, Windows, WindowsNT, Excel, Word, PowerPoint, Visio, Publisher, Outlook, +and Win32 are registered trademarks of Microsoft Corporation. +Linux is a registered trademark of Linus Torvalds. +All other product names mentioned herein and throughout the entire +web site are trademarks of their respective owners. +

+
Cryptography Notice +

+ This distribution includes cryptographic software. The country in + which you currently reside may have restrictions on the import, + possession, use, and/or re-export to another country, of + encryption software. BEFORE using any encryption software, please + check your country's laws, regulations and policies concerning the + import, possession, or use, and re-export of encryption software, to + see if this is permitted. See + http://www.wassenaar.org/ + for more information. +

+ +

+ The U.S. Government Department of Commerce, Bureau of Industry and + Security (BIS), has classified this software as Export Commodity + Control Number (ECCN) 5D002.C.1, which includes information security + software using or performing cryptographic functions with asymmetric + algorithms. The form and manner of this Apache Software Foundation + distribution makes it eligible for export under the License Exception + ENC Technology Software Unrestricted (TSU) exception (see the BIS + Export Administration Regulations, Section 740.13) for both object + code and source code. +

+ +

+ The cryptographic software used is from java.security and + javax.crypto and is used when processing encrypted and + protected documents. +

+
+
+ +
+ + Copyright (c) @year@ The Apache Software Foundation All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/news.xml b/src/documentation/content/xdocs/news.xml new file mode 100644 index 0000000000..c6854515b2 --- /dev/null +++ b/src/documentation/content/xdocs/news.xml @@ -0,0 +1,233 @@ + + + + + +
+ Apache POI™ - In the News over the world + + + + +
+ + +
POI in the news +

+ These are articles/etc. posted about POI around the web. If you + see POI in the news or mentioned at least somewhat prominently + on a site (not your homepage that you put the work POI on in + order to get us to link you and by the why here is a picture of + your wife in kids) then send a patch to the list. In general + equal time will be given so please feel free to send inflammatory + defamation as well as favorable, technical and factual. Really + stupid things won't be mentioned (sorry). +

+
+
English + +
+
Nederlandstalige (Dutch) + +
+
Deutsch (German) + +
+
Español (Spanish) + +
+
Français (French) + +
+
Nihongo (Japanese) + +
+
Russkii Yazyk (Russian) + +
+
Hangul (Korean) + +
+
No freaking idea +

+ If you can read one of these languages, send mail to the list + telling us what language it is and we'll categorize it! +

+ +
+ +
+ + Copyright (c) @year@ The Apache Software Foundation All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/related-projects.xml b/src/documentation/content/xdocs/related-projects.xml new file mode 100644 index 0000000000..c6bc2ef8a3 --- /dev/null +++ b/src/documentation/content/xdocs/related-projects.xml @@ -0,0 +1,254 @@ + + + + + +
+ Apache POI™ - Related Projects +
+ + +
+ Introduction +

+ This page lists other projects that you might find interesting when working with documents of various types. Suggestions for additional links are welcome, however please note that we only list open source projects here. Commercial applications can provide case studies if they want to show their support for POI. +

+
+
+ Apache projects +
+ Apache Tika +

+ Apache Tika + is a toolkit which detects and extracts metadata and text from over a thousand different file types. +

+
+
+ Apache Drill +

+ Apache Drill + is a toolkit that allows the use of SQL querying on numerous file and data formats. The POI support is in + the excel-format-plugin. +

+
+
+ Apache Hop +

+ Apache Hop + is a data orchestration and data engineering platform. The POI support is in + the excelinput transform + and the excelwriter transform. + +

+
+
+ Apache DolphinScheduler +

+ Apache DolphinScheduler + is a distributed and easy-to-extend visual workflow scheduler system. The POI support is in + the alert email component. + +

+
+
+ Worksheet plugin for JSPWiki +

+ There is a Worksheet + plugin for JSPWiki which allows you to display contents of Excel + files as a table in JSPWiki. +

+
+
+
+ Apache incubating projects +
Apache Linkis +

+ Apache Linkis (incubating) is a computation middleware layer. + The linkis-storage component has an Excel read capability built using Apache Poi. +

+
+
Apache Seatunnel +

+ Apache Seatunnel (incubating) is a high-performance, distributed, massive data integration framework. + The seatunnel-connector-spark-email component uses Apache Poi. +

+
+
Apache ODF Toolkit (retired) +

+ Apache ODF Toolkit (incubating) is a set of Java modules that allow programmatic creation, scanning and manipulation of OpenDocument Format (ISO/IEC 26300 == ODF) documents. + See also new website. +

+
+ +
Apache Corinthia (retired) +

+ Apache Corinthia (incubating) is a toolkit/application written in C++ for converting between and editing common office file formats, with an initial focus on word processing. +

+
+
+
+ Other projects +
Jackcess +

+ Jackcess is a pure Java library for reading from and writing to MS Access databases available under Apache License 2.0. +

+
+
poi-mail-merge +

+ poi-mail-merge is a small tool to automate mail-merges, i.e. replacing strings in a template Microsoft Word file multiple times with data from a list of replacements + provided as Excel/CSV data. Available under the BSD 2-Clause License. +

+
+
poi-visio +

Merged into POI as of version 3.14

+

+ poi-visio is a Java library that loads Visio OOXML (vsdx) files and creates an in-memory data structure that allows full access to the contents of the document. + There is built-in support for easily traversing the content of the document in a structured way, and can render pages to simplified PNG files, or other backends supported by Java AWT. + Currently, the library only operates in read-only mode, but its design does not exclude being able to modify existing documents or creating new documents. + Available under the Apache License, Version 2.0. +

+
+
poi-visio-graph +

+ poi-visio-graph is a Java library that loads Visio OOXML (vsdx) files using the poi-visio library and creates an in-memory graph structure from the objects present on the page. + It utilizes user-specified connection points and also performs analysis to infer logical visual connection points between the objects on each page. + One possible use of this library is to create a network diagram from a Visio document. + Available under the Apache License, Version 2.0. +

+
+
NPOI +

+ NPOI is a .NET version of Apache POI available under Apache License 2.0. +

+
+
Vaadin Spreadsheet +

+ Vaadin Spreadsheet is a UI component add-on for Vaadin 7 which provides means to view and edit Excel spreadsheets in Vaadin applications. + Available under the Commercial Vaadin Add-on License version 3 (CVALv3). +

+
+
Excel module for Apache Isis +

+ Excel module for Apache Isis is an add on for Apache Isis and provides a domain service so that a collection of (view model) + object scan be exported to an Excel spreadsheet, or recreated by importing from Excel. + Available under the Apache License, Version 2.0. +

+
+
Excel Streaming Reader +

+ Excel Streaming Reader uses the POI Streaming API to provide Row/Cell like read-access to large Excel spreadsheets. + Available under the Apache License, Version 2.0. +

+

+ Forked Version that supports the latest POI versions. + Has support for a number of extra features, including Strict OOXML files. + Also, available under the Apache License, Version 2.0. +

+
+
fast-excel +

+ fastexcel is a benchmarked library for reading and writing Excel files. + Available under the Apache License, Version 2.0. +

+
+
poi-shared-strings +

+ poi-shared-strings is a memory efficient Shared Strings Table and Comments Table implementation for POI streaming. + Available under the Apache License, Version 2.0. +

+
+
The Wordinator +

+ The Wordinator abstracts the general problem of mapping from XML (or any similar structured content--with XSLT 3 you could just as easily process JSON content or some other format) to word processing data through a relatively simple XML structure, the Simple Word Processing Markup Language (SWPX), which is basically OOXML simplified way down. + Available under the Apache License, Version 2.0. +

+
+
POI-TL +

+ POI-TL is a Word template engine that generates new documents based on a Word template and data. + Available under the Apache License, Version 2.0. +

+
+
XDocReport +

+ XDocReport is a Java API to merge XML document created with MS Office (docx) or OpenOffice (odt), + LibreOffice (odt) with a Java model to generate report and convert it if you need to another format (PDF, XHTML...). + XDocReport code is license under MIT license but the samples are licensed under LGPL license. +

+
+
Frosted Sheets +

+ Frosted Sheets is a Groovy library which provides decorators for Apache POI spreadsheets, making it easier to work with spreadsheets + in Groovy. + Frosted Sheets is license under the Apache License, Version 2.0. +

+
+
IEXL Software +

+ iEXL is a commercial product which allows you to generate Excel spreadsheets on AS/400, iSeries, i5 or IBM i on Power systems. + It uses Apache POI internally. +

+
+
jotlmsg +

+ jotlmsg is a simple API (on top of POI) to easily generate Microsoft Outlook message files (.msg). +

+
+
HadoopOffice +

+ HadoopOffice allows you to read and write Office documents while using the Hadoop ecosystem. + Available under the Apache License, Version 2.0. +

+
+
Scala POI Wrapper +

+ SPOIWO allows you to read and write Office documents using Scala friendly APIs. + Available under the MIT License. +

+
+
Spark Excel +

+ Spark Excel allows you to read and write Excel documents into/from Spark Dataframes. + Available under the Apache License, Version 2.0. +

+
+
ExcelUtil +

+ ExcelUtil is a Java wrapper using Apache POI to read and write Excel files in declarative fashion. + Available under the Apache License, Version 2.0. +

+
+
bld-commons/dev-excel +

+ dev-excel is a Java wrapper using Apache POI to read and write Excel files. + Available under the MIT License. +

+
+
+ +
+ + Copyright (c) @year@ The Apache Software Foundation All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/security.xml b/src/documentation/content/xdocs/security.xml new file mode 100644 index 0000000000..a902f05a8a --- /dev/null +++ b/src/documentation/content/xdocs/security.xml @@ -0,0 +1,114 @@ + + + + + + +
+ Apache POI™ - Security guidance + + + +
+ + +
+ Overview + +

This page provides some guidance about how Apache POI can be used in security-sensible areas.

+
+ +
+ Information about related security vulnerabilities + +

Information about security issues is included in the Project News.

+
+ +
+ Reporting security vulnerabilities + +

Apache POI will try to fix security-related bugs with priority.

+ +

Please follow the general Apache Security Guidelines + for proper handling.

+ +

But please note that by the nature of processing external files, you should design your application + in a way which limits impact of malicious documents as much as possible. The higher your security-related + requirements are, the more you likely need to invest in your application to contain effects. +

+
+ +
+ Architecting your Application + +

If you are processing documents from an untrusted source, you should add a number of safeguards to + your application to contain any unexpected side effects.

+ +

Apache POI cannot fully protect against some documents causing impact on the current process, therefore + we suggest the following additional layers of security.

+ +
    +
  • Expect any type of Exception when processing documents
    + As parsing the various formats is very complex and involved, there are some unexpected types of + exceptions which can be thrown. E.g. StackOverflowError or many different types of RuntimeException. +
    + Make sure to have a broad catch-statement around your document-parsing functionality and be prepared + to handle all those gracefully. +
  • +
  • Expect long parsing time
    + As parsing the various formats is very complex and involved, some documents might cause prolonged CPU + usage and long parsing time. +
    + If this is a concern, make sure to have a way to stop processing after some time, maybe by the + sandboxing approach described below. +
  • +
  • Memory use can be very high
    + The data in Microsoft format files is usually compressed so even small files can have a lot of data. +
    + The core POI APIs are not optimized to avoid excessive memory use. POI has streaming APIs for reading + and writing xlsx files - so if you are working with large xlsx files, you should consider using the + streaming APIs. +
  • +
  • Consider sandboxing document-parsing
    + If you operate in a highly sensitive environment and would like to avoid any side effect from + parsing documents on your application, then consider extracting the parsing logic into a separate + process which is configured with appropriate memory settings and which you stop after some timeout. + It is a good idea to be able to auto-restart the process in case of a crash. +
    +
  • +
  • Keep up to date with releases
    + Apache POI does occasionally issue CVEs for security issues. There are also other bug fixes and + improvements in each release. Some of these fixes will be to make POI more robust against malicious + inputs, even if they are not explicitly security-related. +
    +
  • +
+
+ + +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/content/xdocs/site.xml b/src/documentation/content/xdocs/site.xml new file mode 100644 index 0000000000..e7f10e9379 --- /dev/null +++ b/src/documentation/content/xdocs/site.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/documentation/content/xdocs/status.copy_module_from_bugzilla.py b/src/documentation/content/xdocs/status.copy_module_from_bugzilla.py new file mode 100644 index 0000000000..b7bf8f979e --- /dev/null +++ b/src/documentation/content/xdocs/status.copy_module_from_bugzilla.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 +""" + ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ==================================================================== +""" + +"""This is a really crude throwaway script to get data out of Bugzilla and into status.xml +It'd be far better to have Forrest look this information up whenever the site is rebuilt. +Hopefully this is a one time effort +If a closed bug's component is changed in Bugzilla, this script could be used to keep the changelog in sync. + +requires Python 3.1+ +(Python 2.x doesn't do Unicode in CSVs nicely) +""" + +import csv, io +import sys +import requests + +def get_fixesbug_attr(line): + pieces = [x.strip() for x in line.split('"')] + bugs = pieces[pieces.index('fixes-bug=') + 1] + return bugs + +def get_bugzilla_bug_to_component(): + print("Fetching details of POI bugs, please wait...") + bugzilla_bug_to_component = {} + r = requests.get('https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__all__&limit=0&no_redirect=1&product=POI&query_format=advanced&ctype=csv&human=1') + with io.StringIO(r.text) as f: + csvreader = csv.DictReader(f) + for row in csvreader: + bugzilla_bug_to_component[row['Bug ID']] = row['Component'] + return bugzilla_bug_to_component + + +def unique(seq): + seen = set() + for x in seq: + if x not in seen: + seen.add(x) + yield x + +def add_module_frombugzilla_attr(line): + """Add module_frombugzilla="XSSF" to tag + + line is a string, containing the opening tag + """ + global bugzilla_bug_to_component + assert 'module=' not in line, \ + "Invalid action line, should not already contain module: %s" % line + + bugs = [x.strip() for x in get_fixesbug_attr(line).split(',')] + modules = filter(bool, [bugzilla_bug_to_component.get(bug) for bug in bugs]) + module_frombugzilla = ','.join(unique(modules)) + line_with_module_frombugzilla = line.replace('>', ' module="{}">'.format(module_frombugzilla), 1) + return line_with_module_frombugzilla + +def add_module_attribute(inputfile, outputfile): + print("Generating %s from %s and Bugzilla details"%(outputfile,inputfile)) + with open(inputfile, 'r') as infile, open(outputfile, 'w') as outfile: + for line in infile: + if ' + + + + + + + + + + + + + diff --git a/src/documentation/content/xdocs/text-extraction.xml b/src/documentation/content/xdocs/text-extraction.xml new file mode 100644 index 0000000000..e93636aef7 --- /dev/null +++ b/src/documentation/content/xdocs/text-extraction.xml @@ -0,0 +1,186 @@ + + + + + +
+ Apache POI™ - Text Extraction + + + +
+ + +
Overview +

For a number of years now, Apache POI has provided basic + text extraction for all the project supported file formats. In + addition, as well as the (plain) text, these provides access to + the metadata associated with a given file, such as title and + author.

+

For more advanced text extraction needs, including Rich Text + extraction (such as formatting and styling), along with XML and + HTML output, Apache POI works closely with + Apache Tika to deliver + POI-powered Tika Parsers for all the project supported file formats.

+

If you are after turn-key text extraction, including the latest + support, styles etc, you are strongly advised to make use of + Apache Tika, which builds + on top of POI to provide Text and Metadata extraction. If you wish + to have something very simple and stand-alone, or you wish to make + heavy modifications, then the POI provided text extractors documented + below might be a better fit for your needs.

+
+ +
Common functionality +

All of the POI text extractors extend from + org.apache.poi.extractor.POITextExtractor. This provides a common + method across all extractors, getText(). For many cases, the text + returned will be all you need. However, many extractors do provide + more targeted text extraction methods, so you may wish to use + these in some cases.

+

All POIFS / OLE 2 based text extractors also extend from + org.apache.poi.extractor.POIOLE2TextExtractor. This additionally + provides common methods to get at the HPFS + document metadata.

+

All OOXML based text extractors also extend from + org.apache.poi.POIOOXMLTextExtractor. This additionally + provides common methods to get at the OOXML metadata.

+
+ +
Text Extractor Factory +

POI provides a common class to select the appropriate text extractor + for you, based on the supplied document's contents. + ExtractorFactory provides a + similar function to WorkbookFactory. You simply pass it an + InputStream, a File, a POIFSFileSystem or a OOXML Package. It + figures out the correct text extractor for you, and returns it.

+

For complete detection and text extractor auto-selection, users + are strongly encouraged to investigate + Apache Tika.

+
+ +
Excel +

For .xls files, there is + org.apache.poi.hssf.extractor.ExcelExtractor, which will + return text, optionally with formulas instead of their contents. + Similarly, for .xlsx files there is + org.apache.poi.xssf.extractor.XSSFExcelExtractor, which + provides the same functionality.

+

For those working in constrained memory footprints, there are + two more Excel text extractors available. For .xls files, it's + org.apache.poi.hssf.extractor.EventBasedExcelExtractor, + based on the streaming EventUserModel code, and will generally + deliver a lower memory footprint for extraction. However, it will + have problems correctly outputting more complex formulas, as it + works with records as they pass, and so doesn't have access to all + parts of complex and shared formulas. For .xlsx files the equivalent is + org.apache.poi.xssf.extractor.XSSFEventBasedExcelExtractor, + which is based on the XSSF SAX Event codebase.

+
+ +
Word +

For .doc files from Word 97 - Word 2003, in scratchpad there is + org.apache.poi.hwpf.extractor.WordExtractor, which will + return text for your document.

+

You can also extract simple textual content from + older Word 6 and Word 95 files, using the scratchpad class + org.apache.poi.hwpf.extractor.Word6Extractor.

+

For .docx files, the relevant class is + org.apache.poi.xwpf.extractor.XWPFWordExtractor

+
+ +
PowerPoint +

For .ppt and .pptx files, there is common extractor + org.apache.poi.sl.extractor.SlideShowExtractor.SlideShowExtractor, which + will return text for your slideshow, optionally restricted to just + slides text or notes text. For .ppt you need to add the poi-scratchpad.jar + and for .pptx the poi-ooxml.jar and its dependencies are needed

+
+ +
Publisher +

For .pub files, in scratchpad there is + org.apache.poi.hpbf.extractor.PublisherExtractor, which + will return text for your file.

+
+ +
Visio +

For .vsd files, in scratchpad there is + org.apache.poi.hdgf.extractor.VisioTextExtractor, which + will return text for your file.

+
+ +
Embedded Objects +

Extractors already exist for Excel, Word, PowerPoint and Visio; + if one of these objects is embedded into a worksheet, the ExtractorFactory class can be used to recover an extractor for it. +

+ +FileInputStream fis = new FileInputStream(inputFile); +POIFSFileSystem fileSystem = new POIFSFileSystem(fis); +// Firstly, get an extractor for the Workbook +POIOLE2TextExtractor oleTextExtractor = + ExtractorFactory.createExtractor(fileSystem); +// Then a List of extractors for any embedded Excel, Word, PowerPoint +// or Visio objects embedded into it. +POITextExtractor[] embeddedExtractors = + ExtractorFactory.getEmbededDocsTextExtractors(oleTextExtractor); +for (POITextExtractor textExtractor : embeddedExtractors) { + // If the embedded object was an Excel spreadsheet. + if (textExtractor instanceof ExcelExtractor) { + ExcelExtractor excelExtractor = (ExcelExtractor) textExtractor; + System.out.println(excelExtractor.getText()); + } + // A Word Document + else if (textExtractor instanceof WordExtractor) { + WordExtractor wordExtractor = (WordExtractor) textExtractor; + String[] paragraphText = wordExtractor.getParagraphText(); + for (String paragraph : paragraphText) { + System.out.println(paragraph); + } + // Display the document's header and footer text + System.out.println("Footer text: " + wordExtractor.getFooterText()); + System.out.println("Header text: " + wordExtractor.getHeaderText()); + } + // PowerPoint Presentation. + else if (textExtractor instanceof PowerPointExtractor) { + PowerPointExtractor powerPointExtractor = + (PowerPointExtractor) textExtractor; + System.out.println("Text: " + powerPointExtractor.getText()); + System.out.println("Notes: " + powerPointExtractor.getNotes()); + } + // Visio Drawing + else if (textExtractor instanceof VisioTextExtractor) { + VisioTextExtractor visioTextExtractor = + (VisioTextExtractor) textExtractor; + System.out.println("Text: " + visioTextExtractor.getText()); + } +} + +
+ + +
+ + Copyright (c) @year@ The Apache Software Foundation. All rights reserved. +
+ Apache POI, POI, Apache, the Apache feather logo, and the Apache + POI project logo are trademarks of The Apache Software Foundation. +
+
+
diff --git a/src/documentation/publish-poi-site.txt b/src/documentation/publish-poi-site.txt new file mode 100644 index 0000000000..25376fa05c --- /dev/null +++ b/src/documentation/publish-poi-site.txt @@ -0,0 +1,61 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + + + ============================== + Publishing POI Web Site + ============================== + +The Apache POI web site is https://poi.apache.org/ + +The HTML and other files for the web site are stored in svn at https://svn.apache.org/repos/asf/poi/site +Committing files to the `publish` directory of this repo will automatically lead to the web site being updated. +There may be a small delay and you might need to force a refresh in your browser. + +The site is built from using the main POI svn at https://svn.apache.org/repos/asf/poi/trunk + +Prerequisites +------------- + +You will need an up to date version of Apache Ant installed (Ant 1.10 works well). +You also need to install Apache Forrest. Forrest is no longer maintained but PJ has a fork with a few small changes. +This is at https://github.com/pjfanning/apache-forrest-0.9 + +You can use the last official Apache Forrest release but you may notice some diffs when you build the site and try to +publish it. https://forrest.apache.org/ + +You will need to create an environment variable called FORREST_HOME and set it to match the directory location +where you installed Apache Forrest. + +Building and Deploying the Site +------------------------------- + +It is recommended that you open a command prompt and set up Java 8 as your default. The web site build will fail +if you use a very recent Java version. + +In your local copy of the POI svn (https://svn.apache.org/repos/asf/poi/trunk), run: + +ant site + +After this completes, you can copy the files in `build/site` to the `publish` directory in your poi-site checkout +(https://svn.apache.org/repos/asf/poi/site). + +A command like this might work. + +cp -r ~/svn/poi/build/site/* ~/svn/poi-site/publish/ + +I would recommend that you use `svn stat` and `svn diff` before committing the changes to poi-site. diff --git a/src/documentation/release-guide.txt b/src/documentation/release-guide.txt new file mode 100644 index 0000000000..8012729daf --- /dev/null +++ b/src/documentation/release-guide.txt @@ -0,0 +1,367 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + + + ============================== + POI Release Guide + ============================== + + +(I) Prerequisites + + 1. You should read the Apache Release FAQ + 2a. You must have shell access to people.apache.org; and you should + have key-based authentication set up + 1. Generate ssh key with ssh-keygen -t rsa -b 4096 + (e.g. how to.) + 2. Add contents of id_rsa.pub to SSH Key (authorized_keys) line on https://id.apache.org/ + 3. ssh -v username@people.apache.org + Verify authenticity of host: https://www.apache.org/dev/machines + 4. Only sftp access is necessary + 2b. You must be a member of the committee group + 3. Release manager must have their public key appended to the KEYS file checked in to SVN and the key published on one of the public key servers. + More info can be found here: https://www.apache.org/dev/release-signing.html + 4. You must have Java JDK 1.8 installed and active. + 5. You must have the following utilities installed on your local machine and available in your path: + * ssh + * gnupg + * openssl + For Windows users, install Cygwin and make sure you have the above utilities + 6a. The POI build system requires two components to perform a build + * Ant 1.9.x or higher + * Forrest 0.9. + Make sure ANT_HOME and FORREST_HOME are set. + + 6b. Ensure you can log in to https://repository.apache.org/ with your Apache + credentials, and that you can see the "Staging Repositories" area on + the left hand side. + + 6c. It's a good idea to check at https://ci-builds.apache.org/job/POI/ + that Jenkins is in a good state (i.e. most recent build passed + and is up to date with SVN). You probably also want to e-mail + the dev list with a note to say you're building a release. + + 7. Before building, you should run the "rat-check" build task, which + uses Apache Rat + to check the source tree for files lacking license headers. Files + without headers should be either fixed, or added to the exclude list + + 8. Check file permissions are correct in SVN. + There can be files in the SVN tree marked executable (have the + svn:executable property set), but which should not be. Checking them + out will cause the executable bit to be set for them on filesystems + which support it. The flag can be removed in batch using + +{code:sh} +svn pd 'svn:executable' $(find -name .svn -prune -or -type f ! -name \*.sh \ + -print0 | xargs -0 svn pg 'svn:executable' | cut -d ' ' -f 1) +{code} + + 9. Before building, ensure that the year in the NOTICE file is correct, + and review any new or updated dependencies to ensure that if they + required LICENSE or NOTICE updates then these were done. + + 10. Ensure that the changelog is up to date + + 11. Ensure that the KEYS files in the dist areas are up-to-date with the + latest ones in svn: + https://dist.apache.org/repos/dist/dev/poi/KEYS + https://dist.apache.org/repos/dist/release/poi/KEYS + Dist is a regular svn repo that can be checked out and committed to. + To upload to dist: https://www.apache.org/dev/release-distribution + +You can use these commands to do a sparse checkout of dist.apache.org. +There are so many files from all the Apache projects that it is not recommended to do a full checkout. + +{code:sh} +svn checkout https://dist.apache.org/repos/dist/ --depth immediates +svn update --set-depth infinity dist/dev/poi/ +svn update --set-depth infinity dist/release/poi/ +{code} + + +(II) Making release artifacts + Run these commands from a clean checkout of https://svn.apache.org/repos/asf/poi/trunk + + 1. Update the version number in these files and commit the changes to svn. + - build.xml (version.id) + - build.gradle + - osgi/pom.xml (version and poi.version) + + 2. Force a new build at https://ci-builds.apache.org/job/POI/job/POI-DSL-1.8 + - when build completes, download the built jars from + https://ci-builds.apache.org/job/POI/job/POI-DSL-1.8/lastSuccessfulBuild/artifact/ + + 3. To produce the source distributions, run + - ./gradlew srcDistZip + - ./gradlew srcDistTar + + 4. Copy the build/dist files to your svn checkout of dist.apache.org (dist/dev/poi/src) +{code:sh} +svn co https://dist.apache.org/repos/dist/release/poi /opt/poi-dist +cp build/dist/*.zip build/*.tgz /opt/poi-dist/dev/ +{code} + + 5. Generate SHA512 checksums + +{code:sh} +for f in *.zip *.tgz +do + sha512sum $f > $f.sha512 +done +{code} + + 6. Generate signatures + - The 1556F3A4 key in the command below is just an example, replace the value with your own key id + +{code:sh} +for f in *.zip *.tgz; do gpg --default-key 1556F3A4 -ab $f; done +{code} + + 7. Validate the checksums and signatures + +{code:sh} +find . -name "*.sha512" -type f -execdir sha512sum -c {} \; +find . -name "*.asc" -exec gpg --no-secmem-warning --verify {} \; +{code} + + 8. Deploy the source distribution files to the dev area of dist.apache.org + - Remove any old release candidates (only need to keep the latest one) + - svn commit the changes + +(III) Deploy Jars to Maven Staging + + 1. Ensure that there has been a build with the right svn commit and then download the jars + - https://ci-builds.apache.org/job/POI/job/POI-DSL-1.8 + - https://ci-builds.apache.org/job/POI/job/POI-DSL-1.8/lastSuccessfulBuild/artifact/ + + 2. Set up a `poi-prep` directory and copy all the jars other than the `test` jars into it. + - The artifacts in the archive.zip that you can download (see 1 above) are grouped in different dirs + - you can unzip the archive.zip and use the sample script from the `poi-prep` dir +This is an example script: +{code:sh} +export DOWNLOADED_JARS_DIR=/path/to/unzipped/archive +mv $DOWNLOADED_JARS_DIR/build/dist/maven/poi/*.jar . +mv $DOWNLOADED_JARS_DIR/build/dist/maven/poi-excelant/*.jar . +mv $DOWNLOADED_JARS_DIR/build/dist/maven/poi-examples/*.jar . +mv $DOWNLOADED_JARS_DIR/build/dist/maven/poi-ooxml/*.jar . +mv $DOWNLOADED_JARS_DIR/build/dist/maven/poi-ooxml-full/*.jar . +mv $DOWNLOADED_JARS_DIR/build/dist/maven/poi-ooxml-lite/*.jar . +mv $DOWNLOADED_JARS_DIR/build/dist/maven/poi-scratchpad/*.jar . +mv $DOWNLOADED_JARS_DIR/build/dist/maven/poi-javadoc/*.jar . +mv $DOWNLOADED_JARS_DIR/build/dist/maven/poi-examples-javadoc/*.jar . +mv $DOWNLOADED_JARS_DIR/build/dist/maven/poi-excelant-javadoc/*.jar . +mv $DOWNLOADED_JARS_DIR/build/dist/maven/poi-ooxml-javadoc/*.jar . +mv $DOWNLOADED_JARS_DIR/build/dist/maven/poi-scratchpad-javadoc/*.jar . +{code:sh} + + 3. We need to create pom files. Copy the ones from the last release into the directory with the jars. + - ensure the pom file names match the jar names (same version) + +This is an example script: +{code:sh} +export POI_RELEASE=5.3.0 +export POI_LAST_RELEASE=5.2.5 +curl https://repo1.maven.org/maven2/org/apache/poi/poi/$POI_LAST_RELEASE/poi-$POI_LAST_RELEASE.pom --output poi-$POI_RELEASE.pom +curl https://repo1.maven.org/maven2/org/apache/poi/poi-scratchpad/$POI_LAST_RELEASE/poi-scratchpad-$POI_LAST_RELEASE.pom --output poi-scratchpad-$POI_RELEASE.pom +curl https://repo1.maven.org/maven2/org/apache/poi/poi-ooxml/$POI_LAST_RELEASE/poi-ooxml-$POI_LAST_RELEASE.pom --output poi-ooxml-$POI_RELEASE.pom +curl https://repo1.maven.org/maven2/org/apache/poi/poi-ooxml-lite/$POI_LAST_RELEASE/poi-ooxml-lite-$POI_LAST_RELEASE.pom --output poi-ooxml-lite-$POI_RELEASE.pom +curl https://repo1.maven.org/maven2/org/apache/poi/poi-ooxml-full/$POI_LAST_RELEASE/poi-ooxml-full-$POI_LAST_RELEASE.pom --output poi-ooxml-full-$POI_RELEASE.pom +curl https://repo1.maven.org/maven2/org/apache/poi/poi-excelent/$POI_LAST_RELEASE/poi-excelent-$POI_LAST_RELEASE.pom --output poi-excelent-$POI_RELEASE.pom +curl https://repo1.maven.org/maven2/org/apache/poi/poi-examples/$POI_LAST_RELEASE/poi-examples-$POI_LAST_RELEASE.pom --output poi-examples-$POI_RELEASE.pom +{code:sh} + + 4. Fix up the version values in the poms + - I would recommend using an IDE and loading up the full `poi-prep` directory + - Replace all instances of the old version number with the new one + - if using 'Replace All', approve each change just in case the old version number might also match the version of a non-POI dependency + - update the dependency versions + - check if we need to remove or add dependencies + - great care must be taken at this stage because this step is very error prone + - feel free to generate the poms using the Gradle build instead but the Gradle build will get some aspects wrong + - the poi-ooxml-lite build is one aspect that messes up the generated poms + - you can hand modify the poms to fix issues (compare against the poms from the last release) + + 5. Generate signatures (no need for SHA checksums because they are automatically created later) + - The 1556F3A4 key in the command below is just an example, replace the value with your own key id + +{code:sh} +for f in *.jar *.pom; do gpg --default-key 1556F3A4 -ab $f; done +{code} + + 6. Create bundle jars + +{code:sh} +jar -cvf poi-bundle.jar poi-5*.pom poi-5*.pom.asc poi-5*.jar poi-5*.jar.asc +jar -cvf poi-ooxml-bundle.jar poi-ooxml-5*.pom poi-ooxml-5*.pom.asc poi-ooxml-5*.jar poi-ooxml-5*.jar.asc +jar -cvf poi-ooxml-full-bundle.jar poi-ooxml-full*.pom poi-ooxml-full*.pom.asc poi-ooxml-full*.jar poi-ooxml-full*.jar.asc +jar -cvf poi-ooxml-lite-bundle.jar poi-ooxml-lite*.pom poi-ooxml-lite*.pom.asc poi-ooxml-lite*.jar poi-ooxml-lite*.jar.asc +jar -cvf poi-scratchpad-bundle.jar poi-scratchpad*.pom poi-scratchpad*.pom.asc poi-scratchpad*.jar poi-scratchpad*.jar.asc +jar -cvf poi-excelant-bundle.jar poi-excelant*.pom poi-excelant*.pom.asc poi-excelant*.jar poi-excelant*.jar.asc +jar -cvf poi-examples-bundle.jar poi-examples*.pom poi-examples*.pom.asc poi-examples*.jar poi-examples*.jar.asc +{code} + + 7. Deploy bundle jars to repository.apache.org + - Login with your Apache username and password + - If you have never deployed a bundle artifact then read + https://help.sonatype.com/repomanager2/staging-releases/artifact-bundles + - deploy each of the 7 bundle jars - watch out for exceptions when loading them + +(IV) Calling the vote: + + 1. The release manager should call the vote + 2. Include the URL of the release artifacts + 3. Include the time for the vote to run (3 day minimum, can be longer) + 4. Provide guidance on what needs to be checked + 5. Complete a tally, and send a result once the time has passed + +(V) After the vote: + +Deploy the artifacts from the staging area (https://dist.apache.org/repos/dist/dev/poi/) +to the release area of the dist repo: + https://dist.apache.org/repos/dist/release/poi/release/ + +And remove any old releases from the staging area if they exist (should have been deleted by Step 11) +Staging area: https://dist.apache.org/repos/dist/dev/poi/ + +{code:sh} +svn rm https://dist.apache.org/repos/dist/dev/poi/FIXME3.16-RC1 -m "remove old release from staging area" +{code:sh} + +You should get an email from the Apache Reporter Service (no-reply@reporter.apache.org) +at your Apache email address. +The email instructions will ask you to log on to https://reporter.apache.org/addrelease.html?poi +and add your release data (version and date) to the database. + +Log into https://repository.apache.org/ and go to the "Staging Repositories" area. +Find the "orgapachepoi" entry, check it has the right content, then Close the repository +(it was probably already closed by release-prep3). +Select all artifacts and Release (and Automatically Drop) them. +Refresh to verify that the artifacts are no longer in the Staging Repositories area. + +2. Wait for the distributions to appear on your favourite mirror (anywhere from 3-24 hours) + https://www.apache.org/dyn/closer.lua/poi/dev/ + +3. Wait for the maven artifacts to appear on Maven Central, and ensure they work: + Maven Central: https://search.maven.org/#search|ga|1|g%3A%22org.apache.poi%22 + +Create a simple project and make sure the release artifacts are accessible +by maven: + +{code:sh} +mvn archetype:create -DgroupId=org.apache.poi.scratchpad -DartifactId=maven-test +cd maven-test +{code} + +edit pom.xml and add the release artifacts to the project dependencies: + +{code:xml} + + org.apache.poi + poi-ooxml + 4.0.0 + + + org.apache.poi + poi-scratchpad + 4.0.0 + +{code} + +edit src/main/java/Test.java and add this: + +{code:java} +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; + +public class Test {} +{code} + +{code:sh} +mvn compile +{code} + +You should see [INFO] BUILD SUCCESSFUL in the end, which tells you that +the jars could be downloaded fine. + +4. Edit the website homepage and list the new release there. + * poi/site/src/documentation/content/xdocs/index.xml + * poi/site/src/documentation/content/xdocs/changes.xml + remove older releases. + +5. Edit the website download page, and list the new release there. This should + reference the checksums, so take care when updating + * poi/site/src/documentation/content/xdocs/download.xml +{code:sh} +# the following generates a download-snipplet.xml to be copy&pasted in the download.xml +ant update-download -Dversion.id="3.15" -Dreltype=dev -Drel_date="02 July 2016" -Dfile_date="20160702" +{code} + And copy the contents from the output, download-snipplet.xml, to the appropriate section + in poi/site/src/documentation/content/xdocs/download.xml. + + Additionally there are some further files to be updated ... check the results and commit them: +{code:sh} +# the following updates various references from the previous release to the current release +ant release-finish -Dfile_date="20160702" +{code} + + +6. Build site using a recent version of Java 1.8 + Commit the site changes to svn, and publish live + +7. Copy the build javadocs to a stable location under /apidocs/{ver}/ + - For a major release, create a new subfolder to hold the javadocs for + this release family, eg 4.1 for 4.1.x + - For a minor release, replace the existing subfolder for the release + family, eg 4.1.2 uses 4.1 replacing the previous 4.1.1 + +8. Don't forget to upload the latest version of the site and javadocs + +9. Send announcements: +From: your @apache.org e-mail address +To: user@poi.apache.org, dev@poi.apache.org, general@poi.apache.org, and announce@apache.org +Subject: [ANNOUNCE] Apache POI FIXME3.16 released +Body: +""" +The Apache POI PMC is pleased to announce the release of Apache POI FIXME3.16. + +Apache POI is a Java library for reading and writing Microsoft Office files. + +For detailed changes in this release, refer to the release notes [1] and the changelog [2]. + +Thank you to all our contributors for making this release possible. + +On behalf of the Apache POI PMC, +Your Name + +[1] Release notes: https://www.apache.org/dyn/closer.lua/poi/dev/RELEASE-NOTES-FIXME3.16.txt +[2] Changelog: https://poi.apache.org/changes.html#FIXME3.16 +""" + +Note, announcements should be sent from your @apache.org e-mail address. + +10. In Bugzilla, add a new version and the next "...-dev" version. Also close the n-2 -dev version to new bugs. + +11. Add the version to the DOAP file too + https://svn.apache.org/repos/asf/poi/trunk/doap_POI.rdf + +12. Delete directory that held RC. + +e.g. +{code:sh} +svn delete -m "delete empty RC directory for 4.0.0" https://dist.apache.org/repos/dist/dev/poi/4.0.0-RC1 +{code} diff --git a/src/documentation/resources/images/ApacheConEu08.jpg b/src/documentation/resources/images/ApacheConEu08.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c330579b6da1e33c131be0629419a64987d7697 GIT binary patch literal 9021 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/BlockClassDiagram.gif b/src/documentation/resources/images/BlockClassDiagram.gif new file mode 100644 index 0000000000000000000000000000000000000000..2433adc92c61d38e78ac81160385f63190eae38f GIT binary patch literal 7922 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/POIFSAddDocument.gif b/src/documentation/resources/images/POIFSAddDocument.gif new file mode 100644 index 0000000000000000000000000000000000000000..d9b200282495842a58e8eb5263515e6e51765558 GIT binary patch literal 6982 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 G002Axscp9a literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/POIFSInitialization.gif b/src/documentation/resources/images/POIFSInitialization.gif new file mode 100644 index 0000000000000000000000000000000000000000..d23bf292260283341943d2d521855ed906c08010 GIT binary patch literal 2473 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 Dn)sTs literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/POIFSPropertyTablePreWrite.gif b/src/documentation/resources/images/POIFSPropertyTablePreWrite.gif new file mode 100644 index 0000000000000000000000000000000000000000..801c1d8a1489cdd4d7309c6637cc039b6cfa7909 GIT binary patch literal 4777 zcmV;a5?1X;Nk%w1VW|QT0r3C;?(XgY00960{{R30EC2ui0I32H0RRI2gpaAq?GK}z zwAzca-n{z{hT=$;=82~2%C_zc$MQ_q_KoNI&iDQg3<`(DqVb4KDwoXWCjgB~r_`$T zip^@bR3P^Y4qv_EviU4_s@Kba;0=$<=k&V$j?e4k0q_0~7)aOm<0g2Bm1k>Tx>I_}nyRzP8XM_4T5FpED<>s8HK>b8i<8S2 zC3_frGYq%OTP&c=H+wrxeFFXbcD?w?9Zk7eXQ=%*u7_-MEuJ~7j-6NjSuH>Bk)Hhw zg@4JMzudcjFPk%d0)3eSXV6VCXZpmIqT(*1#5?Cm;Ze7+U&H=_{&oRu=Wt&?g{#U{ zq=zzPf^;JTx)bRV;60h%KE6zJat2F~%VM^RX!97tIRj(*G-@o zuoT6v^+&X?U_L{CjeR_~@65x2{aO}O_patgdC7KEdekLQk45z*K1jHm)z4ea($spf zvA5M*L63Ib(sXORqA70vJ#Vq!Y8KpML!O%>K9Y|F4UE0;=I2fa}O+;2!L` zP+)?REI43j3gDnjy7luKGOrHWB*sZ*Ay zBnjh{CN$~gGhCk8-gs)RIYuFDzF7qsaLzd%ns$zY#hnP`siy&a_6aD6>;yU}poIpC z=zxdnx#*pZCJL!^kD@v0nUzM0X;hbPxoMQ0W(sO>CmK3xpPz<`Ds`nYx~ikCrV48{ zrxH19j$D}k?4x~rwV<_c^hx3)Mei^T?u{wxv4ez>fJ%_a*ic!Lo7E2q^)i>cHKs=jrG_H?6)_b5%l{Yr_Af3y1R6CXZj@SE>G zyZzsvu>7GXPR09QeFO-=Xd#ddf7+V?{q?{E;%k9x(82;Jm=X+1FjREvpa(x#20LkR zgPAH0{q&b76N)f`B!rd<57?&mktlfMYN5_v=r02P4K3ZnnGGX`L-Xixhcon*4}Tay z9x{w{@+)Ew?T17lDp68iyWsv5xy8aL;wp#?FVvX{WZB``}#LmCm2lD`yUGrh&jWunTM&J1QNK`BiIKC^zBNM<&& z2`*|fY@4f$CO9!APHHf*0WZW}1X5AO3@-AVZbW7V*||7&nxk#BGoSA?HBWjDvYSZY zT-ACPwy!0xc4X_^Nd6v@HhjF!ZVnyW)%G+!`1MU!<`gKR(#eC*0dJy*qaH)?ft0E+ zFLtfN9q%@(xf6D&qaHOEL75=Z?D6e-x1(J9dXZ9vD9?JJt0L((>a>lOXKRi^EhbwXB&-%&Mdd zl*OiHK?PEiky9R4KrBr^3r5BY^QKEItyB_=+GDbomN9~11BqDK*qTzXAndJge+%5; zeo(iN3hic${;SR`IJT_B{pe_q``qNZcDc1}u1%RcQ0xkEh}1=mb<;Q7)oQo3>+G(6 zzRR}p($>4%En5>+i{8|R_nPV@*`j=k> z2B>Be3{Cj@b-oi0Fof58UQ9|Dkq^FbW;eW83Ue659v-oXLu_FbFSx`E?y!Q{+hP*4 zn3N}uaE)o4;u+(3#p300e_^cSA7?nmH!i1)gY48Ie^|-;^)Zrn4CEe1S;#p^>J(F-;deZfAf*rumd z>LqodzE-I0;Hhg{xAoT3R`#q*?V?!EnbTs%av`KDQr-owt9PTFPmAh0yHa%2z^mL; zC7nEC_w(Gi8!5fT-8^zf&#Of3Dz-1A?LaSD&jUwJ?sPiW!`j-X=PozCr%Jfqm3OD^ zo_IXxJ=Cf$T++f7j|?4yp zO$0Vc`3qvODi^V&`n4qAY`|*)@)8)-deT$tuerMGwPJ7CMMYju*UC_LK0R#erua@1 zPI2G8Z0Eh%$Y|QKo7=p^E%^|~$B&NaqHj9P)3Djly&yAWECwEATFcwz9&&Dv6Y!dH zubcCJU-Pnt?BPIC43e&B!M~Wx#O3UJ8_)P-0ORkHKQrMYPj`V%S7n6>OxxN1P-1ul zHYVYG=sn;0I>#QIf7%IU_5zrm!~ODO?lk483?KAburofd&08k3d;ET$&C7Q+W;zc2 z=u3b4Uw;rz7d)eO^9J|cxdLshGBJvOLd1hm4`gIhkJE}p^%2o zSB51Ph)mLlNl=LG_lM1uh+}ey1@(v_5{dNGh)Oq!>T-$NvWS(J{)whFh|Kqif(V94 zR*4GJi9%3{Iyj0!mWm?Kihy{Ek`;@@^ors$i&gS_SLTLuIBRKOhnx6*z{o(iNPDog zA;c&xp$Kcj_+4VbNFjEdNKpjK*8h)_&ISlVce zD$tF=_>K5idbM#-wdQR11yjFma`jkM=+G)mCk5*ju0nl5HT3uaJ{Dz(w|!ajWKXcLi@RX=*h7*EQN#6>2vdL3e%f;gMT- zlLtwXW+;+q_*kDYI%$Pa9*8#zhmx~nR9}fUK>1Upp&RDs7C-k^ZO0!^*&gYrF;i)i zK)7T}cxt4;l{>_DD$3MjkZXcI60b9IhaE*dI=a8r-yb|WqfB*8E|nGEx{L=XOIqf zTGMEms(6}KxSPlkL$ce%Sr$PDo240-QHhA3DJ9BTP<4nW%0+xh*%rll7CeER z?%|dU0+)seost-ym5EI>*>U7IoJuJf#(5aXX`B9Xh?|fJCd{dexu{{c`DxUNo}N(~ zX$Mzl2NI}vdu8{X=un`JIG&i8pr)xz(xpQjk{n_PfC)*T;`y7fxS-9Mo6%``QaA|a zNgfBvY8%Rv&S{_-3W+3Y1PCahO5&H0WtAuznHTDg4O(~Q<)LNr4WNjh7Fw7eNtYS; zm(o>0I(j2OI;4|Hqu%(V3z?+U0boX|2;CWg@`;P^S)W*XpA}k?QraJn*`q6Jq81^e zVydF-=%rKoqEy-e>o|;Ms-RX%p=mm%ge9V;2&du_q%a7hzDcK!365bJr%f8Dy*YVo z`ka3Xs5Sbeq`9PMYN)U$s4uFhyZEMZn*NN0%Bc29WL#QkAnIFdT0wO>Q;*7Sm-mA!mA`t_qlYx`B=AT(F9Yvigj^s+*cBswG6Li8`sVDy%xW zthk7%U>d1{iK>oDtnpc`NZO~xb*#6VtiRfDqrpDt>LPq*9xusYOMEqsIO|U2aMNJaRz3cdcuRwL7qFMSI$#V7uNMoc3Y(%OsIfxBu|Xqqeuz~|xmyGa zUNj4^xe8;PLu+;=Z|I|Imlkbb{#lMwcap$1Z2kB(pTU;MXR;8BvW*0+h5EE+3SwJD zk@Dt{>=u#XmU0$pk3zXn*eRPcJGJOYveGKDDSKj8dsHi{JRaDP_J(j=3qAVAb?cd( zX}hIm+p873tMSUOoXWP=sF4k+a$viX?&h^@wUHMUSZ@ImWUIH@dbWgVvsW5?`J{Eu z7Ln`5xn0Y-(597CS3S>@P)Qpadm*`iyRd${WlamSYin@Apphcj4g0XVu$!=xTTk6O zqq3W3n3<#5ce$_YOO-3JzB`|M8@xE`rk@tIU0A&Jsk?SsuT0W^={lmW+q=_CuGM>L z+ABW6DZXvUy66z07-E@~f}wtD%hps`;y2w(GqXd%WCRm-I`u z%3FB1HN5t_w+LLb0$j4ti@bmsLktMOz6ZYQd%gq9z^zKa%`3bgSi$m|!S4FOfjhz# z5SlC6p+q;qE_lI|yTU`b!OHr=)PbW`^uW>^!W0|B-|N6Lj29hi!#<3*Eo`aNeSE}mEW&@x#GjAX3&OEXI+%s;k_vwam+W{L4eU$PPQpr|iqR?8T*w%xCn<^xDea+03r| z%w4+7kc`U-e9b;;%X%Elg`CZnT+IO-&h|RZR9Vi&3M){2s^dJY+YHO@?99bnzu(-z z$4t+DJiqKb&%<1>@{Gsl%%kuu&Hh}^qRh|w6wOY0&(w>`0$Dvi=f?b1!1nMeK3Rvph5?a@0; z)d$Sev~18({nf_2##)WeTrJjJ{m)Mw$P}&C;L6rGJ=S)N)#?h+*!tGUYSup;)=cfz ze;v~ajnQhY&P2V}c%9aOjY0@WDG}@_j?F=k-PozgiG8#PUqn_KoNI&c|=n3krugMnHf}DwoWr z^9hYgr-2{kIL&Ie(CPxq4U5NGuQdWDtJmg4dJT`4&yu(N9&ID+%URfu7pF&OlqVA? zSlETc*93;uC>F^zNT@I=0C|Tw_m#)U7?X6EDVhm-NLp%Y8tV6`#K~y+fT@|<3fQ`u zIvSf*31G|W3w!DcdVKt-nXG&y>qzS`+-%J3YFCCXStYTE2^vZI?WH+$B|c`2n(JS}Ox99qvK(xpjt z9yrQ$i?^s$r8?bH717kJT!CJN+SM!8uw+MFeOeaI*0f=ZS^~?~tkSqy-4cRJcP-tj zcIn`at9NhIzGwcj4J>#mVJn8ydh-c6vdyywBwHq8v$@=$K-@+>sFU}4(@^-t0Z*b8gV&At1N@Y}zOXF(pk`4OVaH%FdcgpBh+-xrVn!G|#V!2Y{o$IpR&mGL*0 zf71b|!65CaXJ2&dWgy@l1g>VFa|i;l&VsgGm>P#@6s6&89*#C5HE2v|T!Yp<_+cF= zGFRbpCA!g96=ry$M~FJjxEYVaEN0^+ZmghV9W1JLU5@(sKm#>P&bMEbGkgK%d{F-Q zHy2)o{ zQ?A+Pm>&3e7J^s8X+)WT21%%dafaEZkc2`C0;0p&r{tZL+G(blQZD*bm8G`%B$@&i zsT-?K;RhtCl6GdQi=eURWo+L?cqj&hE$Hf8vHVvZulc>G{^_g78Jj7xxqfvM3c-^2 ztg?TkFzsi_z9o>f&d&Mewcet*ZFb_GkZo_^>UypT>GoLdj@_dBZJi>{>u$Y$IM{9p z?^0H-U-F% z$}TzWE7Valt!~EwS`9DOU26>?*IDlyb0-i!&FBQRiY;u!41%4q5gLA4W7>AV0P=WF zGb?D^SoSUGoov$m_n42eoubi5?rkjJDFa$)kdR~kiYlLwqbD_W7!L}#t(;S8yT#T6$XQrGfjt=j@}h+8*jIARRd8FYbOt z=G?ZM`|`=x=)AdFdnWy9Ip$>I}!lUu< zhX>4|1&v6=5Vo*~NK7ISyTHF2Iv@`rVOzj(Qjg5!q(s?BmQAuV z{sZ3NR<%k`+H!Pf(x9(OIki|eDt3{&+$&iLN=ab~ma`mWGwoKTRb8%fjQXVMewWO` zoydlOWaKlm=gTuz@`2q1=lG~dg(#L&dJ`1mIJJnz2pZ6x>9pfImxn!Z*7InSc_a9u zBiELisaKJ6$xG53OPPxS3EHZS*`% za*gfC8PYWx(xDNx=t&n?ypcYyqkNnnv0lnY;|UC>bJXd@Xj)T>c2A@{HKR{MR@5*a zwRS)aDmu$Y)TTOBpHOwFRGqri)Fl;fDdQgWzZ4eM1=TG6uF^gvzxU{;UU zRt&y%XK|HhU77k-wFK04>&?9C^{Moe7GeMQ*ub8(rhp|< zWZ8LH6;u|VnZ;ITX*St5hPJ1lMOSG*c3MRu_J^DG>}qw`TF1WDqp3|;ZAp4t`Q)}c tu{G^%Vc1)D?e?al)gxIK7fVmRMrWeP9cVb43*G2Sce>QAu2TvC06P_Ysv!UX literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/POIFSWriteArchive.gif b/src/documentation/resources/images/POIFSWriteArchive.gif new file mode 100644 index 0000000000000000000000000000000000000000..eac7fd7a2e5167c6d2a290fdddc0e83213778051 GIT binary patch literal 9591 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/POIFSWriteFilesystem.gif b/src/documentation/resources/images/POIFSWriteFilesystem.gif new file mode 100644 index 0000000000000000000000000000000000000000..d5011a0f728d3ca2bd119bc39bb215457413a5ac GIT binary patch literal 9603 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 Z9sltmKk_Ai@+rUaE&uW{A8-l)06RrB7gYcN literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/built-with-forrest-button.png b/src/documentation/resources/images/built-with-forrest-button.png new file mode 100644 index 0000000000000000000000000000000000000000..4a787abe4dc7831124c5a3105d328309d671654e GIT binary patch literal 1936 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/calendar.jpg b/src/documentation/resources/images/calendar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f11878290f5357f8d0d0034577290811a4a842c GIT binary patch literal 38647 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/loancalc.jpg b/src/documentation/resources/images/loancalc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fdc62e82ddd70b2ddea7acf885a98b024150a941 GIT binary patch literal 26555 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoAdria1.png b/src/documentation/resources/images/logoAdria1.png new file mode 100644 index 0000000000000000000000000000000000000000..16a6f113af64db20e5215d9185cebbe68442fa4c GIT binary patch literal 4025 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 W-hXL$)e9b?0W)JOSfvsA;r{@UWs&dz literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoAdria2.png b/src/documentation/resources/images/logoAdria2.png new file mode 100644 index 0000000000000000000000000000000000000000..d1ad50bc586eb5efea3adc7ad7d8361c7dd28e41 GIT binary patch literal 31139 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoAdria3.png b/src/documentation/resources/images/logoAdria3.png new file mode 100644 index 0000000000000000000000000000000000000000..4247b97bfe35cd96aa50f8c58d654d26ef5a4d61 GIT binary patch literal 31476 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoAndrewClements.png b/src/documentation/resources/images/logoAndrewClements.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc88e4f0a2e20a0d82ea1e0688bce3d6a598ac3 GIT binary patch literal 5291 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 z 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoGlenStampoutlzis.png b/src/documentation/resources/images/logoGlenStampoutlzis.png new file mode 100644 index 0000000000000000000000000000000000000000..f7707c7f27b2810834c26b225a5bcfbb26430694 GIT binary patch literal 1125 zcmV-r1e*JaP)$dKH>~tknVwB?40&o z*mDvYX-B`j`$^O}(s!kDVRI!sD;`B|r(WAOu#WR3uiTF4(lnIT;!V`kH)DFv%csIc#21<3~Tc!WXmC6PMF%OO0F1m5W|FoYZ|%m=3&}AK^of3+tl3 z3sfVu%O~nWXs1linZd1%n@rW$o8@G{QMN;2xe&R}aqZ+2xSzoFKA$^WkXgqid>6sR zj(q2cBUE3F6L1s4?}=R9b`W=Nxq^!jK8<1D;jr(NQ~it+<*xv~ir{e2{T#@>2wwPH ztsSPIG?2J>UNEmyLx9~;2NK6|z~yQf<$WA)pDSC(iF}NXdR(FB^CjMp0Y^7&Tt6R_ z#8{jL7;*;H250_MS8$~W1}8ojHx7=lUob`Z9Bo|&G5~2^_Q8In z!%+QPFbIJs9@lI}%Bdjgq>XpY6{OkFq<}KPp+)R=)Vf;T^2+B};|`6(`jF%3cm___ zoemB$3yXgQvFl^a)z%&09)pQ3=v?4*y8uV;0~q779|94&9k&kCa`6!fBkKycdyYZf zA&+C2PMj`j9n+IG=^SyoOQuf?6sE~Wmoq5?l^dpXqnk5;kJa$B`+~>K@G+-9V%vA! zu0346n*z&Uq1%DhF_)_*m{M_Pwfp6olh!S@!`ipa52f4j98>vCBH(McYY%erOWZmQI~_y(G?(MJm4_X!xgABv)N^OLlEZJ{GkII2b5H~Ro&L>b(gfi!)XpHSS>o& zix*OA-PIgj^`@=L{Dd*IU2fUcP8f^<8oOACR(2W&A-WN$@^`VTUKx rUicdvv^jFn-6~tRbz8S}|GE1YO04dW&f~ZM00000NkvXXu0mjf>%tt( literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoGustafsson1.png b/src/documentation/resources/images/logoGustafsson1.png new file mode 100644 index 0000000000000000000000000000000000000000..ff13834ff59ee4581adecfa387f5339fb1c0238e GIT binary patch literal 7820 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoGustafsson2.png b/src/documentation/resources/images/logoGustafsson2.png new file mode 100644 index 0000000000000000000000000000000000000000..a3f5c86d243f8afda321cbd7096beb4da810ff8b GIT binary patch literal 3908 zcmd^B`#)6M-`}(M3}cWPF)@mfOD-dWaThZh8ARhYX5>0GhE(o^&Y5v5Ldju{%4FOs zrISpzrzi<^$R(9VmlIv265OKs55L}AjcPAQxzrjV$-Ee{A)BI@waN(XK>d=k2WLaH3J@8O+?9fK@dT|M zKx1=+8yyUbg)GRR1&Kgds}Z*sNik5eu?MYeK|BHB><*e(AnaU06I0wq3PJ-17?~kL zSxh4noVz!)frJR&pi1}hp!-8R^fky1h_0?K)(+%me~3z@3WY+^3HlG38O;xR{?~24 zP{=zF3W`E{ZG))3P;fLdFcKNcMaIR&`G!DYJCFfvh!F(M&(C`>p#SN}-?Rk^jDUQC zp)X(N_vdM2vDlH35$1NNt}!@(14$$jGMPLu*ic?ciHV6RI%Hf?QE}$nj@h}%wo7Rf z6BEhF$#16~5Q)U)k^Wn^Znd?wS=xe2OG~V9sGy)gE|)WzOcsaM-CODG2F|#d*xA|n z`}><(A|5?%UzSukYy!*6%U{2KZAAgc$H(`s#o1E8y1F`=FXX`h-5Fp~Qc_DxOVMx2 z5s@6vt&rGE_riq>FJHcNrGxh=M3G43OarY6D1ksgWq|zMm|uxn-hNPLXQy8nGK?Kq zZj9e(4|bCEy#m1VB)y!R9ItJleEO}EvuQ*$&5s39=^!%#@}QFG#%Qu5XhB9e;gz>A zq3oP2dH~ed*JtZsNDly?I~ncdMaRTM4G#|+5b-W9E?QbxEiJ9I^*FLU&cg@da3SAy z7*}`wNG>um4w;ySijIyB4h|;UfhH!zyej3HnVIA)WK^`j7ZdUgg{-U%?Cr_n5lkOH zs+BF;nt}@p3nLH+ji+{5+Yp08{I>;b2S!5IZWPxyW*s|TQPG4>+(V<&sZy!b+uJ*W z2W{U8Sz6=V*P%E2gIl(N`wu9krKM$L#wI4C^@$q3{x<$>sN|4v-D)U4#V#lUGBsbb zH`8-xiuT!abtT7@L$}+`&CU4)fs8;=LZP> zqHF>Hn43OyTFAbq+^-&H2r6Ks7Qja!M~E4CDxe=O&{NAnd@S{?f0+r6HDs&m4Iq!MQZu;eARrFBe zK>ZCEUOair`I+HIxqRE3LGLSWgG!j$$D%K%rvj%oN^JhbveYV$Z7IVG0q*?Uq@?+u z(Z78NgjDp?5);#2%9jMOLRYHCK!I%*!vA7k+mF1hx!g+t61%xOC9hYWw&2!4_3?;x z-aL2VWh-GITBW)~)NBXC!4R4@=^djwJ{_ zeKJ~J-h)QVuu~5{54!6dRJjdjJfqe)q@E&iPv?)X&eVnNbU$7`Q1^Or5@&Mi{f9S7 zX`&;Ii@W>I)XF6cwV00HyB+emm&HvONelH!FJLbD6cZJMblSSQ;Pz+z)eB#eP@dC* zaJP!1WglAUlH(OMF+|HZ9z7(Iz7m?KbZU(t?X_F~U)Qcl>sgHh%jLwx(q;KJb^zLR@~el=?ssxI)v-q=+`m_&ebAuR&vSR> z(ZWO2oS7YgV(lOV<|eu#RnW%KX4j&yR5gQVdA5Gm+$<5{UMQlQdw-pNhJ<_;DB7l@Z0`hTMCDz{_F6U*Fzl9-g_v*7XSvOzeq zdM3Vy0%ij25ozIYel5zT9bKFMIxp5hmEx*ids2e3HfAjwsZM6#%_g;Jwi>1Yns`7y zcTAW%BNLmbr&oV)h{>-S&ZY8kr4j78jAK)XX)Q;E);SyHp1e)l^^8R5GD)xX84T&W<-! zrMZ1}MA~o2hX^68ajLC~1AwJU4*1uIcCLQT(Q7tE5^L>gpV4h+J~^Qo2yxq3RZUjJi}TlwM`-28cr9VAorJ{6Nzi-W#5d zPDr!q{jrLp4|owKymt))IOTNhB76G);pqcNG?CFb-jTpt^39GiGBPq0-JMzWv@`Vj zfw$e=_ockkKry-^Bv9Chc0P9vvM$ zIChWN?}n<&o*F|vkWUa_^t-5*z7A>)Ebj?HC}!p*wTm6~*i;HS-*ez@VAkRDpWNRI zWYqWw{3^%ZB5q(5wrJKiEd<4?F@+`KIp;LL+N_}eJok*Wc7v!2ec{JJsA)qCp<27# zFT*U{v8GL-d9$R_l7DDa{-$V5>R5zCn)C4n#a=#%d=Q^Ne4^bohAs=!&5z2V!W1`rfcw6>#A4FA^|`lgyLYIO)4`o<49bWS+y zYxopiw{VuETOoDh6{q1JbrcHd`SA@3^z=~Bzu!yt@qa?O9y10Hh}CR`DxQ*d*oaZ) zWvZh#tq6Xu$R_P#}hQT=_mcW`Rt zJ6Y;Yk;Wr@I)=U(9GY!)+W$v)dWKnwV&u$F{%Na}bUvrv)v`*cJr+OPzrJ6wuPM?X z6vI#Gs%_qUk2B@u%ciHQ^^%OxuCT0()b`H*E|hvcXy_s2=9M6WY(lY_@Oc*NtilS|Pnyea$^YHe?L(I6*QrW}qLT3vD>Fm|7VX$W! z>vOcTX07%XJB2xAoLD#5k%oPo7J0&yLLFQOp066@&}`v3DC6Fi3eZ`p%jusPCS#ll zb4Iv=DO0Rn@!heK!Kb;fdz>t*)fA{>L-|?WC1%8X=2zh(mBjbj@b#5h_eJf~4|Xc( zFfv$|LU)B=qFhx%-RV3nm`aw&*nvN(>tsP>ho0DR1yWftSt{42htsacYEUqT1&n%$;Y3o3pg(qLl%? z9QP;Ti;H%4i;LTbm9QU4_iws4eE*PG{>!8M6~H*h^xd!E3uNJ@?RIn0d~x#@8SHwO z?{LP;!sB}sHX;svKshJAnCd%u|KyhBeZ08YnBJ$`dak$^e?5wu2G++aSU2fj)0=L! zyL(;3njc4|ke-ZSA0~;LuH7B-`euL|T2ME6%2DZAWeh{po3hJ`iVn{gW-%5^MqPGg zZglB!Qr%ABDx>HcH()>y=O!0Fuq4@*wjgU+HtOfd`YMyJj3m2QLTY%=5Lh77FQ3SE z7LA9s2L1ICV z>&IKp_33rK@p!0L5%_E$-3)WhaZc+iIU{9E5Z&>Xe(7I9rNUVZRky3D1Y&Ko-x>2V zp3AD!cSakFYYaE1z_DN7>RQf?L%AmAUHR%UDn_YYM3Ne>y-%5v%YRdxPoCRX={29` zu{T~%%hlECD7@cLdFkFmH^ayMn932)^R2CoLCM2I-Bg`81gxet=hC0N%cgeyXv^E) ztcs<|@ET9H&Rv)lFc$>?e2Y{cwI2i!6ox`;3Le3<|F5b_04o0Mm#XSJ&*1w#;NulQ J|HCsT|3Bg!w{HLd literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoJanssen1.png b/src/documentation/resources/images/logoJanssen1.png new file mode 100644 index 0000000000000000000000000000000000000000..e02fe52f47602a5a1b704a74fb224ae5e0b38ecc GIT binary patch literal 6916 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 Uy7zU7B|u)z>o(X|+4?8^4@b**HUIzs literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoJanssen2.png b/src/documentation/resources/images/logoJanssen2.png new file mode 100644 index 0000000000000000000000000000000000000000..c7b406ed226eef3c3f1484b7ba95890e614029ce GIT binary patch literal 37250 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 K^K3UU`TqeyQVzEO literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoKarmokar1s.png b/src/documentation/resources/images/logoKarmokar1s.png new file mode 100644 index 0000000000000000000000000000000000000000..41742031ce08532025c6faf7a61f1e35f1d5d1d9 GIT binary patch literal 2561 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoKarmokar2.png b/src/documentation/resources/images/logoKarmokar2.png new file mode 100644 index 0000000000000000000000000000000000000000..7168b70e98535d81b94377b9f014d9895ac1e48d GIT binary patch literal 11793 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoKarmokar2s.png b/src/documentation/resources/images/logoKarmokar2s.png new file mode 100644 index 0000000000000000000000000000000000000000..93977b087d98602745ba55b65cdd09d435d5b78f GIT binary patch literal 5459 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoKarmokar3.png b/src/documentation/resources/images/logoKarmokar3.png new file mode 100644 index 0000000000000000000000000000000000000000..ef8b14668a870f331d1e3256417297ef8e3b6a1e GIT binary patch literal 7310 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoKarmokar4s.png b/src/documentation/resources/images/logoKarmokar4s.png new file mode 100644 index 0000000000000000000000000000000000000000..33391cd963cb3226013cc21847bdcfc714b7bf7e GIT binary patch literal 3586 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoKarmokar5s.png b/src/documentation/resources/images/logoKarmokar5s.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea300d16f12fe914c51bab3917d56128ee31f1a GIT binary patch literal 2374 zcmW-j3sh3s8pk(pL-*B08U|>_}h@U6nWMV@yN`q$f-aAb{}sG4}j`3^2x3F$Qs(aY1&oseS;w7Xh%k5CE40g_Red0zm8vZ|ZzsFt=jZE--=fe&uR}X0mJ6O2 zB!F2Q3)}6-YdqjQ`tA&Y2%Xw?EZXCnFpcQY8ZI~+#p=eu=kQD6AsGy=R_dpxrwKKu zEK|96FN5ouQY1~RYlp72MeFIK*S70AK2G=UQP*c?Dq^vt>q_F|ASvL6M5`R|gWS0<^yUzTM27BkvDT)IaqD{kIAp)tRF z`4aYTY5X|s9xp;+X}oOqPY3;y$HD`q>?6laR6jaWhNDBOz)hT$wbIj*?H5+9%AXTd z0aR6G-um@k;p*DXyZ&qHGtm{-suZQ`J^XQPSua>l=r2kCqWqDDsZR&xoxNO@9ey&A z2}!X$(aU&=L@biT$BE4SdyOvNN@Qun9Lzj|yXsW&+Q@7(dT3~fUx^_?O3HxI85{Bd ztuLf@GBPrzi4g<64NQ8!OrVyc<0G6`iZ)?fNv(~V{!#OvLHML~4(esYrN-rjFUpj+ z?h$90+Xp`c;~jA9>fKzbJWiJU?*+R_4q`~M)i)|WqDEK4d;mWJyWiy zz(8k84#7vKC5Zw=VvB7u$nWBsW7(W_A8lic)h^UdKe;U3ML0JFl}~r<2yor8O)Tbd zDl01;Ds}->R*$JtNdqDt7#mS;>eeCnCE zDRf;XTs{70^8#qv0khyPBaR}~y_NzZblZbMS}3R-vA6^e;h+>edfvL_BRNf)!K}k5=xTaNxj# z&8~O+oe?joc_0_|&Mwp==HS_w_=i}HlC-ACKQNKDpZu70Cfz?~LbPj@kc>E%XSKdv z^N8|8Gi3zz9ipe-G+WGBfD4>%=(~>oRrVNp0|&DDeFWY5H=I02X%e}BEJe-Zi<8^Pi`*}z5c#)A5&V^4y223=yPnE!! zSGpT9saGb*QGD9oS-M`|#JfTu4O%QRdSKp8xfktmHMG_*TR(2@cBFBofh_tl2(Ves z0e;yk;Nt+bH9XagE5T!xrvFV}pYn+to6YtMc}AFVoeO&L8O%oi0Cz06i*%6ucx%>E z<;z!9Wy&@;;Y8?jWIyD%FeD3W6l8SZECW|iqwM~4b>qpZn;zG7%0Y$KD(O)KWJ0!T zbuC1IyWM@SMO<24zzYt>c$#4rL`CPraq6Xw|a&%J6J^oH>;%4zYLFoR%i@P z+bih!U1KzL^Y`EQ55;bEy1c!+_Jp)5`B&^M#0syv+CTN|s#4|Pdg~wVvyA`6d|_JV zzDI1C7+leHgl9CU#zfiER$IQQt+`NC?cPh%%aMd?^gVyCWoFnxobQk$h8vt*pCK2^ ztmAWw;_*%7sDK1m(4<8#1J>~7rUulGV#Ll}fYnx)z` zANH`%8Q4b7v*Zq!YFp4Q!0Cjtd!76}&fo+6gUhGfP|xX0M$bS?v;0pVuJzdLYnlAK zO8S=R0DC{Y{Ca(xwxdCH#Vx9C?a!H)O{>nPeaU9uKtC>s6}1R1*N!YvqH5_lFJ_&U zFGh<<{TDr7dHa8hq^eyl6f=!W9i5Ud`evA8e_Y%ZQZoqPCj RCvp)2VH+d)cQ%NW{|AM*1p@#8 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoKarmokar6.png b/src/documentation/resources/images/logoKarmokar6.png new file mode 100644 index 0000000000000000000000000000000000000000..0407c358237059d1dbeb20410a23040b07617003 GIT binary patch literal 3006 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 RL$m+~p+WNkPe_%T{{m<_qv-$u literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoKarmokar6s.png b/src/documentation/resources/images/logoKarmokar6s.png new file mode 100644 index 0000000000000000000000000000000000000000..b13fb1890dc098b17c2c6c5fe2252706f22fc995 GIT binary patch literal 2321 zcmV+s3GViZP)004R=004l4008;_004mK004C`008P>0026d000+nm#LZ5000P_ zNklfH2%%C{&}MQ}5H(+9tUBBEEn_kD&$D zUWsTpiaOb%4id!I!R0N-@qgU+FQnkWJf#n}9eg^NTDUrJSwnl$yb9#r!uWzFgtGyU zJ$xs4N0MzIvE<`Z`NC5^UJ7eMc7*<}j(GLYWGA-xYRFynrH8rE@DqUNF}6VvfP(0g zLRt%rHOLrFV3^0o7#sIs11k${sF=Xk#)43QATbaXF!7R~*!`coyt{MMvitWPYWQS2 zMo=g4xc2yNfa@B@a|rg}xKJFWmGDlrJ28Kki}?U=1Cu3W5i}QA>|hoe zYq|n|E8kN&C(Em1Y0Hay$AH%7X}6vexQ0y1_p^J2nGR( z2nGh}WT1l{0`VgT2AMRV+HVXDACG~h0Rjl(z~Aqo2693S1i2m*f&x|y48k4|jUb;h zu>sxw4~Tz5Lv0g8-`DF54Bu`8JrmBrz@rB=`~)O)z@7zymun!NlrLdm;4_7Y{f9;z z$Se>5d5}$lfk84JsE-vGiU+{L00C$ugA@Q^7zn0Ry%a(FCI9V@6uenbamU488qy{W zGfncm#agN#zLnCRN9)c-0}s~p(?bO@lu_QzuDOngzMAGoYf{`i2;}I8A@Y2o=X4Ec zkmh@^=mD^#J4@SN0R(a2Ze}5{C4&vP{(lD$K#(W~`C_mEP%HugKmb7;2ugQ@4M5W` zKmaijP&VKIAbooKn+owVLhF2Bi|Nm2hTZ2F81|kAs`&;nf*+V-+)Wr5?BQYa z7fb>K5U9!j_W#3)@K*oVuV4S4JAL>+FBdb&rvFPS82(?G&G>(6qt|~SA))_TT3Y`P z9Xj+M8T|bD^M7h;%71B5_Wz5@82-Oq%lQB6W`_UQ<}myZv}XFRAkOgr%nV?&|K-~M z|8H0S|G$gj|Hlms|F<-Q;~b24cQE|_w2=WU2gZkFK}Np?2q1_9AN2f32X+=(|2f$i z{y$v80O?bFfB1jbu3ccmq@|_*zj*Nit~NC_6)b*eeJ#ZB3qipCO$DUCa=YrkjSj|vNadp1L8XefiNPZ2Qv>Hu5D zqQHz(35?$*;J!#>t`)=U_rDm*%F4jW2;6E0f-h=8S^KYtFUXUv!ZrUL>3AgyJIXkcGPk%8gUDPYb9 zCRSDf1`D?g1{Eb~hE1C`F>=WgvN)%3|}9v zVz_hX4p>-UU!UQ}j~@)jjzKy%dV0{*Egl4P{SrvG0MvN`_EorEPGT@L&|~=h`!~bk z!@!b)T?*((JM8w!7eUI{e~>;4KmZY}N!U5KfIY1?U^mg1Vd?Do3^#7vU@$Q;VQ_VI zWw>?g7Q>r2Zx{px1sQmGq2(YKu;7+X1!hYN28J_^kWLY|27{iL6Tacb1s6oM_&A`IS0hW68>J>zdkQ1b0V0Z`NgIY%NWsnXO5&#Gw zoDTd4Ec{qmSs6k?LV)ESCxf=OHbY5C34@}dB3uoy*kNE}V`KR9=MShfKr)q&f#JnU zL~Dmj9jN9mm?@b+8si}!1?g()pDD>q^q3ugl01!X~GYKek zZ~;)d0~I|WaQ^&xR7qiHNN#2oWcc(;h~eznvkY8ZTnx6hwg@%gjKT=1|3QNUSO7o( zQQYLu&dvsh^qMtmP$fV`j;J3vgB&<|iQ)0%#|$wsF%0VJ>IgL)vOsm*(18H#03d+y zIuMo)@c~eduB)qK*s)^=rXzt3kncQh4AnJt463TC49(5WsD5DOWcbf42rP2h!5Ix3 z00DR-?nx0 ze+zTt|G;Sd53GGq)IWLh$fB*vkj2K=8j(1D`00000NkvXXu0mjf48#i- literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoLoicLefevre.png b/src/documentation/resources/images/logoLoicLefevre.png new file mode 100644 index 0000000000000000000000000000000000000000..520840dff78423f4efd863b9c9521f11497f8015 GIT binary patch literal 40251 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoRaPiGmbH1.png b/src/documentation/resources/images/logoRaPiGmbH1.png new file mode 100644 index 0000000000000000000000000000000000000000..3bef8bb6e9583059dfe31df3f3b3a69fb3ba6354 GIT binary patch literal 5976 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 CknTVL literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoRaPiGmbH10.png b/src/documentation/resources/images/logoRaPiGmbH10.png new file mode 100644 index 0000000000000000000000000000000000000000..46fd99865943af9e90ca5be7dbbbb985fa631008 GIT binary patch literal 9006 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoRaPiGmbH11.png b/src/documentation/resources/images/logoRaPiGmbH11.png new file mode 100644 index 0000000000000000000000000000000000000000..c92d32688e2650a8d2fc131eba51a14f67ff95b2 GIT binary patch literal 7209 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoRaPiGmbH12.png b/src/documentation/resources/images/logoRaPiGmbH12.png new file mode 100644 index 0000000000000000000000000000000000000000..c006c7c56284e4710616a4a161939f6265f8067f GIT binary patch literal 4033 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 E1Lh8c1poj5 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoRaPiGmbH8.png b/src/documentation/resources/images/logoRaPiGmbH8.png new file mode 100644 index 0000000000000000000000000000000000000000..7df1b28d6ea4ed78b88c3577c6d90c1e040476f4 GIT binary patch literal 6572 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoRandyStanard02.png b/src/documentation/resources/images/logoRandyStanard02.png new file mode 100644 index 0000000000000000000000000000000000000000..d20c8bacc7161f16ee777f57f699f6cbc85bdbff GIT binary patch literal 122317 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%0D@f*$WR;h|UV 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 BtrGwM literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoRandyStanard03.png b/src/documentation/resources/images/logoRandyStanard03.png new file mode 100644 index 0000000000000000000000000000000000000000..45850fa744cbac8575d3538763ea407b282c1040 GIT binary patch literal 38246 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 C4dg@s literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoRandyStanard04.png b/src/documentation/resources/images/logoRandyStanard04.png new file mode 100644 index 0000000000000000000000000000000000000000..da62011014d7d1cadbaed6d71115804ab3fcd725 GIT binary patch literal 36236 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 z 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoRandyStanard06.png b/src/documentation/resources/images/logoRandyStanard06.png new file mode 100644 index 0000000000000000000000000000000000000000..9474220a1c283437a2e6c839f2568f622bde8fe7 GIT binary patch literal 16309 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoRandyStanard07.png b/src/documentation/resources/images/logoRandyStanard07.png new file mode 100644 index 0000000000000000000000000000000000000000..c7b6aca5bc854845211ea71e411687b2e3ff693d GIT binary patch literal 30094 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�#Qd4ad`sosOiznr7eR4 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoRussellBeattie2.png b/src/documentation/resources/images/logoRussellBeattie2.png new file mode 100644 index 0000000000000000000000000000000000000000..052209ec6ff3e4ad255827c2da8563cd7fdf8812 GIT binary patch literal 5441 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 P!33x&X)0F9n}_}nMQUSK literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoRussellBeattie3.png b/src/documentation/resources/images/logoRussellBeattie3.png new file mode 100644 index 0000000000000000000000000000000000000000..9a4e98c2da2dcc67586284b54f9f0b4d7b7e8222 GIT binary patch literal 1797 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 FV1hsD(YXKs literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/logoWendyWise2.png b/src/documentation/resources/images/logoWendyWise2.png new file mode 100644 index 0000000000000000000000000000000000000000..8ab6eaa07a5373b4bef658e674ab08377d01afb6 GIT binary patch literal 1703 zcmV;Y23YxtP)z0{{R3f6GHK00007bV*G`2hs!x z5-Tl_8&9bK000SaNLh0L01EH`01EH{Laa2H00004XF*Lt006O%3;baP0001WP)t-s z|NsB~{{H^{`uh6%_V)Ag^6={J>gMX?;^yM+^6c{V^7{Jr;^N}c+RxF}&Bn&Y+ThmS z;@Z~U(W@+7ppRsaA10d!JMQvg8b*k%9#1*l0xK~#9!?VQ_UqaYB5YfP0! z6Ve4t1)J`65AXkoJA)@M+F+wrQ~!$u7333!0TF%hW~qm-23WCHtQBinSdWiIVC#7s z6oxmsyxs16-bIn;1#lc9oILM*_I-c5^)Z@{zo*j=>lWvKlLY>ggT<;Q;8v64`7E($IfoTQC;COB!;6F{-7UW-$EeI=$poAZ$kPtME!|(~n z{H0=HB_tixdxEDGm01YXh&3;LzSWA$o@K%`VAr8#!NT?*Jfh65~p2^x!# zJI5kK6J@}3nLnjh*~Y+vY%?wSQJE0VVW`De7Z!}ZhPACZVo@n`rYudpD~e;NXQlY} z#G*Bm1C$2S?Lw)BRo_1rFlAXkC{Nd88<>UlX$L`wG?;+O5vl;oatkUQeEx_ zmQ{t^$f+q|UP9HB*%VkhGbY>6cx>9?&{%P?uhqfpyyCpV46-b*+1S`y8~rd?<-S%d zJwh#mteB((sN%4!v1;p@2+L>yBDJ^q7h+lQ8rvpinLc+X-w!K}9k4QDglk7{-6sx< zl@GzLVM!xgTi1wKmfP;c%Bzwfw)l^Wp@v1DWC zH7sU?C&6;+6EibBB35SHggRg`Gp?@Gar#8_76Uh}X-XT5nww?vY6S82He^d|Vu@}n zF(sC)txHBo{v8HHse zFS8!JPi$c6lDL>2v}c#5z|wcn{je&77p0dQ1B+7Cn9`z9h!&Imh|21BO00oxs|^dq zB{m1}373y}ZpYegDZM`4B5hOPUd$MaTlNdfWnE%9EM}Q0mhU@_PI02Q;|Zp%>iLKL zl;}>d+Sfs}jO7VweSX;xzqIyov9QD>=GR$f_46wsn#Ta^<>gypX)?~c*mzNUttP0~ zZ!I6ISm5c1WwKqUgJ>$O $%@hl5>tzzG-hOL_Si2pJK36P9tka1xH9sswSg~BO z&gT`YUrU@J7Ir=>)?h7Br5}hn-FAEt6>FTb6h`&m;ZXK3zNr{xr$%Et^Y{*0(z6}POxw+Z(_me zZe*(AG+VyJ{?^Wic*BZ*uCx|{HIi1Wo>;vnl2$DDndT(PCVC~ed{!ODOU2TIm`Ske zN_2SU69h@3?3W2}q^wm1jN=flUe_0vQe33{swbPx_*JxeMUumtD>KFNyfD-sZV+ul zb>lMzb-4L)gL0?-Ywoo+`#evaCD!TW`@z!_r9k%bBE}VdC4wH0PPZ7d#PUIpL2x)w ztjXJz=iMRv?g)K;b{aHqHrp^f9uH7ppOkY-3IfZjz6P^6EUZND@i7eJ{r=z}{L;h$ zF2c}$zo%d^&-zdi3B!ARMoRII{`jF|K0k*}AN80imaazpjt|&<5QHc~NZ3nxx;%Mt xj;8cEA;#0wE{YnTj9Jj9n`WRDYsDH%{{hmfE+RgPVYL7N002ovPDHLkV1kpIJ@fzo literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/old-project-logo.gif b/src/documentation/resources/images/old-project-logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..b9c2ee13910846fc549adb17e9c4466f407daeea GIT binary patch literal 3165 zcmZvb`#Teg4fk0DwRsBog@>4Myg{ zDIyeAg5}iE+S}U)-}MrSL>L}CJ~Kq(!uWhXlms?4HMJ&z84LzXLL{&eFp?!l!k$_j z$FZ=BEAwzFELD_@e;cz?{MuEbKP^O4LW0NAeWTBKn zqzcoYK(rGSYXB$a<`baDts z$B>vlSSpMvLXo*}6vbMukYB5$l7$#+G8jvP;plKY1CAnD6IghuR7&O}t%+b>B^^Vt zMi8MSE}SW1h->&58j{94&XH0lXU3^w42ldTatXo)7Lo|Xvk(|63_$>sm{^JsBW)-n zvXSfSs}w$R^wT>s+n2~iuB@+6#aLktlfc1KMOY6yiY!DCSO^3jOy;3*Oe}^1Lz194 z1{_OWyW~f3GyDW-X zNt7*4;ps>O$(qPSkr@OG**2|`Mr9M3A_|p{qwy&;Apt>v(!^K_&jCrW;#YDB3{+PA zWilVdmXL-<`?+E!RfKUR!I4C30vm~?B5*VWoloLP*bE^KMusNvXml=_%)wqRJE2f0 zBu!kp7?&=kt*k7QIGA<$I-c>b7=y|pl2|yZ@ZTCJEX58-gOAOOGQ|WkAM;uEks&6| z$fgqbQ3NImLr0RiSQOcs$U@C5P6_LOPc91^myOamC*MsD@uc+0$w}FwjKass<#G~- zNa5h=Wq7uf$}3}WYc7cDSwsdFMuhs%5hxOjCdQ|W**F@C!KdJ5Hh3Z8Zgxia40o>| zqDKRHDPcf;7-5zQ+utr)P`g7Nj>e-C3=7d#t^qI)CF>~hp z{9B(N8K0WjYlt7hgm1U*xz6AuJ>Ps%RNRcB#(Sd1eXGK6I`P9nz?dD zYV~Yrew*l|ZcSIKfuoRDi^^fkXR~~tHGWHltt(FUJ%6@3J5cU(XZ+}^WX6cy*<*bz zo9Oo8Rz=1E+n*~y<>{WpwLXcnpl3T4)_*}iad`bl#^GDrw*O2ju}v2H(Y>mC4TDAS~HLq=3XgY7omLstNLT#hnRPPk59$uQyV9E2tUWbwA}!0 zK)6l?5$xWb(`W!HteuPSgQ4=gvj80lNfoX6(k^C>hvrB;P_MDaB&NkI#ko7^&mVFyB?j$ zI~E9nhw7IaY7ew%#(mh6{|jT(u&^iAJyJ@wv};=GdKAe$B-VO6gb8P1lcK zU78l-HXf$F>CKs}X;lP%X-#drvKryyAMo9D1J}aeG3%r)ulL_I_@N{|@5)PP*3z?$ zrTezWmi+1^y;~zW&rTl#tK;YT=_+o813nop|<4+Z%MVYgFI{| z0B|cWZ@b6dFs}Y&2TJ=hqa?sW`K%WddGmSfpa5do)~O!Rfd(infQqNlr5@x0oxKQ1 zN~ck$s;98EXg-#6>~Zdn-h6bLwvGk%Y=`uoN*XTcb}J1FG& z&5ujCBYC5m9z$&(66c)%=2>`by?ON;CzPec8Jn?fWe0bAC z`=_Jp!TLa+X0j1r*ZbGD@Qc?oQ^ucmHRiNx&L7awojl;Y(V>KZWSA%4_1qKsB0$oA z0x)1PO*&x?#M)#(_*jHFYuMvAq?3ukE`%^J-dV-N;!HY$eij@cAypGO82nUzla zO71-lH~9p7m#MbrYIRq<^nPJr#e26c!$FMcYN6wwH`>p?cj-;GDb*VMFlS(NZ}SgA z^e0~{S3}I8PZOiaphX?2X6CDE`u_(vtGEr$Xx%eDLBg!h4d)_x+fKvPtXe;Mb6f4Ik)@>5AK_;r=1 z4o@eiE2H>*-kitZ>3a3xshiVL0FoZB?XkStB`!GP>v>Yn6OH&Xrmjiave>Jx590J~ zYStBWzw@GDgHKeGAb3f3{P)Yd|7bq@)eGnFmaq03wBVdV2A@75oPHVnnBlPyx>WHt z+z~kf>|J`t%D0mZnvQaTpUu3wbmDyN7L!i zF@iZ>X44g8sb`1}rn?JbD3sSw(ctk

  • !@Q>Q2Y$Z-3o3-aRJ4%@`Q!oPCI9iRcZ z^BDuxW8?L08UV%pq(YxFA4mVGv-dvZctrSVYeOG8mY8%c&{-%qGH6wsc{u9cc=W|M z#0jjmeC?1)uY|Av+HNq`6FEOofV6Md<$f69?lMtre$w9eWHKd;f!N^;NyfH!#6;+Z zAC-(8ac66GlOyy^f)hNw*&U3kJ$8vO<+CvQLq&EBD9r3+Xi6r>%V~YZh{|*_Z}?@| z|D^K(JWRQ_{X$&H1yHzyeoD~O^m@!ZA@a-O_ioFUx{-R5BImDN{d?^T%dCXywrw*P zLmCDuH>gp`1D%h-=EIRE)S`{U8Z+`#%8ET7{CTtRnc1)9FcjTs_{ZaG119y8&rZxu{lmZd1517wQH3_M>VA zzQWHdpMjP-dJNbr0|c|Pu2ou5u$1^ihAog)ji#Yni;OVSpID)xGU=CF z7cl#iYp%9@W&0$lJYRFjNZg;MKjbt#0?Uc{%hDl_-kUb1W!$v8aIsXfDJbq+e-Q&Q zoU>C^(W=$=z4miC&HwqNe*cfQ7!}v>_2wxnMt($r5-?>cbH<^6qwjYW2gz(^nAXd* z4u8e>-9V6OO{r>+{>)nK$j*s~1Di^>XN}y@EsKX9=0}_=H+kfmw4Ca{HEFzkR4uCI zTcrI?fIVoV_31HCf$f%(@;2aCZH0}2TU^${ykb)a2qM~C|JNybX9j(uU_4? z@aR>L28Tcc0fB}Fk!k0ZZ0Y6R>VBk)7kR)77>8N@MEq#V`O^|w5)5hI2*YFOkbQp2>P^NO$|A;j`Y7BWZVLPaKYh)V}Q8!QHd=ui*H+Aona^PJXw+fU(kw;q7+Z z;mjNlGET5-1>4iGgCf)*0n}<`{DQw_6S~sp^0m3Y`@Wz^u+{Y*PFO{5dHFmC{H^=h zOkb)k`u&WqM{upnp&3^12k)_)40s^x*Uf!i-o@1)3faQ>1+O+N0qxyA9$#LuZLyNy zGfh$+zP1Cy&!?p>z&(xbH43rU2q|q`RaLRg9{P8B%x&Kfcwo;B*yH1h8soOS*8IG) zMt}++B&xQu5>y{=cvy{bPhQ;@7~r`FlLDlmz}Y?DHGEY1EGDOwhEfp;vIk@6S*gWc zgBT_JlEmjS`p+%XXIuI&->>eQR}>1JyN^Wx9WgN&&`8i^|LwGN@#Afo zW?%k3#j)T(Ja3ego8!7Y9w$W#pxJ+N2i-6MTwJNuV({VUqYfXIgwuA z{bsP)Y9$trYkqlIO;NGl`E5nc=fQWA?ns(UdUtYDe*Xkks3|&l8+e2BYfdoZa`1dqSI?5#~(#g@)?!m>> z%);iT&rCKK0s=xBgYK)Ib-Fq!KR>t3j=63-Ns9{z~z;`YE>^6s>@ESSlT4z2lIv3Zdrk_obqjgT86 zybVmSLz!W`j4(dHM%X`Qk5Sz{J?VA1GgFP>If)BSVlf&qYbIpo;jv9X@68p7b@P(n zZMtpSY;|Fi30m^>Pty}wYH4`RBu5^_vw4BU{|x_wuSZVbGg;~Vd)g`IVDu+t`YYJf zC|L&YKajBi@VnEJ8$O2tXnj0fj!ZQg__pJ}Qc?&$U_n7jsQ~pRnW`;g1R21O)<_#$ zY}2bbhu9egs-V%Kh)OF<-}on8kGq`!P*_ozU!uQ#H)m#`w?98r-v-JCcL&43!NC

    O2Gf5zwA*R=Q>e-ks?( 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
      e}2=yJAYT?znF!^S>NR$ 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

      W5$s(%B8H!pL)tF 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/vba-example.jpg b/src/documentation/resources/images/vba-example.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d95b900018842635861219debd44f339b887760 GIT binary patch literal 107492 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/schema/catalog.xcat b/src/documentation/resources/schema/catalog.xcat new file mode 100644 index 0000000000..6df85e9583 --- /dev/null +++ b/src/documentation/resources/schema/catalog.xcat @@ -0,0 +1,23 @@ + + + + + + + \ No newline at end of file diff --git a/src/documentation/resources/schema/changes-poi.dtd b/src/documentation/resources/schema/changes-poi.dtd new file mode 100644 index 0000000000..a652647433 --- /dev/null +++ b/src/documentation/resources/schema/changes-poi.dtd @@ -0,0 +1,71 @@ + + + + + + + + +%document; + + + + + + +%common-charents; + + + + + + +%changes; + + + + diff --git a/src/documentation/resources/schema/changes-poi.mod b/src/documentation/resources/schema/changes-poi.mod new file mode 100644 index 0000000000..36428fa15c --- /dev/null +++ b/src/documentation/resources/schema/changes-poi.mod @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/documentation/resources/stylesheets/changes2document.xsl b/src/documentation/resources/stylesheets/changes2document.xsl new file mode 100644 index 0000000000..6cf0a13b4a --- /dev/null +++ b/src/documentation/resources/stylesheets/changes2document.xsl @@ -0,0 +1,210 @@ + + + + + + https://bz.apache.org/bugzilla/ + + https://github.com/apache/poi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      + History of Changes +
      + + + + + + + + + + + +
      + Version + <xsl:value-of select="@version"/> (<xsl:value-of select="@date"/>) + + +
      +
      + + +
      + Summary +
        + +
      +
      +
      + + +
    1. + +
    2. +
      + + +
      + Changes + + + + + + + + + + + + + + + + + + + + + +
      TypeBugModuleDescription
      +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (breaks backwards compatibility) + + + + + + + + + + Thanks to + + + + + + + + + + + . + + + + + + + diff --git a/src/documentation/resources/stylesheets/snipplets2document.xsl b/src/documentation/resources/stylesheets/snipplets2document.xsl new file mode 100644 index 0000000000..8b428360e3 --- /dev/null +++ b/src/documentation/resources/stylesheets/snipplets2document.xsl @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + !"#$%&'()*+,-./0123456789:;=&<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~ + .............................................................................................. + + + + + + + + + +
      + +
      +
      +
      +
      + + + + + + + + + + + + + +
      diff --git a/src/documentation/sitemap.xmap b/src/documentation/sitemap.xmap new file mode 100644 index 0000000000..e7e03a57cd --- /dev/null +++ b/src/documentation/sitemap.xmap @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/documentation/skinconf.xml b/src/documentation/skinconf.xml new file mode 100644 index 0000000000..fe11a72134 --- /dev/null +++ b/src/documentation/skinconf.xml @@ -0,0 +1,549 @@ + + + + + + + + + + true + + true + + true + + true + + + true + + true + + false + + true + .at. + + true + + Apache POI + Apache POI is well-known in the Java field as a library for reading and writing Microsoft Office file formats, such as Excel, PowerPoint, Word, Visio, Publisher and Outlook. It supports both the older (OLE2) and new (OOXML - Office Open XML) formats. + https://poi.apache.org + images/project-header.png + + Apache Software Foundation + The Apache Software Foundation is a cornerstone of the modern Open Source software ecosystem – supporting some of the most widely used and important software solutions powering today's Internet economy. + https://www.apache.org + images/group-logo.png + + + + + images/favicon.ico + + false + + 2001 + The Apache Software Foundation + + https://www.apache.org/ + + + Apache, Apache POI, the Apache feather logo, and the Apache POI + logos are trademarks of The Apache Software Foundation. + + + + + + + + + + + + + + Send feedback about the website to: + + + + + + + p.quote { + margin-left: 2em; + padding: .5em; + background-color: #f0f0f0; + font-family: monospace; + } + + #footer a { color: #0F3660; } + #footer a:visited { color: #009999; } + #top .projectlogo { float: none; text-align: center; width: auto; } + #menu { width: 200px } + #content { padding-left: 230px } + #content table.autosize { width: auto; } + #credit2 img { margin-top: 20px } + + .boxed { padding-left: 10px; border-radius: 10px 0px; } + h2.boxed { color: white; background-color: #036; } + h3.boxed { color: white; background-color: #888; } + table.POITable th { background-color: #bbb !important } + table.POITable tr:nth-child(even) { background-color: #ddd } + table.POITable tr:nth-child(odd) { background-color: #efefef } + .feature-yes { background-color: #9f9 } + .feature-na { background-color: #ddf } + .feature-no { background-color: #f99 } + + li.pro, li.con { + list-style: none; + padding-left: 0.7em; + text-indent: -0.3em; + } + + li.pro::before, li.con::before { + content: "\00a0"; + font-weight: bold; + display: inline-block; + width: 1em; + margin-left: -1em; + margin-right: 0.3em; + background-repeat: no-repeat; + background-position: center; + } + + li.pro::before { + background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='green' d='M16.59 7.58L10 14.17l-3.59-3.58L5 12l5 5 8-8zM12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z'/></svg>"); + } + + + li.con::before { + background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='red' d='M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.59-13L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41z'></path></svg>"); + } + + /* Bare bones style for the desired effect */ + div.code { + display: table; + white-space: pre-wrap; + border: solid 1px black; + font-family: monospace; + } + + div.code::before { + counter-reset: linenum; + } + + div.codeline { + display: table-row; + counter-increment: linenum; + } + + span.lineno { + display: table-cell; + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + width: 4em; + background: #f0f0f0; + padding: 3px; + padding-top: 0px; + border-right: solid 1px silver; + border-top: solid 1px silver; + } + + span.lineno::before { + content: counter(linenum) "."; + text-align: right; + display: block; + font-size: 90%; + color: #999; + } + + span.codebody { + display: table-cell; + padding: 3px 5em 3px 1em; + background: white; + } + + div.code div.codeline:nth-child(odd) .codebody { + background: #f0f8ff; + } + + dd { + margin-bottom: 1em; + } + + tr.action td:nth-child(1), tr.action td:nth-child(2), tr.action td:nth-child(3) { + text-align: center; + } + + .sebb, a.sebb:link, a.sebb:visited { + color: white; + } + + + + + + + + + + + + + + + + + + Page 1 + + + 1in + 1in + 1.25in + 1in + + + false + + + + false + + + false + + + + + Apache Event + https://www.apache.org/events/current-event.html + https://www.apache.org/events/current-event-125x125.png + 125 + 125 + + + Support Apache + https://donate.apache.org/ + images/support-asf.png + 125 + 125 + + + powered by POI + https://www.apache.org/foundation/press/kit/#poweredby + images/poweredby-poi-logo.png + 125 + 125 + + + + +

      9(BPflEdVxD6z>(4ihaW4 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 Kgm`h0i9Z0^GVKrm literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/simple-xls-with-function.jpg b/src/documentation/resources/images/simple-xls-with-function.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5879ae02659c662b0d33a57d119ecd6fde87a28 GIT binary patch literal 27226 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/ss-features.png b/src/documentation/resources/images/ss-features.png new file mode 100644 index 0000000000000000000000000000000000000000..17554c71514f7c4445c51f12ed0821bc7837c2d6 GIT binary patch literal 13173 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/support-asf.png b/src/documentation/resources/images/support-asf.png new file mode 100644 index 0000000000000000000000000000000000000000..2103fc6d0505d4eb2efac1f7cba50c77c959ec08 GIT binary patch literal 18642 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/timesheet.jpg b/src/documentation/resources/images/timesheet.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1ff512b1f9a619b2ad077a0846cf2f579ad3cb97 GIT binary patch literal 47311 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 T?X(qif9NX0c;O3{%$0Dyr1%>UHT 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

    58%utsGw^WJF8*`e@gvj9!qWCORXF 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/poi-logo.png b/src/documentation/resources/images/poi-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..73c02a560329be91ae833ece5951071ac8ccd744 GIT binary patch literal 11814 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 literal 0 HcmV?d00001 diff --git a/src/documentation/resources/images/project-header.svg b/src/documentation/resources/images/project-header.svg new file mode 100644 index 0000000000..b5d65e8cd9 --- /dev/null +++ b/src/documentation/resources/images/project-header.svg @@ -0,0 +1,1108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/documentation/resources/images/project-header.xcf b/src/documentation/resources/images/project-header.xcf new file mode 100644 index 0000000000000000000000000000000000000000..e99dea60b81fe8a7abc0923c28fcab381af1881e GIT binary patch literal 170414 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