From c67c1d5ca0545d59ca3b8515bd78e7f02328c118 Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Fri, 14 Nov 2008 11:56:41 +0000 Subject: [PATCH] 1. fixed XSSFSheet.groupRow and ungroupRow to operate on 0-based arguments, was 1-based2. repackaged common xssh-hssf examples, created a page in the site for them 3. converted broken non-ascii characters to unicode in TestMetaDataIPI and TestWriteWellKnown git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@713981 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/changes.xml | 6 +- .../content/xdocs/spreadsheet/book.xml | 3 +- .../content/xdocs/spreadsheet/examples.xml | 75 ++++++ src/documentation/content/xdocs/status.xml | 6 +- .../resources/images/businessplan.jpg | Bin 0 -> 63125 bytes .../resources/images/calendar.jpg | Bin 0 -> 38647 bytes .../resources/images/loancalc.jpg | Bin 0 -> 26555 bytes .../resources/images/timesheet.jpg | Bin 0 -> 47311 bytes .../examples/BusinessPlan.java | 174 +++++++------ .../apache/poi/ss/examples/CalendarDemo.java | 242 ++++++++++++++++++ .../examples/LoanCalculator.java | 142 +++++----- .../examples/TimesheetDemo.java | 106 ++++---- .../xssf/usermodel/examples/CalendarDemo.java | 3 + .../apache/poi/hssf/usermodel/HSSFCell.java | 3 +- .../apache/poi/hssf/usermodel/HSSFSheet.java | 6 + .../org/apache/poi/ss/usermodel/Cell.java | 18 +- .../org/apache/poi/ss/usermodel/Sheet.java | 32 ++- .../org/apache/poi/xssf/dev/XSSFSave.java | 2 +- .../apache/poi/xssf/usermodel/XSSFSheet.java | 34 ++- .../poi/xssf/usermodel/TestXSSFSheet.java | 8 +- .../poi/hslf}/examples/SoundFinder.java | 2 +- .../poi/hpsf/basic/TestMetaDataIPI.java | 18 +- .../poi/hpsf/basic/TestWriteWellKnown.java | 21 +- 23 files changed, 640 insertions(+), 261 deletions(-) create mode 100755 src/documentation/content/xdocs/spreadsheet/examples.xml create mode 100755 src/documentation/resources/images/businessplan.jpg create mode 100755 src/documentation/resources/images/calendar.jpg create mode 100755 src/documentation/resources/images/loancalc.jpg create mode 100755 src/documentation/resources/images/timesheet.jpg rename src/examples/src/org/apache/poi/{xssf/usermodel => ss}/examples/BusinessPlan.java (64%) create mode 100755 src/examples/src/org/apache/poi/ss/examples/CalendarDemo.java rename src/examples/src/org/apache/poi/{xssf/usermodel => ss}/examples/LoanCalculator.java (71%) rename src/examples/src/org/apache/poi/{xssf/usermodel => ss}/examples/TimesheetDemo.java (65%) rename src/{examples/src/org/apache/poi/hslf/usermodel => scratchpad/examples/src/org/apache/poi/hslf}/examples/SoundFinder.java (98%) diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index 469e516a5a..8257ad5ef1 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -37,11 +37,11 @@ - 46174 - Fixed HSSFName to handle general formulas (not just area references) + 46174 - Fixed HSSFName to handle general formulas (not just area references) 46189 - added chart records: CHARTFRTINFO, STARTBLOCK, ENDBLOCK, STARTOBJECT, ENDOBJECT, and CATLAB - 46199 - More tweaks to EmbeddedObjectRefSubRecord + 46199 - More tweaks to EmbeddedObjectRefSubRecord Changes to formula evaluation allowing for reduced memory usage - 45290 - Support odd files where the POIFS header block comes after the data blocks, and is on the data blocks list + 45290 - Support odd files where the POIFS header block comes after the data blocks, and is on the data blocks list 46184 - More odd escaped date formats Include the sheet number in the output of XLS2CSVmra 46043 - correctly write out HPSF properties with HWPF diff --git a/src/documentation/content/xdocs/spreadsheet/book.xml b/src/documentation/content/xdocs/spreadsheet/book.xml index 7e8a59d7d8..55d1470b00 100644 --- a/src/documentation/content/xdocs/spreadsheet/book.xml +++ b/src/documentation/content/xdocs/spreadsheet/book.xml @@ -34,7 +34,8 @@ - + + diff --git a/src/documentation/content/xdocs/spreadsheet/examples.xml b/src/documentation/content/xdocs/spreadsheet/examples.xml new file mode 100755 index 0000000000..f683738a3a --- /dev/null +++ b/src/documentation/content/xdocs/spreadsheet/examples.xml @@ -0,0 +1,75 @@ + + + + + +
+ HSSF and XSSF Examples + + + +
+ +
HSSF and XSSF examples +

POI comes with a number of examples that demonstrate how you can use POI API to create documents from "real life". + The examples are 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

+
+
BusinessPlan +

The BusinessPlan + application creates a sample business plan with three phases, weekly iterations and time highlighting. Demonstrates advanced cell formatting + (number and date formats, alignmnets, fills, borders) and various settings for organizing data in a sheet (freezed panes, groupped rows). +

+

+ business plan demo +

+
+
Calendar +

The Calendar + demo creates a multi sheet calendar. Each month is on a separate sheet. +

+

+ calendar demo +

+
+
LoanCalculator +

The LoanCalculator + demo creates a simple loan calculator. Demonstrates advance usage of cell formulas and named ranges. +

+

+ loan calculator demo +

+
+
TimesheetDemo +

The TimesheetDemo + demo creates a weekly timesheet with automatic calculation of total hours. Demonstrates advance usage of cell formulas. +

+

+ timesheet demo +

+
+ +
diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 5ec9d4401a..d3f1ed911b 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,11 +34,11 @@ - 46174 - Fixed HSSFName to handle general formulas (not just area references) + 46174 - Fixed HSSFName to handle general formulas (not just area references) 46189 - added chart records: CHARTFRTINFO, STARTBLOCK, ENDBLOCK, STARTOBJECT, ENDOBJECT, and CATLAB - 46199 - More tweaks to EmbeddedObjectRefSubRecord + 46199 - More tweaks to EmbeddedObjectRefSubRecord Changes to formula evaluation allowing for reduced memory usage - 45290 - Support odd files where the POIFS header block comes after the data blocks, and is on the data blocks list + 45290 - Support odd files where the POIFS header block comes after the data blocks, and is on the data blocks list 46184 - More odd escaped date formats Include the sheet number in the output of XLS2CSVmra 46043 - correctly write out HPSF properties with HWPF diff --git a/src/documentation/resources/images/businessplan.jpg b/src/documentation/resources/images/businessplan.jpg new file mode 100755 index 0000000000000000000000000000000000000000..9bfaf4c7b2dd800b30ca20c87b4a70b2efd64044 GIT binary patch literal 63125 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 G(fg4jDy3K|(-K>F!iQawrKAkS?W5 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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 100755 index 0000000000000000000000000000000000000000..1ff512b1f9a619b2ad077a0846cf2f579ad3cb97 GIT binary patch literal 47311 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 c 0 && args[0].equals("-xls")) wb = new HSSFWorkbook(); + else wb = new XSSFWorkbook(); - XSSFWorkbook wb = new XSSFWorkbook(); - Map styles = createStyles(wb); + Map styles = createStyles(wb); - XSSFSheet sheet = wb.createSheet("Plan"); + Sheet sheet = wb.createSheet("Business Plan"); //turn off gridlines sheet.setDisplayGridlines(false); sheet.setPrintGridlines(false); - XSSFPrintSetup printSetup = sheet.getPrintSetup(); - printSetup.setOrientation(PrintOrientation.LANDSCAPE); sheet.setFitToPage(true); sheet.setHorizontallyCenter(true); + PrintSetup printSetup = sheet.getPrintSetup(); + printSetup.setLandscape(true); + + //the following three statements are required only for HSSF + sheet.setAutobreaks(true); + printSetup.setFitHeight((short)1); + printSetup.setFitWidth((short)1); //the header row: centered text in 48pt font - XSSFRow headerRow = sheet.createRow(0); + Row headerRow = sheet.createRow(0); headerRow.setHeightInPoints(12.75f); - for (int i = 0; i < days.length; i++) { - XSSFCell cell = headerRow.createCell(i); - cell.setCellValue(days[i]); + for (int i = 0; i < titles.length; i++) { + Cell cell = headerRow.createCell(i); + cell.setCellValue(titles[i]); cell.setCellStyle(styles.get("header")); } //columns for 11 weeks starting from 9-Jul + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + calendar.setTime(fmt.parse("9-Jul")); calendar.set(Calendar.YEAR, year); for (int i = 0; i < 11; i++) { - XSSFCell cell = headerRow.createCell(days.length + i); + Cell cell = headerRow.createCell(titles.length + i); cell.setCellValue(calendar); cell.setCellStyle(styles.get("header_date")); calendar.roll(Calendar.WEEK_OF_YEAR, true); } - + //freeze the first row sheet.createFreezePane(0, 1); - XSSFRow row; - XSSFCell cell; + Row row; + Cell cell; int rownum = 1; for (int i = 0; i < data.length; i++, rownum++) { row = sheet.createRow(rownum); @@ -171,139 +182,142 @@ public class BusinessPlan { } } + //group rows for each phase, row numbers are 0-based + sheet.groupRow(4, 6); + sheet.groupRow(9, 13); + sheet.groupRow(16, 18); - sheet.groupRow(5, 7); - sheet.groupRow(10, 14); - sheet.groupRow(17, 19); - + //set column widths, the width is measured in units of 1/256th of a character width sheet.setColumnWidth(0, 256*6); sheet.setColumnWidth(1, 256*33); sheet.setColumnWidth(2, 256*20); - sheet.setZoom(75); + sheet.setZoom(3, 4); // Write the output to a file - FileOutputStream out = new FileOutputStream("xssf-plan.xlsx"); + String file = "businessplan.xls"; + if(wb instanceof XSSFWorkbook) file += "x"; + FileOutputStream out = new FileOutputStream(file); wb.write(out); out.close(); } /** - * cell styles used for formatting calendar sheets + * create a library of cell styles */ - private static Map createStyles(XSSFWorkbook wb){ - Map styles = new HashMap(); - XSSFDataFormat df = wb.createDataFormat(); + private static Map createStyles(Workbook wb){ + Map styles = new HashMap(); + DataFormat df = wb.createDataFormat(); - XSSFCellStyle style; - XSSFFont headerFont = wb.createFont(); - headerFont.setBold(true); + CellStyle style; + Font headerFont = wb.createFont(); + headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.CENTER); - style.setFillForegroundColor(new XSSFColor(new java.awt.Color(204, 204, 255))); - style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setFont(headerFont); styles.put("header", style); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.CENTER); - style.setFillForegroundColor(new XSSFColor(new java.awt.Color(204, 204, 255))); - style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setFont(headerFont); style.setDataFormat(df.getFormat("d-mmm")); styles.put("header_date", style); - XSSFFont font1 = wb.createFont(); - font1.setBold(true); + Font font1 = wb.createFont(); + font1.setBoldweight(Font.BOLDWEIGHT_BOLD); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.LEFT); + style.setAlignment(CellStyle.ALIGN_LEFT); style.setFont(font1); styles.put("cell_b", style); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.CENTER); + style.setAlignment(CellStyle.ALIGN_CENTER); style.setFont(font1); styles.put("cell_b_centered", style); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.RIGHT); + style.setAlignment(CellStyle.ALIGN_RIGHT); style.setFont(font1); style.setDataFormat(df.getFormat("d-mmm")); styles.put("cell_b_date", style); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.RIGHT); + style.setAlignment(CellStyle.ALIGN_RIGHT); style.setFont(font1); - style.setFillForegroundColor(new XSSFColor(new java.awt.Color(228, 228, 228))); - style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setDataFormat(df.getFormat("d-mmm")); styles.put("cell_g", style); - XSSFFont font2 = wb.createFont(); + Font font2 = wb.createFont(); font2.setColor(IndexedColors.BLUE.getIndex()); - font2.setBold(true); + font2.setBoldweight(Font.BOLDWEIGHT_BOLD); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.LEFT); + style.setAlignment(CellStyle.ALIGN_LEFT); style.setFont(font2); styles.put("cell_bb", style); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.RIGHT); + style.setAlignment(CellStyle.ALIGN_RIGHT); style.setFont(font1); - style.setFillForegroundColor(new XSSFColor(new java.awt.Color(228, 228, 228))); - style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setDataFormat(df.getFormat("d-mmm")); styles.put("cell_bg", style); - XSSFFont font3 = wb.createFont(); + Font font3 = wb.createFont(); font3.setFontHeightInPoints((short)14); font3.setColor(IndexedColors.DARK_BLUE.getIndex()); - font3.setBold(true); + font3.setBoldweight(Font.BOLDWEIGHT_BOLD); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.LEFT); + style.setAlignment(CellStyle.ALIGN_LEFT); style.setFont(font3); style.setWrapText(true); styles.put("cell_h", style); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.LEFT); + style.setAlignment(CellStyle.ALIGN_LEFT); style.setWrapText(true); styles.put("cell_normal", style); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.CENTER); + style.setAlignment(CellStyle.ALIGN_CENTER); style.setWrapText(true); styles.put("cell_normal_centered", style); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.RIGHT); + style.setAlignment(CellStyle.ALIGN_RIGHT); style.setWrapText(true); style.setDataFormat(df.getFormat("d-mmm")); styles.put("cell_normal_date", style); style = createBorderedStyle(wb); - style.setAlignment(HorizontalAlignment.LEFT); + style.setAlignment(CellStyle.ALIGN_LEFT); style.setIndention((short)1); style.setWrapText(true); styles.put("cell_indented", style); style = createBorderedStyle(wb); style.setFillForegroundColor(IndexedColors.BLUE.getIndex()); - style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); styles.put("cell_blue", style); return styles; } - private static XSSFCellStyle createBorderedStyle(XSSFWorkbook wb){ - XSSFCellStyle style = wb.createCellStyle(); - style.setBorderRight(BorderStyle.THIN); + private static CellStyle createBorderedStyle(Workbook wb){ + CellStyle style = wb.createCellStyle(); + style.setBorderRight(CellStyle.BORDER_THIN); style.setRightBorderColor(IndexedColors.BLACK.getIndex()); - style.setBorderBottom(BorderStyle.THIN); + style.setBorderBottom(CellStyle.BORDER_THIN); style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); - style.setBorderLeft(BorderStyle.THIN); + style.setBorderLeft(CellStyle.BORDER_THIN); style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); - style.setBorderTop(BorderStyle.THIN); + style.setBorderTop(CellStyle.BORDER_THIN); style.setTopBorderColor(IndexedColors.BLACK.getIndex()); return style; } diff --git a/src/examples/src/org/apache/poi/ss/examples/CalendarDemo.java b/src/examples/src/org/apache/poi/ss/examples/CalendarDemo.java new file mode 100755 index 0000000000..5cdf794841 --- /dev/null +++ b/src/examples/src/org/apache/poi/ss/examples/CalendarDemo.java @@ -0,0 +1,242 @@ +/* ==================================================================== + 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. +==================================================================== */ +package org.apache.poi.ss.examples; + +import org.apache.poi.xssf.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; + +import java.io.FileOutputStream; +import java.util.Calendar; +import java.util.Map; +import java.util.HashMap; + +/** + * A monthly calendar created using Apache POI. Each month is on a separate sheet. + *
+ * Usage:
+ * CalendarDemo -xls|xlsx 
+ * 
+ * + * @author Yegor Kozlov + */ +public class CalendarDemo { + + private static final String[] days = { + "Sunday", "Monday", "Tuesday", + "Wednesday", "Thursday", "Friday", "Saturday"}; + + private static final String[] months = { + "January", "February", "March","April", "May", "June","July", "August", + "September","October", "November", "December"}; + + public static void main(String[] args) throws Exception { + + Calendar calendar = Calendar.getInstance(); + boolean xlsx = true; + for (int i = 0; i < args.length; i++) { + if(args[i].charAt(0) == '-'){ + xlsx = args[i].equals("-xlsx"); + } else { + calendar.set(Calendar.YEAR, Integer.parseInt(args[i])); + } + } + int year = calendar.get(Calendar.YEAR); + + Workbook wb = xlsx ? new XSSFWorkbook() : new HSSFWorkbook(); + + Map styles = createStyles(wb); + + for (int month = 0; month < 12; month++) { + calendar.set(Calendar.MONTH, month); + calendar.set(Calendar.DAY_OF_MONTH, 1); + //create a sheet for each month + Sheet sheet = wb.createSheet(months[month]); + + //turn off gridlines + sheet.setDisplayGridlines(false); + sheet.setPrintGridlines(false); + sheet.setFitToPage(true); + sheet.setHorizontallyCenter(true); + PrintSetup printSetup = sheet.getPrintSetup(); + printSetup.setLandscape(true); + + //the following three statements are required only for HSSF + sheet.setAutobreaks(true); + printSetup.setFitHeight((short)1); + printSetup.setFitWidth((short)1); + + //the header row: centered text in 48pt font + Row headerRow = sheet.createRow(0); + headerRow.setHeightInPoints(80); + Cell titleCell = headerRow.createCell(0); + titleCell.setCellValue(months[month] + " " + year); + titleCell.setCellStyle(styles.get("title")); + sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$N$1")); + + //header with month titles + Row monthRow = sheet.createRow(1); + for (int i = 0; i < days.length; i++) { + //set column widths, the width is measured in units of 1/256th of a character width + sheet.setColumnWidth(i*2, 5*256); //the column is 5 characters wide + sheet.setColumnWidth(i*2 + 1, 13*256); //the column is 13 characters wide + sheet.addMergedRegion(new CellRangeAddress(1, 1, i*2, i*2+1)); + Cell monthCell = monthRow.createCell(i*2); + monthCell.setCellValue(days[i]); + monthCell.setCellStyle(styles.get("month")); + } + + int cnt = 1, day=1; + int rownum = 2; + for (int j = 0; j < 6; j++) { + Row row = sheet.createRow(rownum++); + row.setHeightInPoints(100); + for (int i = 0; i < days.length; i++) { + Cell dayCell_1 = row.createCell(i*2); + Cell dayCell_2 = row.createCell(i*2 + 1); + + int day_of_week = calendar.get(Calendar.DAY_OF_WEEK); + if(cnt >= day_of_week && calendar.get(Calendar.MONTH) == month) { + dayCell_1.setCellValue(day); + calendar.set(Calendar.DAY_OF_MONTH, ++day); + + if(i == 0 || i == days.length-1) { + dayCell_1.setCellStyle(styles.get("weekend_left")); + dayCell_2.setCellStyle(styles.get("weekend_right")); + } else { + dayCell_1.setCellStyle(styles.get("workday_left")); + dayCell_2.setCellStyle(styles.get("workday_right")); + } + } else { + dayCell_1.setCellStyle(styles.get("grey_left")); + dayCell_2.setCellStyle(styles.get("grey_right")); + } + cnt++; + } + if(calendar.get(Calendar.MONTH) > month) break; + } + } + + // Write the output to a file + String file = "calendar.xls"; + if(wb instanceof XSSFWorkbook) file += "x"; + FileOutputStream out = new FileOutputStream(file); + wb.write(out); + out.close(); + } + + /** + * cell styles used for formatting calendar sheets + */ + private static Map createStyles(Workbook wb){ + Map styles = new HashMap(); + + short borderColor = IndexedColors.GREY_50_PERCENT.getIndex(); + + CellStyle style; + Font titleFont = wb.createFont(); + titleFont.setFontHeightInPoints((short)48); + titleFont.setColor(IndexedColors.DARK_BLUE.getIndex()); + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setFont(titleFont); + styles.put("title", style); + + Font monthFont = wb.createFont(); + monthFont.setFontHeightInPoints((short)12); + monthFont.setColor(IndexedColors.WHITE.getIndex()); + monthFont.setBoldweight(Font.BOLDWEIGHT_BOLD); + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setFillForegroundColor(IndexedColors.DARK_BLUE.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); + style.setFont(monthFont); + styles.put("month", style); + + Font dayFont = wb.createFont(); + dayFont.setFontHeightInPoints((short)14); + dayFont.setBoldweight(Font.BOLDWEIGHT_BOLD); + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_LEFT); + style.setVerticalAlignment(CellStyle.VERTICAL_TOP); + style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); + style.setBorderLeft(CellStyle.BORDER_THIN); + style.setLeftBorderColor(borderColor); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(borderColor); + style.setFont(dayFont); + styles.put("weekend_left", style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_TOP); + style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); + style.setBorderRight(CellStyle.BORDER_THIN); + style.setRightBorderColor(borderColor); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(borderColor); + styles.put("weekend_right", style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_LEFT); + style.setVerticalAlignment(CellStyle.VERTICAL_TOP); + style.setBorderLeft(CellStyle.BORDER_THIN); + style.setFillForegroundColor(IndexedColors.WHITE.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); + style.setLeftBorderColor(borderColor); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(borderColor); + style.setFont(dayFont); + styles.put("workday_left", style); + + style = wb.createCellStyle(); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_TOP); + style.setFillForegroundColor(IndexedColors.WHITE.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); + style.setBorderRight(CellStyle.BORDER_THIN); + style.setRightBorderColor(borderColor); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(borderColor); + styles.put("workday_right", style); + + style = wb.createCellStyle(); + style.setBorderLeft(CellStyle.BORDER_THIN); + style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(borderColor); + styles.put("grey_left", style); + + style = wb.createCellStyle(); + style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); + style.setBorderRight(CellStyle.BORDER_THIN); + style.setRightBorderColor(borderColor); + style.setBorderBottom(CellStyle.BORDER_THIN); + style.setBottomBorderColor(borderColor); + styles.put("grey_right", style); + + return styles; + } +} diff --git a/src/examples/src/org/apache/poi/xssf/usermodel/examples/LoanCalculator.java b/src/examples/src/org/apache/poi/ss/examples/LoanCalculator.java similarity index 71% rename from src/examples/src/org/apache/poi/xssf/usermodel/examples/LoanCalculator.java rename to src/examples/src/org/apache/poi/ss/examples/LoanCalculator.java index 187ab579cd..96bb5f1652 100755 --- a/src/examples/src/org/apache/poi/xssf/usermodel/examples/LoanCalculator.java +++ b/src/examples/src/org/apache/poi/ss/examples/LoanCalculator.java @@ -14,32 +14,40 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ -package org.apache.poi.xssf.usermodel.examples; +package org.apache.poi.ss.examples; import org.apache.poi.xssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.util.Map; import java.util.HashMap; import java.io.FileOutputStream; /** - * Simple Loan Calculator + * Simple Loan Calculator. Demonstrates advance usage of cell formulas and named ranges. + * + * Usage: + * LoanCalculator -xls|xlsx * * @author Yegor Kozlov */ public class LoanCalculator { public static void main(String[] args) throws Exception { - XSSFWorkbook wb = new XSSFWorkbook(); - Map styles = createStyles(wb); - XSSFSheet sheet = wb.createSheet("Loan Calculator"); + Workbook wb; + + if(args.length > 0 && args[0].equals("-xls")) wb = new HSSFWorkbook(); + else wb = new XSSFWorkbook(); + + Map styles = createStyles(wb); + Sheet sheet = wb.createSheet("Loan Calculator"); sheet.setPrintGridlines(false); sheet.setDisplayGridlines(false); - XSSFPrintSetup printSetup = sheet.getPrintSetup(); - printSetup.setOrientation(PrintOrientation.LANDSCAPE); + PrintSetup printSetup = sheet.getPrintSetup(); + printSetup.setLandscape(true); sheet.setFitToPage(true); sheet.setHorizontallyCenter(true); @@ -53,17 +61,17 @@ public class LoanCalculator { createNames(wb); - XSSFRow titleRow = sheet.createRow(0); + Row titleRow = sheet.createRow(0); titleRow.setHeightInPoints(35); for (int i = 1; i <= 7; i++) { titleRow.createCell(i).setCellStyle(styles.get("title")); } - XSSFCell titleCell = titleRow.getCell(2); + Cell titleCell = titleRow.getCell(2); titleCell.setCellValue("Simple Loan Calculator"); sheet.addMergedRegion(CellRangeAddress.valueOf("$C$1:$H$1")); - XSSFRow row = sheet.createRow(2); - XSSFCell cell = row.createCell(4); + Row row = sheet.createRow(2); + Cell cell = row.createCell(4); cell.setCellValue("Enter values"); cell.setCellStyle(styles.get("item_right")); @@ -73,6 +81,7 @@ public class LoanCalculator { cell.setCellStyle(styles.get("item_left")); cell = row.createCell(4); cell.setCellStyle(styles.get("input_$")); + cell.setAsActiveCell(); row = sheet.createRow(4); cell = row.createCell(2); @@ -127,10 +136,11 @@ public class LoanCalculator { cell.setCellFormula("IF(Values_Entered,Monthly_Payment*Number_of_Payments,\"\")"); cell.setCellStyle(styles.get("formula_$")); - sheet.setActiveCell("E4"); // Write the output to a file - FileOutputStream out = new FileOutputStream("loan-calculator.xlsx"); + String file = "loan-calculator.xls"; + if(wb instanceof XSSFWorkbook) file += "x"; + FileOutputStream out = new FileOutputStream(file); wb.write(out); out.close(); } @@ -138,126 +148,122 @@ public class LoanCalculator { /** * cell styles used for formatting calendar sheets */ - private static Map createStyles(XSSFWorkbook wb){ - Map styles = new HashMap(); + private static Map createStyles(Workbook wb){ + Map styles = new HashMap(); - XSSFCellStyle style; - XSSFFont titleFont = wb.createFont(); + CellStyle style; + Font titleFont = wb.createFont(); titleFont.setFontHeightInPoints((short)14); titleFont.setFontName("Trebuchet MS"); style = wb.createCellStyle(); style.setFont(titleFont); - style.setBorderBottom(BorderStyle.DOTTED); + style.setBorderBottom(CellStyle.BORDER_DOTTED); style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); styles.put("title", style); - XSSFFont itemFont = wb.createFont(); + Font itemFont = wb.createFont(); itemFont.setFontHeightInPoints((short)9); itemFont.setFontName("Trebuchet MS"); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.LEFT); + style.setAlignment(CellStyle.ALIGN_LEFT); style.setFont(itemFont); styles.put("item_left", style); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.RIGHT); + style.setAlignment(CellStyle.ALIGN_RIGHT); style.setFont(itemFont); styles.put("item_right", style); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.RIGHT); + style.setAlignment(CellStyle.ALIGN_RIGHT); style.setFont(itemFont); - style.setBorderRight(BorderStyle.DOTTED); + style.setBorderRight(CellStyle.BORDER_DOTTED); style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderBottom(BorderStyle.DOTTED); + style.setBorderBottom(CellStyle.BORDER_DOTTED); style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderLeft(BorderStyle.DOTTED); + style.setBorderLeft(CellStyle.BORDER_DOTTED); style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderTop(BorderStyle.DOTTED); + style.setBorderTop(CellStyle.BORDER_DOTTED); style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); style.setDataFormat(wb.createDataFormat().getFormat("_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)")); styles.put("input_$", style); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.RIGHT); + style.setAlignment(CellStyle.ALIGN_RIGHT); style.setFont(itemFont); - style.setBorderRight(BorderStyle.DOTTED); + style.setBorderRight(CellStyle.BORDER_DOTTED); style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderBottom(BorderStyle.DOTTED); + style.setBorderBottom(CellStyle.BORDER_DOTTED); style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderLeft(BorderStyle.DOTTED); + style.setBorderLeft(CellStyle.BORDER_DOTTED); style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderTop(BorderStyle.DOTTED); + style.setBorderTop(CellStyle.BORDER_DOTTED); style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); style.setDataFormat(wb.createDataFormat().getFormat("0.000%")); styles.put("input_%", style); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.RIGHT); + style.setAlignment(CellStyle.ALIGN_RIGHT); style.setFont(itemFont); - style.setBorderRight(BorderStyle.DOTTED); + style.setBorderRight(CellStyle.BORDER_DOTTED); style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderBottom(BorderStyle.DOTTED); + style.setBorderBottom(CellStyle.BORDER_DOTTED); style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderLeft(BorderStyle.DOTTED); + style.setBorderLeft(CellStyle.BORDER_DOTTED); style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderTop(BorderStyle.DOTTED); + style.setBorderTop(CellStyle.BORDER_DOTTED); style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); style.setDataFormat(wb.createDataFormat().getFormat("0")); styles.put("input_i", style); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.CENTER); + style.setAlignment(CellStyle.ALIGN_CENTER); style.setFont(itemFont); style.setDataFormat(wb.createDataFormat().getFormat("m/d/yy")); styles.put("input_d", style); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.RIGHT); + style.setAlignment(CellStyle.ALIGN_RIGHT); style.setFont(itemFont); - style.setBorderRight(BorderStyle.DOTTED); + style.setBorderRight(CellStyle.BORDER_DOTTED); style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderBottom(BorderStyle.DOTTED); + style.setBorderBottom(CellStyle.BORDER_DOTTED); style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderLeft(BorderStyle.DOTTED); + style.setBorderLeft(CellStyle.BORDER_DOTTED); style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderTop(BorderStyle.DOTTED); + style.setBorderTop(CellStyle.BORDER_DOTTED); style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); style.setDataFormat(wb.createDataFormat().getFormat("$##,##0.00")); - style.setBorderBottom(BorderStyle.DOTTED); + style.setBorderBottom(CellStyle.BORDER_DOTTED); style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setFillForegroundColor(new XSSFColor(new java.awt.Color(234, 234, 234))); - style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); styles.put("formula_$", style); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.RIGHT); + style.setAlignment(CellStyle.ALIGN_RIGHT); style.setFont(itemFont); - style.setBorderRight(BorderStyle.DOTTED); + style.setBorderRight(CellStyle.BORDER_DOTTED); style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderBottom(BorderStyle.DOTTED); + style.setBorderBottom(CellStyle.BORDER_DOTTED); style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderLeft(BorderStyle.DOTTED); + style.setBorderLeft(CellStyle.BORDER_DOTTED); style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setBorderTop(BorderStyle.DOTTED); + style.setBorderTop(CellStyle.BORDER_DOTTED); style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); style.setDataFormat(wb.createDataFormat().getFormat("0")); - style.setBorderBottom(BorderStyle.DOTTED); + style.setBorderBottom(CellStyle.BORDER_DOTTED); style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); - style.setFillForegroundColor(new XSSFColor(new java.awt.Color(234, 234, 234))); - style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); styles.put("formula_i", style); return styles; } //define named ranges for the inputs and formulas - public static void createNames(XSSFWorkbook wb){ - XSSFName name; - - name = wb.createName(); - name.setNameName("Header_Row"); - name.setReference("ROW('Loan Calculator'!#REF!)"); + public static void createNames(Workbook wb){ + Name name; name = wb.createName(); name.setNameName("Interest_Rate"); @@ -267,10 +273,6 @@ public class LoanCalculator { name.setNameName("Loan_Amount"); name.setReference("'Loan Calculator'!$E$4"); - name = wb.createName(); - name.setNameName("Loan_Not_Paid"); - name.setReference("F(Payment_Number<=Number_of_Payments,1,0)"); - name = wb.createName(); name.setNameName("Loan_Start"); name.setReference("'Loan Calculator'!$E$7"); @@ -279,21 +281,13 @@ public class LoanCalculator { name.setNameName("Loan_Years"); name.setReference("'Loan Calculator'!$E$6"); - name = wb.createName(); - name.setNameName("Monthly_Payment"); - name.setReference("-PMT(Interest_Rate/12,Number_of_Payments,Loan_Amount)"); - name = wb.createName(); name.setNameName("Number_of_Payments"); name.setReference("'Loan Calculator'!$E$10"); name = wb.createName(); - name.setNameName("Payment_Number"); - name.setReference("ROW()-Header_Row"); - - name = wb.createName(); - name.setNameName("Principal"); - name.setReference("-PPMT(Interest_Rate/12,Payment_Number,Number_of_Payments,Loan_Amount)"); + name.setNameName("Monthly_Payment"); + name.setReference("-PMT(Interest_Rate/12,Number_of_Payments,Loan_Amount)"); name = wb.createName(); name.setNameName("Total_Cost"); @@ -306,7 +300,5 @@ public class LoanCalculator { name = wb.createName(); name.setNameName("Values_Entered"); name.setReference("IF(Loan_Amount*Interest_Rate*Loan_Years*Loan_Start>0,1,0)"); - - } } diff --git a/src/examples/src/org/apache/poi/xssf/usermodel/examples/TimesheetDemo.java b/src/examples/src/org/apache/poi/ss/examples/TimesheetDemo.java similarity index 65% rename from src/examples/src/org/apache/poi/xssf/usermodel/examples/TimesheetDemo.java rename to src/examples/src/org/apache/poi/ss/examples/TimesheetDemo.java index 9c28e33aff..aa036f6747 100755 --- a/src/examples/src/org/apache/poi/xssf/usermodel/examples/TimesheetDemo.java +++ b/src/examples/src/org/apache/poi/ss/examples/TimesheetDemo.java @@ -14,11 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ -package org.apache.poi.xssf.usermodel.examples; +package org.apache.poi.ss.examples; import org.apache.poi.xssf.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.usermodel.*; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.util.Map; import java.util.HashMap; @@ -26,6 +27,8 @@ import java.io.FileOutputStream; /** * A weekly timesheet created using Apache POI. + * Usage: + * TimesheetDemo -xls|xlsx * * @author Yegor Kozlov */ @@ -37,32 +40,35 @@ public class TimesheetDemo { private static Object[][] sample_data = { {"Yegor Kozlov", "YK", 5.0, 8.0, 10.0, 5.0, 5.0, 7.0, 6.0}, - {"Gisella Bronsetti", "GB", 4.0, 3.0, 1.0, 3.5, null, null, 4.0}, + {"Gisella Bronzetti", "GB", 4.0, 3.0, 1.0, 3.5, null, null, 4.0}, }; public static void main(String[] args) throws Exception { + Workbook wb; - XSSFWorkbook wb = new XSSFWorkbook(); - Map styles = createStyles(wb); + if(args.length > 0 && args[0].equals("-xls")) wb = new HSSFWorkbook(); + else wb = new XSSFWorkbook(); - XSSFSheet sheet = wb.createSheet("Timesheet"); - XSSFPrintSetup printSetup = sheet.getPrintSetup(); - printSetup.setOrientation(PrintOrientation.LANDSCAPE); + Map styles = createStyles(wb); + + Sheet sheet = wb.createSheet("Timesheet"); + PrintSetup printSetup = sheet.getPrintSetup(); + printSetup.setLandscape(true); sheet.setFitToPage(true); sheet.setHorizontallyCenter(true); //title row - XSSFRow titleRow = sheet.createRow(0); + Row titleRow = sheet.createRow(0); titleRow.setHeightInPoints(45); - XSSFCell titleCell = titleRow.createCell(0); + Cell titleCell = titleRow.createCell(0); titleCell.setCellValue("Weekly Timesheet"); titleCell.setCellStyle(styles.get("title")); sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$L$1")); //header row - XSSFRow headerRow = sheet.createRow(1); + Row headerRow = sheet.createRow(1); headerRow.setHeightInPoints(40); - XSSFCell headerCell; + Cell headerCell; for (int i = 0; i < titles.length; i++) { headerCell = headerRow.createCell(i); headerCell.setCellValue(titles[i]); @@ -71,9 +77,9 @@ public class TimesheetDemo { int rownum = 2; for (int i = 0; i < 10; i++) { - XSSFRow row = sheet.createRow(rownum++); + Row row = sheet.createRow(rownum++); for (int j = 0; j < titles.length; j++) { - XSSFCell cell = row.createCell(j); + Cell cell = row.createCell(j); if(j == 9){ //the 10th cell contains sum over week days, e.g. SUM(C3:I3) String ref = "C" +rownum+ ":I" + rownum; @@ -89,9 +95,9 @@ public class TimesheetDemo { } //row with totals below - XSSFRow sumRow = sheet.createRow(rownum++); + Row sumRow = sheet.createRow(rownum++); sumRow.setHeightInPoints(35); - XSSFCell cell; + Cell cell; cell = sumRow.createCell(0); cell.setCellStyle(styles.get("formula")); cell = sumRow.createCell(1); @@ -125,7 +131,7 @@ public class TimesheetDemo { //set sample data for (int i = 0; i < sample_data.length; i++) { - XSSFRow row = sheet.getRow(2 + i); + Row row = sheet.getRow(2 + i); for (int j = 0; j < sample_data[i].length; j++) { if(sample_data[i][j] == null) continue; @@ -137,70 +143,74 @@ public class TimesheetDemo { } } - //finally set column widths - sheet.setColumnWidth(0, 30*256); + //finally set column widths, the width is measured in units of 1/256th of a character width + sheet.setColumnWidth(0, 30*256); //30 characters wide for (int i = 2; i < 9; i++) { - sheet.setColumnWidth(i, 6*256); + sheet.setColumnWidth(i, 6*256); //6 characters wide } + sheet.setColumnWidth(10, 10*256); //10 characters wide // Write the output to a file - FileOutputStream out = new FileOutputStream("ooxml-timesheet.xlsx"); + String file = "timesheet.xls"; + if(wb instanceof XSSFWorkbook) file += "x"; + FileOutputStream out = new FileOutputStream(file); wb.write(out); out.close(); } - private static Map createStyles(XSSFWorkbook wb){ - Map styles = new HashMap(); - XSSFCellStyle style; - XSSFFont titleFont = wb.createFont(); + /** + * Create a library of cell styles + */ + private static Map createStyles(Workbook wb){ + Map styles = new HashMap(); + CellStyle style; + Font titleFont = wb.createFont(); titleFont.setFontHeightInPoints((short)18); - titleFont.setBold(true); + titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.CENTER); - style.setVerticalAlignment(VerticalAlignment.CENTER); - style.setFillForegroundColor(new XSSFColor(new java.awt.Color(234, 234, 234))); - style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); style.setFont(titleFont); styles.put("title", style); - XSSFFont monthFont = wb.createFont(); + Font monthFont = wb.createFont(); monthFont.setFontHeightInPoints((short)11); - monthFont.setColor(new XSSFColor(new java.awt.Color(255, 255, 255))); + monthFont.setColor(IndexedColors.WHITE.getIndex()); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.CENTER); - style.setVerticalAlignment(VerticalAlignment.CENTER); - style.setFillForegroundColor(new XSSFColor(new java.awt.Color(102, 102, 102))); - style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setFont(monthFont); style.setWrapText(true); styles.put("header", style); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.CENTER); + style.setAlignment(CellStyle.ALIGN_CENTER); style.setWrapText(true); - style.setBorderRight(BorderStyle.THIN); + style.setBorderRight(CellStyle.BORDER_THIN); style.setRightBorderColor(IndexedColors.BLACK.getIndex()); - style.setBorderLeft(BorderStyle.THIN); + style.setBorderLeft(CellStyle.BORDER_THIN); style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); - style.setBorderTop(BorderStyle.THIN); + style.setBorderTop(CellStyle.BORDER_THIN); style.setTopBorderColor(IndexedColors.BLACK.getIndex()); - style.setBorderBottom(BorderStyle.THIN); + style.setBorderBottom(CellStyle.BORDER_THIN); style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); styles.put("cell", style); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.CENTER); - style.setVerticalAlignment(VerticalAlignment.CENTER); - style.setFillForegroundColor(new XSSFColor(new java.awt.Color(234, 234, 234))); - style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setDataFormat(wb.createDataFormat().getFormat("0.00")); styles.put("formula", style); style = wb.createCellStyle(); - style.setAlignment(HorizontalAlignment.CENTER); - style.setVerticalAlignment(VerticalAlignment.CENTER); - style.setFillForegroundColor(new XSSFColor(new java.awt.Color(192, 192, 192))); - style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setAlignment(CellStyle.ALIGN_CENTER); + style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); + style.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex()); + style.setFillPattern(CellStyle.SOLID_FOREGROUND); style.setDataFormat(wb.createDataFormat().getFormat("0.00")); styles.put("formula_2", style); diff --git a/src/examples/src/org/apache/poi/xssf/usermodel/examples/CalendarDemo.java b/src/examples/src/org/apache/poi/xssf/usermodel/examples/CalendarDemo.java index 52dcaed517..ffdcf37351 100755 --- a/src/examples/src/org/apache/poi/xssf/usermodel/examples/CalendarDemo.java +++ b/src/examples/src/org/apache/poi/xssf/usermodel/examples/CalendarDemo.java @@ -27,6 +27,9 @@ import java.util.HashMap; /** * A monthly calendar created using Apache POI. Each month is on a separate sheet. + * This is a version of org.apache.poi.ss.examples.CalendarDemo that demonstrates + * some XSSF features not avaiable when using common HSSF-XSSF interfaces. + * *
  * Usage:
  * CalendarDemo 
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
index 82277661ae..ae50f43765 100644
--- a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
+++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java
@@ -509,8 +509,7 @@ public class HSSFCell implements Cell {
     }
 
     /**
-     * set a string value for the cell. Please note that if you are using
-     * full 16 bit unicode you should call setEncoding() first.
+     * Set a string value for the cell.
      *
      * @param value  value to set the cell to.  For formulas we'll set the formula
      * string, for String cells we'll set its value.  For other types we will
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
index 5733bbcf37..e6e9ac9b46 100644
--- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
+++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
@@ -1626,6 +1626,12 @@ public class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet
         sheet.groupColumnRange(fromColumn, toColumn, false);
     }
 
+    /**
+     * Tie a range of cell together so that they can be collapsed or expanded
+     *
+     * @param fromRow   start row (0-based)
+     * @param toRow     end row (0-based)
+     */
     public void groupRow(int fromRow, int toRow)
     {
         sheet.groupRowRange( fromRow, toRow, true );
diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Cell.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Cell.java
index 4e132dafbd..a315493781 100644
--- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Cell.java
+++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Cell.java
@@ -145,21 +145,33 @@ public interface Cell {
     void setCellValue(Calendar value);
 
     /**
-     * set a string value for the cell. Please note that if you are using
-     * full 16 bit unicode you should call setEncoding() first.
+     * Set a rich string value for the cell.
      *
      * @param value  value to set the cell to.  For formulas we'll set the formula
      * string, for String cells we'll set its value.  For other types we will
      * change the cell to a string cell and set its value.
      * If value is null then we will change the cell to a Blank cell.
      */
-
     void setCellValue(RichTextString value);
 
+    /**
+     * Set a string value for the cell.
+     *
+     * @param value  value to set the cell to.  For formulas we'll set the formula
+     * string, for String cells we'll set its value.  For other types we will
+     * change the cell to a string cell and set its value.
+     * If value is null then we will change the cell to a Blank cell.
+     */
     void setCellValue(String value);
 
+    /**
+     * Set a formula value for the cell.
+     */
     void setCellFormula(String formula);
 
+    /**
+     * Get the formula value of the cell.
+     */
     String getCellFormula();
 
     /**
diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java
index 12c6a6a0c1..bd500d56ae 100644
--- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java
+++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java
@@ -409,7 +409,6 @@ public interface Sheet extends Iterable {
      * Additionally shifts merged regions that are completely defined in these
      * rows (ie. merged 2 cells on a row to be shifted).
      * 

- * TODO Might want to add bounds checking here * @param startRow the row to start shifting * @param endRow the row to end shifting * @param n the number of rows to shift @@ -541,14 +540,6 @@ public interface Sheet extends Iterable { */ void removeColumnBreak(short column); - /** - * Creates the toplevel drawing patriarch. This will have the effect of - * removing any existing drawings on this sheet. - * - * @return The new patriarch. - */ - //Patriarch createDrawingPatriarch(); - /** * Expands or collapses a column group. * @@ -567,10 +558,28 @@ public interface Sheet extends Iterable { void ungroupColumn(short fromColumn, short toColumn); + /** + * Tie a range of rows together so that they can be collapsed or expanded + * + * @param fromRow start row (0-based) + * @param toRow end row (0-based) + */ void groupRow(int fromRow, int toRow); + /** + * Ungroup a range of rows that were previously groupped + * + * @param fromRow start row (0-based) + * @param toRow end row (0-based) + */ void ungroupRow(int fromRow, int toRow); + /** + * Set view state of a groupped range of rows + * + * @param row start row of a groupped range of rows (0-based) + * @param collapse whether to expand/collapse the detail rows + */ void setRowGroupCollapsed(int row, boolean collapse); /** @@ -599,6 +608,11 @@ public interface Sheet extends Iterable { */ Comment getCellComment(int row, int column); + /** + * Creates the top-level drawing patriarch. + * + * @return The new drawing patriarch. + */ Drawing createDrawingPatriarch(); } diff --git a/src/ooxml/java/org/apache/poi/xssf/dev/XSSFSave.java b/src/ooxml/java/org/apache/poi/xssf/dev/XSSFSave.java index 148a02fcb2..10a4b4755e 100755 --- a/src/ooxml/java/org/apache/poi/xssf/dev/XSSFSave.java +++ b/src/ooxml/java/org/apache/poi/xssf/dev/XSSFSave.java @@ -32,7 +32,7 @@ public class XSSFSave { XSSFWorkbook wb = new XSSFWorkbook(args[i]); int sep = args[i].lastIndexOf('.'); - String outfile = args[i].substring(0, sep) + "-save.xlsx"; + String outfile = args[i].substring(0, sep) + "-save.xls" + (wb.isMacroEnabled() ? "m" : "x"); FileOutputStream out = new FileOutputStream(outfile); wb.write(out); out.close(); diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index 24a3f252f0..7613c87cf1 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -952,20 +952,26 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { setSheetFormatPrOutlineLevelCol(); } + /** + * Tie a range of cell together so that they can be collapsed or expanded + * + * @param fromRow start row (0-based) + * @param toRow end row (0-based) + */ public void groupRow(int fromRow, int toRow) { - for(int i=fromRow;i<=toRow;i++){ - XSSFRow xrow = getRow(i-1); - if(xrow == null){//create a new Row - xrow = createRow(i-1); + for (int i = fromRow; i <= toRow; i++) { + XSSFRow xrow = getRow(i); + if (xrow == null) { + xrow = createRow(i); } - CTRow ctrow=xrow.getCTRow(); - short outlineLevel=ctrow.getOutlineLevel(); - ctrow.setOutlineLevel((short)(outlineLevel+1)); - } - setSheetFormatPrOutlineLevelRow(); + CTRow ctrow = xrow.getCTRow(); + short outlineLevel = ctrow.getOutlineLevel(); + ctrow.setOutlineLevel((short) (outlineLevel + 1)); + } + setSheetFormatPrOutlineLevelRow(); } - private short getMaxOutlineLevelRows(){ + private short getMaxOutlineLevelRows(){ short outlineLevel=0; for(Row r : rows.values()){ XSSFRow xrow=(XSSFRow)r; @@ -1478,9 +1484,15 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { setSheetFormatPrOutlineLevelCol(); } + /** + * Ungroup a range of rows that were previously groupped + * + * @param fromRow start row (0-based) + * @param toRow end row (0-based) + */ public void ungroupRow(int fromRow, int toRow) { for (int i = fromRow; i <= toRow; i++) { - XSSFRow xrow = getRow(i - 1); + XSSFRow xrow = getRow(i); if (xrow != null) { CTRow ctrow = xrow.getCTRow(); short outlinelevel = ctrow.getOutlineLevel(); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java index 62d2b7d989..dd0446c9dd 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java @@ -789,19 +789,19 @@ public class TestXSSFSheet extends TestCase { //one level sheet.groupRow(9,10); assertEquals(2,sheet.getPhysicalNumberOfRows()); - CTRow ctrow = sheet.getRow(8).getCTRow(); + CTRow ctrow = sheet.getRow(9).getCTRow(); assertNotNull(ctrow); - assertEquals(9,ctrow.getR()); + assertEquals(10,ctrow.getR()); assertEquals(1, ctrow.getOutlineLevel()); assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow()); //two level sheet.groupRow(10,13); assertEquals(5,sheet.getPhysicalNumberOfRows()); - ctrow = sheet.getRow(9).getCTRow(); + ctrow = sheet.getRow(10).getCTRow(); assertNotNull(ctrow); - assertEquals(10,ctrow.getR()); + assertEquals(11,ctrow.getR()); assertEquals(2, ctrow.getOutlineLevel()); assertEquals(2,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow()); diff --git a/src/examples/src/org/apache/poi/hslf/usermodel/examples/SoundFinder.java b/src/scratchpad/examples/src/org/apache/poi/hslf/examples/SoundFinder.java similarity index 98% rename from src/examples/src/org/apache/poi/hslf/usermodel/examples/SoundFinder.java rename to src/scratchpad/examples/src/org/apache/poi/hslf/examples/SoundFinder.java index 800a4952c8..b31019db94 100644 --- a/src/examples/src/org/apache/poi/hslf/usermodel/examples/SoundFinder.java +++ b/src/scratchpad/examples/src/org/apache/poi/hslf/examples/SoundFinder.java @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ -package org.apache.poi.hslf.usermodel.examples; +package org.apache.poi.hslf.examples; import org.apache.poi.ddf.*; import org.apache.poi.hslf.model.*; import org.apache.poi.hslf.record.InteractiveInfo; diff --git a/src/testcases/org/apache/poi/hpsf/basic/TestMetaDataIPI.java b/src/testcases/org/apache/poi/hpsf/basic/TestMetaDataIPI.java index fa7a093c0e..111561bcc1 100644 --- a/src/testcases/org/apache/poi/hpsf/basic/TestMetaDataIPI.java +++ b/src/testcases/org/apache/poi/hpsf/basic/TestMetaDataIPI.java @@ -286,7 +286,7 @@ public class TestMetaDataIPI extends TestCase{ /* Insert some custom properties into the container. */ customProperties.put("Key1", "Value1"); - customProperties.put("Schl�ssel2", "Wert2"); + customProperties.put("Schl\u00fcssel2", "Wert2"); customProperties.put("Sample Integer", new Integer(12345)); customProperties.put("Sample Boolean", new Boolean(true)); Date date=new Date(); @@ -325,8 +325,8 @@ public class TestMetaDataIPI extends TestCase{ /* Insert some custom properties into the container. */ String a1=(String) customProperties.get("Key1"); assertEquals("Key1","Value1",a1); - String a2=(String) customProperties.get("Schl�ssel2"); - assertEquals("Schl�ssel2","Wert2",a2); + String a2=(String) customProperties.get("Schl\u00fcssel2"); + assertEquals("Schl\u00fcssel2","Wert2",a2); Integer a3=(Integer) customProperties.get("Sample Integer"); assertEquals("Sample Number",new Integer(12345),a3); Boolean a4=(Boolean) customProperties.get("Sample Boolean"); @@ -431,7 +431,7 @@ public void testTwo(){ String a1=(String) customProperties.get(k1); assertEquals("Key1",p1,a1); String a2=(String) customProperties.get(k2); - assertEquals("Schl�ssel2",p2,a2); + assertEquals("Schl\u00fcssel2",p2,a2); Integer a3=(Integer) customProperties.get("Sample Number"); assertEquals("Sample Number",new Integer(12345),a3); Boolean a4=(Boolean) customProperties.get("Sample Boolean"); @@ -450,7 +450,7 @@ public void testTwo(){ */ public String strangize(String s){ StringBuffer sb=new StringBuffer(); - String[] umlaute= {"�","�","�","�","$","�","�","�","�","@","�","&"}; + String[] umlaute= {"\u00e4","\u00fc","\u00f6","\u00dc","$","\u00d6","\u00dc","\u00c9","\u00d6","@","\u00e7","&"}; char j=0; Random rand=new Random(); for (int i=0;i<5;i++){ @@ -544,7 +544,7 @@ public void testThree(){ String a1=(String) customProperties.get(k1); assertEquals("Key1",p1,a1); String a2=(String) customProperties.get(k2); - assertEquals("Schl�ssel2",p2,a2); + assertEquals("Schl\u00fcssel2",p2,a2); Integer a3=(Integer) customProperties.get("Sample Number"); assertEquals("Sample Number",new Integer(12345),a3); Boolean a4=(Boolean) customProperties.get("Sample Boolean"); @@ -577,7 +577,7 @@ public void testThree(){ public String strangizeU(String s){ StringBuffer sb=new StringBuffer(); - String[] umlaute= {"�","�","�","�","$","�","�","�","�","@","�","&"}; + String[] umlaute= {"\u00e4","\u00fc","\u00f6","\u00dc","$","\u00d6","\u00dc","\u00c9","\u00d6","@","\u00e7","&"}; char j=0; Random rand=new Random(); for (int i=0;i<5;i++){ @@ -592,7 +592,7 @@ public void testThree(){ sb.append(umlaute[rand.nextInt(umlaute.length)]); sb.append("<"); } - sb.append("���\uD840\uDC00"); + sb.append("\u00e4\u00f6\u00fc\uD840\uDC00"); return sb.toString(); } /** @@ -668,7 +668,7 @@ public void testThree(){ String a1=(String) customProperties.get(k1); assertEquals("Key1",p1,a1); String a2=(String) customProperties.get(k2); - assertEquals("Schl�ssel2",p2,a2); + assertEquals("Schl\u00fcssel2",p2,a2); Integer a3=(Integer) customProperties.get("Sample Number"); assertEquals("Sample Number",new Integer(12345),a3); Boolean a4=(Boolean) customProperties.get("Sample Boolean"); diff --git a/src/testcases/org/apache/poi/hpsf/basic/TestWriteWellKnown.java b/src/testcases/org/apache/poi/hpsf/basic/TestWriteWellKnown.java index 8d22157a98..375cc904ef 100644 --- a/src/testcases/org/apache/poi/hpsf/basic/TestWriteWellKnown.java +++ b/src/testcases/org/apache/poi/hpsf/basic/TestWriteWellKnown.java @@ -120,7 +120,6 @@ public class TestWriteWellKnown extends TestCase for (int i = 0; i < docs.length; i++) { final File doc = docs[i]; - System.out.println("Reading file " + doc); /* Read a test document doc into a POI filesystem. */ final POIFSFileSystem poifs = new POIFSFileSystem(new FileInputStream(doc)); @@ -351,10 +350,10 @@ public class TestWriteWellKnown extends TestCase CustomProperties customProperties = dsi.getCustomProperties(); if (customProperties == null) customProperties = new CustomProperties(); - customProperties.put("Schl\u00fcssel �", "Wert �"); - customProperties.put("Schl\u00fcssel ��", "Wert ��"); - customProperties.put("Schl\u00fcssel ���", "Wert ���"); - customProperties.put("Schl\u00fcssel ����", "Wert ����"); + customProperties.put("Schl\u00fcssel \u00e4", "Wert \u00e4"); + customProperties.put("Schl\u00fcssel \u00e4\u00f6", "Wert \u00e4\u00f6"); + customProperties.put("Schl\u00fcssel \u00e4\u00f6\u00fc", "Wert \u00e4\u00f6\u00fc"); + customProperties.put("Schl\u00fcssel \u00e4\u00f6\u00fc\u00d6", "Wert \u00e4\u00f6\u00fc\u00d6"); customProperties.put("positive_Integer", POSITIVE_INTEGER); customProperties.put("positive_Long", POSITIVE_LONG); customProperties.put("positive_Double", POSITIVE_DOUBLE); @@ -440,10 +439,10 @@ public class TestWriteWellKnown extends TestCase final CustomProperties cps = dsi.getCustomProperties(); assertEquals(customProperties, cps); assertNull(cps.get("No value available")); - assertEquals("Wert �", cps.get("Schl\u00fcssel �")); - assertEquals("Wert ��", cps.get("Schl\u00fcssel ��")); - assertEquals("Wert ���", cps.get("Schl\u00fcssel ���")); - assertEquals("Wert ����", cps.get("Schl\u00fcssel ����")); + assertEquals("Wert \u00e4", cps.get("Schl\u00fcssel \u00e4")); + assertEquals("Wert \u00e4\u00f6", cps.get("Schl\u00fcssel \u00e4\u00f6")); + assertEquals("Wert \u00e4\u00f6\u00fc", cps.get("Schl\u00fcssel \u00e4\u00f6\u00fc")); + assertEquals("Wert \u00e4\u00f6\u00fc\u00d6", cps.get("Schl\u00fcssel \u00e4\u00f6\u00fc\u00d6")); assertEquals(POSITIVE_INTEGER, cps.get("positive_Integer")); assertEquals(POSITIVE_LONG, cps.get("positive_Long")); assertEquals(POSITIVE_DOUBLE, cps.get("positive_Double")); @@ -665,7 +664,7 @@ public class TestWriteWellKnown extends TestCase */ public void testCustomerProperties() { - final String KEY = "Schl\u00fcssel �"; + final String KEY = "Schl\u00fcssel \u00e4"; final String VALUE_1 = "Wert 1"; final String VALUE_2 = "Wert 2"; @@ -705,7 +704,7 @@ public class TestWriteWellKnown extends TestCase { final int ID_1 = 2; final int ID_2 = 3; - final String NAME_1 = "Schl\u00fcssel �"; + final String NAME_1 = "Schl\u00fcssel \u00e4"; final String VALUE_1 = "Wert 1"; final Map dictionary = new HashMap(); -- 2.39.5