From b2f639cd901b54a1a34b6c6f99b4d7ba177c86e8 Mon Sep 17 00:00:00 2001 From: solomon87 Date: Wed, 30 Apr 2014 12:06:27 -0500 Subject: [PATCH 1/5] Adds Office 2007+ support --- examples/girls.xls | Bin 4608 -> 4608 bytes examples/read-2007.cfm | 96 +++++++++++++++++++++++++++++++ examples/write-2007.cfm | 60 ++++++++++++++++++++ lib/POIUtility.cfc | 121 ++++++++++++++++++++-------------------- 4 files changed, 216 insertions(+), 61 deletions(-) create mode 100644 examples/read-2007.cfm create mode 100644 examples/write-2007.cfm diff --git a/examples/girls.xls b/examples/girls.xls index 5bbb32abe837e2c059978c34f1b641dcc90025b1..a9e17888eb43d20f4ff57b4196447e028c10f3d1 100755 GIT binary patch delta 486 zcmZorX;9ga!^BbWqWfJ(%6Z1gB}^?$;T)3#ncXHkFuxGsWngeB%1q2t2*^y%PR%Qx zY{-%@c?Js~6BEPcWh{b>^->J145ADSN-9dqI?Boh@tW2eFt(-~i#!7xgA|HvbWmza zEV2>>26hH%gc3ai6f=NapfRcp91IHRYQQGd!;ONd)M3zKP-kF>*U(acxd+770CP00 zL2M;mC7>(gH5}rBCYv&7G8ll=109X518#rfhUSnlo;9+23P@WvfWy~lwxs_`- tqr+rJZedLaMt%kkCIJQ}pe!@Pe;~=g025lh6fCq`3_MUjDxK?X%WIw&(gH5}rB zX6i9$0wF`ZhL!@%{UA27CNv%P3_1)}li#vQb3+w@Y@95}E~YKVV#c7&V2ETI#3M)s zf?Wr+d$R<4Clh1LJ{AD^W>WD0 diff --git a/examples/read-2007.cfm b/examples/read-2007.cfm new file mode 100644 index 0000000..f919974 --- /dev/null +++ b/examples/read-2007.cfm @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + +

+ #objSheet.Name# +

+ + + + + + + + + + + + + + + + + + + + + + + + +
+ #objSheet.ColumnNames[ 1 ]# + + #objSheet.ColumnNames[ 2 ]# + + #objSheet.ColumnNames[ 3 ]# +
+ #objSheet.Query.column1# + + #objSheet.Query.column2# + + #objSheet.Query.column3# +
+ +
+ +
diff --git a/examples/write-2007.cfm b/examples/write-2007.cfm new file mode 100644 index 0000000..426b995 --- /dev/null +++ b/examples/write-2007.cfm @@ -0,0 +1,60 @@ + + + + + + + + + name|hair|best_feature + Julie|Blonde|Forearms + Lydia|Brunette|Eyes + Cynthia|Blonde|Eyes + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/POIUtility.cfc b/lib/POIUtility.cfc index 8e1aa91..6143c5b 100755 --- a/lib/POIUtility.cfc +++ b/lib/POIUtility.cfc @@ -53,7 +53,7 @@ - + @@ -73,17 +73,17 @@ // Create a default cell style object. LOCAL.Style = ARGUMENTS.WorkBook.CreateCellStyle(); + + // Get indexed colors + LOCAL.colorEnum = CreateObject("java", "org.apache.poi.ss.usermodel.IndexedColors"); // Check for background color. if (ListFindNoCase( "AQUA,BLACK,BLUE,BLUE_GREY,BRIGHT_GREEN,BROWN,CORAL,CORNFLOWER_BLUE,DARK_BLUE,DARK_GREEN,DARK_RED,DARK_TEAL,DARK_YELLOW,GOLD,GREEN,GREY_25_PERCENT,GREY_40_PERCENT,GREY_50_PERCENT,GREY_80_PERCENT,INDIGO,LAVENDER,LEMON_CHIFFON,LIGHT_BLUE,LIGHT_CORNFLOWER_BLUE,LIGHT_GREEN,LIGHT_ORANGE,LIGHT_TURQUOISE,LIGHT_YELLOW,LIME,MAROON,OLIVE_GREEN,ORANGE,ORCHID,PALE_BLUE,PINK,PLUM,RED,ROSE,ROYAL_BLUE,SEA_GREEN,SKY_BLUE,TAN,TEAL,TURQUOISE,VIOLET,WHITE,YELLOW", ARGUMENTS.CSS[ "background-color" ] )){ // Set the background color. LOCAL.Style.SetFillForegroundColor( - CreateObject( - "java", - "org.apache.poi.hssf.util.HSSFColor$#UCase( ARGUMENTS.CSS[ 'background-color' ] )#" - ).GetIndex() - ); + LOCAL.colorEnum.valueOf(JavaCast("String", UCase(ARGUMENTS.CSS['background-color']))).getIndex() + ); // Check for background style. @@ -193,11 +193,8 @@ if (ListFindNoCase( "AQUA,BLACK,BLUE,BLUE_GREY,BRIGHT_GREEN,BROWN,CORAL,CORNFLOWER_BLUE,DARK_BLUE,DARK_GREEN,DARK_RED,DARK_TEAL,DARK_YELLOW,GOLD,GREEN,GREY_25_PERCENT,GREY_40_PERCENT,GREY_50_PERCENT,GREY_80_PERCENT,INDIGO,LAVENDER,LEMON_CHIFFON,LIGHT_BLUE,LIGHT_CORNFLOWER_BLUE,LIGHT_GREEN,LIGHT_ORANGE,LIGHT_TURQUOISE,LIGHT_YELLOW,LIME,MAROON,OLIVE_GREEN,ORANGE,ORCHID,PALE_BLUE,PINK,PLUM,RED,ROSE,ROYAL_BLUE,SEA_GREEN,SKY_BLUE,TAN,TEAL,TURQUOISE,VIOLET,WHITE,YELLOW", ARGUMENTS.CSS[ "border-bottom-color" ] )){ LOCAL.Style.SetBottomBorderColor( - CreateObject( - "java", - "org.apache.poi.hssf.util.HSSFColor$#UCase( ARGUMENTS.CSS[ 'border-bottom-color' ] )#" - ).GetIndex() - ); + LOCAL.colorEnum.valueOf(JavaCast("String", UCase(ARGUMENTS.CSS['border-bottom-color']))).getIndex() + ); } @@ -287,11 +284,8 @@ if (ListFindNoCase( "AQUA,BLACK,BLUE,BLUE_GREY,BRIGHT_GREEN,BROWN,CORAL,CORNFLOWER_BLUE,DARK_BLUE,DARK_GREEN,DARK_RED,DARK_TEAL,DARK_YELLOW,GOLD,GREEN,GREY_25_PERCENT,GREY_40_PERCENT,GREY_50_PERCENT,GREY_80_PERCENT,INDIGO,LAVENDER,LEMON_CHIFFON,LIGHT_BLUE,LIGHT_CORNFLOWER_BLUE,LIGHT_GREEN,LIGHT_ORANGE,LIGHT_TURQUOISE,LIGHT_YELLOW,LIME,MAROON,OLIVE_GREEN,ORANGE,ORCHID,PALE_BLUE,PINK,PLUM,RED,ROSE,ROYAL_BLUE,SEA_GREEN,SKY_BLUE,TAN,TEAL,TURQUOISE,VIOLET,WHITE,YELLOW", ARGUMENTS.CSS[ "border-left-color" ] )){ LOCAL.Style.SetLeftBorderColor( - CreateObject( - "java", - "org.apache.poi.hssf.util.HSSFColor$#UCase( ARGUMENTS.CSS[ 'border-left-color' ] )#" - ).GetIndex() - ); + LOCAL.colorEnum.valueOf(JavaCast("String", UCase(ARGUMENTS.CSS['border-left-color']))).getIndex() + ); } @@ -381,11 +375,8 @@ if (ListFindNoCase( "AQUA,BLACK,BLUE,BLUE_GREY,BRIGHT_GREEN,BROWN,CORAL,CORNFLOWER_BLUE,DARK_BLUE,DARK_GREEN,DARK_RED,DARK_TEAL,DARK_YELLOW,GOLD,GREEN,GREY_25_PERCENT,GREY_40_PERCENT,GREY_50_PERCENT,GREY_80_PERCENT,INDIGO,LAVENDER,LEMON_CHIFFON,LIGHT_BLUE,LIGHT_CORNFLOWER_BLUE,LIGHT_GREEN,LIGHT_ORANGE,LIGHT_TURQUOISE,LIGHT_YELLOW,LIME,MAROON,OLIVE_GREEN,ORANGE,ORCHID,PALE_BLUE,PINK,PLUM,RED,ROSE,ROYAL_BLUE,SEA_GREEN,SKY_BLUE,TAN,TEAL,TURQUOISE,VIOLET,WHITE,YELLOW", ARGUMENTS.CSS[ "border-right-color" ] )){ LOCAL.Style.SetRightBorderColor( - CreateObject( - "java", - "org.apache.poi.hssf.util.HSSFColor$#UCase( ARGUMENTS.CSS[ 'border-right-color' ] )#" - ).GetIndex() - ); + LOCAL.colorEnum.valueOf(JavaCast("String", UCase(ARGUMENTS.CSS['border-right-color']))).getIndex() + ); } @@ -475,11 +466,8 @@ if (ListFindNoCase( "AQUA,BLACK,BLUE,BLUE_GREY,BRIGHT_GREEN,BROWN,CORAL,CORNFLOWER_BLUE,DARK_BLUE,DARK_GREEN,DARK_RED,DARK_TEAL,DARK_YELLOW,GOLD,GREEN,GREY_25_PERCENT,GREY_40_PERCENT,GREY_50_PERCENT,GREY_80_PERCENT,INDIGO,LAVENDER,LEMON_CHIFFON,LIGHT_BLUE,LIGHT_CORNFLOWER_BLUE,LIGHT_GREEN,LIGHT_ORANGE,LIGHT_TURQUOISE,LIGHT_YELLOW,LIME,MAROON,OLIVE_GREEN,ORANGE,ORCHID,PALE_BLUE,PINK,PLUM,RED,ROSE,ROYAL_BLUE,SEA_GREEN,SKY_BLUE,TAN,TEAL,TURQUOISE,VIOLET,WHITE,YELLOW", ARGUMENTS.CSS[ "border-top-color" ] )){ LOCAL.Style.SetTopBorderColor( - CreateObject( - "java", - "org.apache.poi.hssf.util.HSSFColor$#UCase( ARGUMENTS.CSS[ 'border-top-color' ] )#" - ).GetIndex() - ); + LOCAL.colorEnum.valueOf(JavaCast("String", UCase(ARGUMENTS.CSS['border-top-color']))).getIndex() + ); } @@ -493,11 +481,8 @@ if (ListFindNoCase( "AQUA,BLACK,BLUE,BLUE_GREY,BRIGHT_GREEN,BROWN,CORAL,CORNFLOWER_BLUE,DARK_BLUE,DARK_GREEN,DARK_RED,DARK_TEAL,DARK_YELLOW,GOLD,GREEN,GREY_25_PERCENT,GREY_40_PERCENT,GREY_50_PERCENT,GREY_80_PERCENT,INDIGO,LAVENDER,LEMON_CHIFFON,LIGHT_BLUE,LIGHT_CORNFLOWER_BLUE,LIGHT_GREEN,LIGHT_ORANGE,LIGHT_TURQUOISE,LIGHT_YELLOW,LIME,MAROON,OLIVE_GREEN,ORANGE,ORCHID,PALE_BLUE,PINK,PLUM,RED,ROSE,ROYAL_BLUE,SEA_GREEN,SKY_BLUE,TAN,TEAL,TURQUOISE,VIOLET,WHITE,YELLOW", ARGUMENTS.CSS[ "color" ] )){ LOCAL.Font.SetColor( - CreateObject( - "java", - "org.apache.poi.hssf.util.HSSFColor$#UCase( ARGUMENTS.CSS[ 'color' ] )#" - ).GetIndex() - ); + LOCAL.colorEnum.valueOf(JavaCast("String", UCase(ARGUMENTS.CSS['color']))).getIndex() + ); } @@ -865,23 +850,20 @@ // Define the local scope. var LOCAL = StructNew(); - - - // Create a file input stream to the given Excel file. - LOCAL.FileInputStream = CreateObject( "java", "java.io.FileInputStream" ).Init( ARGUMENTS.FilePath ); - - // Create the Excel file system object. This object is responsible - // for reading in the given Excel file. - LOCAL.ExcelFileSystem = CreateObject( "java", "org.apache.poi.poifs.filesystem.POIFSFileSystem" ).Init( LOCAL.FileInputStream ); - - // Get the workbook from the Excel file system. - LOCAL.WorkBook = CreateObject( - "java", - "org.apache.poi.hssf.usermodel.HSSFWorkbook" - ).Init( - LOCAL.ExcelFileSystem - ); + // Get Xcel Workbook + if (!fileExists(arguments.filepath)) { + throw(message="Workbook does not exist at #arguments.filepath#"); + } + + // Opening in Office 2003 format, if that fails try opening in OOXML Office 2007+ format + try { + variables.FileInputStream = CreateObject( "java", "java.io.FileInputStream" ).Init( ARGUMENTS.FilePath ); + LOCAL.WorkBook = CreateObject("java","org.apache.poi.hssf.usermodel.HSSFWorkbook").Init(variables.FileInputStream); + } catch(org.apache.poi.poifs.filesystem.OfficeXmlFileException cfcatch) { + variables.FileInputStream = CreateObject( "java", "java.io.FileInputStream" ).Init( ARGUMENTS.FilePath ); + LOCAL.WorkBook = CreateObject("java","org.apache.poi.xssf.usermodel.XSSFWorkbook").Init(variables.FileInputStream); + } // Check to see if we are returning an array of sheets OR just @@ -930,7 +912,7 @@ // Now that we have crated the Excel file system, // and read in the sheet data, we can close the // input file stream so that it is not locked. - LOCAL.FileInputStream.Close(); + variables.FileInputStream.Close(); // Return the array of sheets. return( LOCAL.Sheets ); @@ -1210,14 +1192,14 @@ // Get teh value of the cell based on the data type. The thing // to worry about here is cell forumlas and cell dates. Formulas - // can be strange and dates are stored as numeric types. For - // this demo, I am not going to worry about that at all. I will + // can be strange and dates are stored as numeric types. For + // this demo, I am not going to worry about that at all. I will // just grab dates as floats and formulas I will try to grab as // numeric values. if (LOCAL.CellType EQ LOCAL.Cell.CELL_TYPE_NUMERIC) { - // Get numeric cell data. This could be a standard number, - // could also be a date value. I am going to leave it up to + // Get numeric cell data. This could be a standard number, + // could also be a date value. I am going to leave it up to // the calling program to decide. LOCAL.CellValue = LOCAL.Cell.GetNumericCellValue(); @@ -1348,17 +1330,36 @@ default="" hint="Defines the limited CSS available for the alternate non-header rows. This style overwrites parts of the RowCSS." /> + + // Set up local scope. var LOCAL = StructNew(); - - // Create Excel workbook. - LOCAL.WorkBook = CreateObject( - "java", - "org.apache.poi.hssf.usermodel.HSSFWorkbook" - ).Init(); + + // Set the Office Format + if (arguments.OfficeFormat IS "" and right(arguments.FilePath, 4) eq 'xlsx') { + arguments.OfficeFormat = "2007"; + } else + if (arguments.OfficeFormat IS "" and right(arguments.FilePath, 3) eq 'xls') { + arguments.OfficeFormat = "2003"; + } + + if (arguments.OfficeFormat IS "2007") { + // Try opening file as Office 2003 format + LOCAL.WorkBook = CreateObject("java","org.apache.poi.xssf.usermodel.XSSFWorkbook").Init(); + } else if (arguments.OfficeFormat IS "2003") { + LOCAL.WorkBook = CreateObject("java","org.apache.poi.hssf.usermodel.HSSFWorkbook").Init(); + } else { + throw("Invalid argument OfficeFormat: #arguments.OfficeFormat#. Valid values are [2007,2003]"); + } // Check to see if we are dealing with an array of sheets or if we were // passed in a single sheet. @@ -1435,7 +1436,7 @@ // Close the file output stream. This will release any locks on // the file and finalize the process. LOCAL.FileOutputStream.Close(); - + // Return out. return; @@ -1907,8 +1908,6 @@ - - From f3d050869ead4b844010efda713d98c49c9e070e Mon Sep 17 00:00:00 2001 From: solomon87 Date: Wed, 30 Apr 2014 12:07:31 -0500 Subject: [PATCH 2/5] Adds support for date formatted columns --- lib/POIUtility.cfc | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/lib/POIUtility.cfc b/lib/POIUtility.cfc index 6143c5b..3fea03f 100755 --- a/lib/POIUtility.cfc +++ b/lib/POIUtility.cfc @@ -1188,20 +1188,27 @@ // Get the type of data in this cell. LOCAL.CellType = LOCAL.Cell.GetCellType(); - - - // Get teh value of the cell based on the data type. The thing - // to worry about here is cell forumlas and cell dates. Formulas - // can be strange and dates are stored as numeric types. For - // this demo, I am not going to worry about that at all. I will - // just grab dates as floats and formulas I will try to grab as - // numeric values. + + + // Get the value of the cell based on the data type. The thing + // to worry about here is cell forumlas and cell dates. Formulas + // can be strange and dates are stored as numeric types. if (LOCAL.CellType EQ LOCAL.Cell.CELL_TYPE_NUMERIC) { - - // Get numeric cell data. This could be a standard number, - // could also be a date value. I am going to leave it up to - // the calling program to decide. - LOCAL.CellValue = LOCAL.Cell.GetNumericCellValue(); + + // Check whether the cell is formatted as a date. If so + // get the format object from the cell style using that + // to format the java date returned from the cell value + // else get the numeric cell value + LOCAL.dateUtil = CreateObject("java","org.apache.poi.hssf.usermodel.HSSFDateUtil").init(); + if (LOCAL.dateUtil.isCellDateFormatted(LOCAL.Cell)) { + LOCAL.CellFmt = LOCAL.Cell.getCellStyle().getDataFormatString(); + LOCAL.CellValue = CreateObject("java","org.apache.poi.ss.format.CellDateFormatter").init(LOCAL.CellFmt). + format(LOCAL.dateUtil.getJavaDate(LOCAL.CellValue)); + } else { + + LOCAL.CellValue = LOCAL.Cell.GetNumericCellValue(); + + } } else if (LOCAL.CellType EQ LOCAL.Cell.CELL_TYPE_STRING){ From c87c3657bea07e405b21dc3ceacfa48209c076d4 Mon Sep 17 00:00:00 2001 From: solomon87 Date: Wed, 30 Apr 2014 12:12:55 -0500 Subject: [PATCH 3/5] Fixed variable scoping issue --- lib/POIUtility.cfc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/POIUtility.cfc b/lib/POIUtility.cfc index 3fea03f..de5febd 100755 --- a/lib/POIUtility.cfc +++ b/lib/POIUtility.cfc @@ -858,11 +858,11 @@ // Opening in Office 2003 format, if that fails try opening in OOXML Office 2007+ format try { - variables.FileInputStream = CreateObject( "java", "java.io.FileInputStream" ).Init( ARGUMENTS.FilePath ); - LOCAL.WorkBook = CreateObject("java","org.apache.poi.hssf.usermodel.HSSFWorkbook").Init(variables.FileInputStream); + LOCAL.FileInputStream = CreateObject( "java", "java.io.FileInputStream" ).Init( ARGUMENTS.FilePath ); + LOCAL.WorkBook = CreateObject("java","org.apache.poi.hssf.usermodel.HSSFWorkbook").Init(LOCAL.FileInputStream); } catch(org.apache.poi.poifs.filesystem.OfficeXmlFileException cfcatch) { - variables.FileInputStream = CreateObject( "java", "java.io.FileInputStream" ).Init( ARGUMENTS.FilePath ); - LOCAL.WorkBook = CreateObject("java","org.apache.poi.xssf.usermodel.XSSFWorkbook").Init(variables.FileInputStream); + LOCAL.FileInputStream = CreateObject( "java", "java.io.FileInputStream" ).Init( ARGUMENTS.FilePath ); + LOCAL.WorkBook = CreateObject("java","org.apache.poi.xssf.usermodel.XSSFWorkbook").Init(LOCAL.FileInputStream); } @@ -912,7 +912,7 @@ // Now that we have crated the Excel file system, // and read in the sheet data, we can close the // input file stream so that it is not locked. - variables.FileInputStream.Close(); + LOCAL.FileInputStream.Close(); // Return the array of sheets. return( LOCAL.Sheets ); From eaae3a64ab6336500c88bd6253d12c28f625f80b Mon Sep 17 00:00:00 2001 From: solomon87 Date: Wed, 30 Apr 2014 12:18:23 -0500 Subject: [PATCH 4/5] Added missing girls.xslx file --- examples/girls.xlsx | Bin 0 -> 3543 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/girls.xlsx diff --git a/examples/girls.xlsx b/examples/girls.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b32e51c3434f6e15fdee0a5bd219211aff42c328 GIT binary patch literal 3543 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 Date: Thu, 24 Sep 2015 14:34:23 -0400 Subject: [PATCH 5/5] Update to create XLSX documents with the custom tags Using the xssf objects instead of the old hssf --- lib/tags/poi/cell.cfm | 6 +++--- lib/tags/poi/document.cfm | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/tags/poi/cell.cfm b/lib/tags/poi/cell.cfm index efdc97a..397190b 100755 --- a/lib/tags/poi/cell.cfm +++ b/lib/tags/poi/cell.cfm @@ -461,11 +461,11 @@ diff --git a/lib/tags/poi/document.cfm b/lib/tags/poi/document.cfm index d99c926..e63361a 100755 --- a/lib/tags/poi/document.cfm +++ b/lib/tags/poi/document.cfm @@ -73,7 +73,7 @@ - - + @@ -90,7 +90,7 @@ Create a data formatter utility object (we will need this to get the formatting index later on when we set the cell styles). ---> - +