CFUNITED – The premier ColdFusion conference Another Look at Microsoft Office Using Apache Jakarta POI Jeremy Lund June 28th, 2006
About Me Manager of the Web Resource Center University Health Care (Salt Lake City, Utah) Sun Certified Java Programmer for the Java 2 platform B.S., Computer Engineering from University of Utah
Goals What is POI? How do I install POI? What benefits do I get from using POI? What won't it do? POI alternatives Java tips Lots of code examples
What is POI?
What is Apache Jakarta POI? Poor Obfuscation Implementation A set of APIs for interacting with OLE 2 Compound Document Format files Examples: Word (.doc), Excel (.xls), and PowerPoint (.ppt)
Why Use POI? Data Import/Export
Why Use POI? Content Management
Why Use POI? Reporting
In an Ideal World...
In the Real World...
What other tools? Save as XML Save as HTML COM OpenOffice.org 2.0 POI is just one more tool
Anatomy of an OLE2CDF File
POIFS: At the Core POI file system (POIFS) is used to read and manipulate OLE2CDF files Package: org.apache.poi.poifs.filesystem Two types of stream entries supported: DirectoryEntry DocumentEntry
POIFS Examples Example: POIFSExample1.cfm Example: POIFSExample2.cfm
How Do I Get to the Data? APIs to interact with specific document types and streams XLS files (HSSF) PPT files (HSLF) 3.0 alpha DOC files (HWPF) scratchpad Document props (HPSF) (read-only) final ships with CF 7 I am using 3.0 alpha for this presentation
How to Install For release: For 3.0 alpha: Scratchpad is not included with CF 7 Stop CF services Save in {cfwebroot}/WEB-INF/lib Restart CF services
Quick Java-CF Review To use Java classes: createObject() – loads the class createObject(“java”,”fully.qualified.name”) Can use for static method calls obj.init() - creates an instance of the class using the specified constructor
Java Tip #1 Know your casting tools!
Java Tip #1 Casting tools javaCast(type,cfVar) boolean, int, long, float, double, string, null Null only available in 7 Primitive wrapper classes Array reflection classes java.lang.reflect.Array Call newInstance(class,int length)
Java Tip #2 Java reflection is your friend!
Java Tip #2 obj.getClass() gives you a reference to the class String value of name: obj.getClass().getName() Wrapper classes have a TYPE static variable to represent primitives.
org.apache.poi.hssf.usermodel Interface for reading and writing XLS files. Mature and reliable Basic class structure is similar to HTML table HSSFSheet = table HSSFRow = tr HSSFCell = td Example: HSSFExample1.cfm
Add some style to the spreadsheet HSSFCellStyle,HSSFFont Can modify: Fonts (size and style) Colors Background Fills Borders Widths and heights Example: HSSFExample2.cfm
Reading Spreadsheets Similar to writing spreadsheets Requires more care with datatypes! Null Example: HSSFExample3.cfm
org.apache.poi.hwpf Interface for reading and writing Word (DOC) files. In the scratchpad section of the library. Has worked for what I have used it for (reading files), which is all I will talk about today.
Structure of a Word Document
HWPF Example 1 Example: HWPFExample1.cfm
HWPF Example 2 More meaningful text Examples: HWPFExample2.cfm basicDocumentFacade.cfc
HWPF Example 3 Lists, Style Examples: HWPFExample3.cfm advancedDocumentFacade.cfc
org.apache.poi.org.apache.poi.hslf Interface for reading and writing PowerPoint (PPT) files. Early, but very active development
HSLF Example 1 Simple Slideshow parser Example: HSLFExample1.cfm
HSLF Example 2 Improved Slideshow parser XSLT Example: HSLFExample2.cfm slideShowExtractor.cfc
Limitations Available documentation Images Development activity
Resources google “jakarta poi”
Thank you Jeremy Lund