git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@713981 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_5_BETA4
@@ -37,11 +37,11 @@ | |||
<!-- Don't forget to update status.xml too! --> | |||
<release version="3.5-beta4" date="2008-??-??"> | |||
<action dev="POI-DEVELOPERS" type="fix">46174 - Fixed HSSFName to handle general formulas (not just area references)</header> | |||
<action dev="POI-DEVELOPERS" type="fix">46174 - Fixed HSSFName to handle general formulas (not just area references)</action> | |||
<action dev="POI-DEVELOPERS" type="add">46189 - added chart records: CHARTFRTINFO, STARTBLOCK, ENDBLOCK, STARTOBJECT, ENDOBJECT, and CATLAB</action> | |||
<action dev="POI-DEVELOPERS" type="fix">46199 - More tweaks to EmbeddedObjectRefSubRecord</header> | |||
<action dev="POI-DEVELOPERS" type="fix">46199 - More tweaks to EmbeddedObjectRefSubRecord</action> | |||
<action dev="POI-DEVELOPERS" type="add">Changes to formula evaluation allowing for reduced memory usage</action> | |||
<action dev="POI-DEVELOPERS" type="fix">45290 - Support odd files where the POIFS header block comes after the data blocks, and is on the data blocks list</header> | |||
<action dev="POI-DEVELOPERS" type="fix">45290 - Support odd files where the POIFS header block comes after the data blocks, and is on the data blocks list</action> | |||
<action dev="POI-DEVELOPERS" type="fix">46184 - More odd escaped date formats</action> | |||
<action dev="POI-DEVELOPERS" type="add">Include the sheet number in the output of XLS2CSVmra</action> | |||
<action dev="POI-DEVELOPERS" type="fix">46043 - correctly write out HPSF properties with HWPF</action> |
@@ -34,7 +34,8 @@ | |||
<menu-item label="HSSF to SS Converting" href="converting.html"/> | |||
<menu-item label="Formula Support" href="formula.html" /> | |||
<menu-item label="Formula Evaluation" href="eval.html" /> | |||
<menu-item label="Eval Dev Guide" href="eval-devguide.html" /> | |||
<menu-item label="Eval Dev Guide" href="eval-devguide.html" /> | |||
<menu-item label="Examples" href="examples.html"/> | |||
<menu-item label="Use Case" href="use-case.html"/> | |||
<menu-item label="Pictorial Docs" href="diagrams.html"/> | |||
<menu-item label="Limitations" href="limitations.html"/> |
@@ -0,0 +1,75 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!-- | |||
==================================================================== | |||
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. | |||
==================================================================== | |||
--> | |||
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "../dtd/document-v11.dtd"> | |||
<document> | |||
<header> | |||
<title>HSSF and XSSF Examples</title> | |||
<authors> | |||
<person id="YK" name="Yegor Kozlov" email="user@poi.apache.org"/> | |||
</authors> | |||
</header> | |||
<body> | |||
<section><title>HSSF and XSSF examples</title> | |||
<p>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: | |||
</p> | |||
<source> | |||
BusinessPlan -xls | |||
or | |||
BusinessPlan -xlsx | |||
</source> | |||
<p>All sample source is available in <link href="http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/ss/examples/">SVN</link></p> | |||
</section> | |||
<section><title>BusinessPlan</title> | |||
<p> The <link href="http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/ss/examples/BusinessPlan.java">BusinessPlan</link> | |||
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). | |||
</p> | |||
<p> | |||
<img src="../resources/images/businessplan.jpg" alt="business plan demo"/> | |||
</p> | |||
</section> | |||
<section><title>Calendar</title> | |||
<p> The <link href="http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/ss/examples/Calendar.java">Calendar</link> | |||
demo creates a multi sheet calendar. Each month is on a separate sheet. | |||
</p> | |||
<p> | |||
<img src="../resources/images/calendar.jpg" alt="calendar demo"/> | |||
</p> | |||
</section> | |||
<section><title>LoanCalculator</title> | |||
<p> The <link href="http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/ss/examples/LoanCalculator.java">LoanCalculator</link> | |||
demo creates a simple loan calculator. Demonstrates advance usage of cell formulas and named ranges. | |||
</p> | |||
<p> | |||
<img src="../resources/images/loancalc.jpg" alt="loan calculator demo"/> | |||
</p> | |||
</section> | |||
<section><title>TimesheetDemo</title> | |||
<p> The <link href="http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/ss/examples/TimesheetDemo.java">TimesheetDemo</link> | |||
demo creates a weekly timesheet with automatic calculation of total hours. Demonstrates advance usage of cell formulas. | |||
</p> | |||
<p> | |||
<img src="../resources/images/timesheet.jpg" alt="timesheet demo"/> | |||
</p> | |||
</section> | |||
</body> | |||
</document> |
@@ -34,11 +34,11 @@ | |||
<!-- Don't forget to update changes.xml too! --> | |||
<changes> | |||
<release version="3.5-beta4" date="2008-??-??"> | |||
<action dev="POI-DEVELOPERS" type="fix">46174 - Fixed HSSFName to handle general formulas (not just area references)</header> | |||
<action dev="POI-DEVELOPERS" type="fix">46174 - Fixed HSSFName to handle general formulas (not just area references)</action> | |||
<action dev="POI-DEVELOPERS" type="add">46189 - added chart records: CHARTFRTINFO, STARTBLOCK, ENDBLOCK, STARTOBJECT, ENDOBJECT, and CATLAB</action> | |||
<action dev="POI-DEVELOPERS" type="fix">46199 - More tweaks to EmbeddedObjectRefSubRecord</header> | |||
<action dev="POI-DEVELOPERS" type="fix">46199 - More tweaks to EmbeddedObjectRefSubRecord</action> | |||
<action dev="POI-DEVELOPERS" type="add">Changes to formula evaluation allowing for reduced memory usage</action> | |||
<action dev="POI-DEVELOPERS" type="fix">45290 - Support odd files where the POIFS header block comes after the data blocks, and is on the data blocks list</header> | |||
<action dev="POI-DEVELOPERS" type="fix">45290 - Support odd files where the POIFS header block comes after the data blocks, and is on the data blocks list</action> | |||
<action dev="POI-DEVELOPERS" type="fix">46184 - More odd escaped date formats</action> | |||
<action dev="POI-DEVELOPERS" type="add">Include the sheet number in the output of XLS2CSVmra</action> | |||
<action dev="POI-DEVELOPERS" type="fix">46043 - correctly write out HPSF properties with HWPF</action> |
@@ -14,20 +14,22 @@ | |||
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.hssf.usermodel.HSSFWorkbook; | |||
import java.util.Map; | |||
import java.util.HashMap; | |||
import java.util.Date; | |||
import java.util.Calendar; | |||
import java.io.FileOutputStream; | |||
import java.text.SimpleDateFormat; | |||
/** | |||
* A business plan demo | |||
* Usage: | |||
* BusinessPlan -xls|xlsx | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
@@ -35,85 +37,94 @@ public class BusinessPlan { | |||
private static SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM"); | |||
private static final String[] days = { | |||
private static final String[] titles = { | |||
"ID", "Project Name", "Owner", "Days", "Start", "End"}; | |||
//sample data to fill the sheet. | |||
private static final String[][] data = { | |||
{"1.0", "Marketing Research Tactical Plan", "R. Ihrig", "70", "9-Jul", null, | |||
{"1.0", "Marketing Research Tactical Plan", "J. Dow", "70", "9-Jul", null, | |||
"x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x"}, | |||
null, | |||
{"1.1", "Scope Definition Phase", "R. Ihrig", "10", "9-Jul", null, | |||
{"1.1", "Scope Definition Phase", "J. Dow", "10", "9-Jul", null, | |||
"x", "x", null, null, null, null, null, null, null, null, null}, | |||
{"1.1.1", "Define research objectives", "R. Ihrig", "3", "9-Jul", null, | |||
{"1.1.1", "Define research objectives", "J. Dow", "3", "9-Jul", null, | |||
"x", null, null, null, null, null, null, null, null, null, null}, | |||
{"1.1.2", "Define research requirements", "S. Abbas", "7", "10-Jul", null, | |||
{"1.1.2", "Define research requirements", "S. Jones", "7", "10-Jul", null, | |||
"x", "x", null, null, null, null, null, null, null, null, null}, | |||
{"1.1.3", "Determine in-house resource or hire vendor", "R. Ihrig", "2", "15-Jul", null, | |||
{"1.1.3", "Determine in-house resource or hire vendor", "J. Dow", "2", "15-Jul", null, | |||
"x", "x", null, null, null, null, null, null, null, null, null}, | |||
null, | |||
{"1.2", "Vendor Selection Phase", "R. Ihrig", "19", "19-Jul", null, | |||
{"1.2", "Vendor Selection Phase", "J. Dow", "19", "19-Jul", null, | |||
null, "x", "x", "x", "x", null, null, null, null, null, null}, | |||
{"1.2.1", "Define vendor selection criteria", "R. Ihrig", "3", "19-Jul", null, | |||
{"1.2.1", "Define vendor selection criteria", "J. Dow", "3", "19-Jul", null, | |||
null, "x", null, null, null, null, null, null, null, null, null}, | |||
{"1.2.2", "Develop vendor selection questionnaire", "S. Abbas, T. Wang", "2", "22-Jul", null, | |||
{"1.2.2", "Develop vendor selection questionnaire", "S. Jones, T. Wates", "2", "22-Jul", null, | |||
null, "x", "x", null, null, null, null, null, null, null, null}, | |||
{"1.2.3", "Develop Statement of Work", "S. Abbas", "4", "26-Jul", null, | |||
{"1.2.3", "Develop Statement of Work", "S. Jones", "4", "26-Jul", null, | |||
null, null, "x", "x", null, null, null, null, null, null, null}, | |||
{"1.2.4", "Evaluate proposal", "R. Ihrig, S. Abbas", "4", "2-Aug", null, | |||
{"1.2.4", "Evaluate proposal", "J. Dow, S. Jones", "4", "2-Aug", null, | |||
null, null, null, "x", "x", null, null, null, null, null, null}, | |||
{"1.2.5", "Select vendor", "R. Ihrig", "1", "6-Aug", null, | |||
{"1.2.5", "Select vendor", "J. Dow", "1", "6-Aug", null, | |||
null, null, null, null, "x", null, null, null, null, null, null}, | |||
null, | |||
{"1.3", "Research Phase", "Y. Li", "47", "9-Aug", null, | |||
{"1.3", "Research Phase", "G. Lee", "47", "9-Aug", null, | |||
null, null, null, null, "x", "x", "x", "x", "x", "x", "x"}, | |||
{"1.3.1", "Develop market research information needs questionnaire", "Y. Li", "2", "9-Aug", null, | |||
{"1.3.1", "Develop market research information needs questionnaire", "G. Lee", "2", "9-Aug", null, | |||
null, null, null, null, "x", null, null, null, null, null, null}, | |||
{"1.3.2", "Interview marketing group for market research needs", "Y. Li", "2", "11-Aug", null, | |||
{"1.3.2", "Interview marketing group for market research needs", "G. Lee", "2", "11-Aug", null, | |||
null, null, null, null, "x", "x", null, null, null, null, null}, | |||
{"1.3.3", "Document information needs", "Y. Li, S. Abbas", "1", "13-Aug", null, | |||
{"1.3.3", "Document information needs", "G. Lee, S. Jones", "1", "13-Aug", null, | |||
null, null, null, null, null, "x", null, null, null, null, null}, | |||
}; | |||
public static void main(String[] args) throws Exception { | |||
Calendar calendar = Calendar.getInstance(); | |||
int year = calendar.get(Calendar.YEAR); | |||
Workbook wb; | |||
if(args.length > 0 && args[0].equals("-xls")) wb = new HSSFWorkbook(); | |||
else wb = new XSSFWorkbook(); | |||
XSSFWorkbook wb = new XSSFWorkbook(); | |||
Map<String, XSSFCellStyle> styles = createStyles(wb); | |||
Map<String, CellStyle> 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<String, XSSFCellStyle> createStyles(XSSFWorkbook wb){ | |||
Map<String, XSSFCellStyle> styles = new HashMap<String, XSSFCellStyle>(); | |||
XSSFDataFormat df = wb.createDataFormat(); | |||
private static Map<String, CellStyle> createStyles(Workbook wb){ | |||
Map<String, CellStyle> styles = new HashMap<String, CellStyle>(); | |||
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; | |||
} |
@@ -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. | |||
* <pre> | |||
* Usage: | |||
* CalendarDemo -xls|xlsx <year> | |||
* </pre> | |||
* | |||
* @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<String, CellStyle> 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<String, CellStyle> createStyles(Workbook wb){ | |||
Map<String, CellStyle> styles = new HashMap<String, CellStyle>(); | |||
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; | |||
} | |||
} |
@@ -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<String, XSSFCellStyle> 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<String, CellStyle> 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<String, XSSFCellStyle> createStyles(XSSFWorkbook wb){ | |||
Map<String, XSSFCellStyle> styles = new HashMap<String, XSSFCellStyle>(); | |||
private static Map<String, CellStyle> createStyles(Workbook wb){ | |||
Map<String, CellStyle> styles = new HashMap<String, CellStyle>(); | |||
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)"); | |||
} | |||
} |
@@ -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<String, XSSFCellStyle> 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<String, CellStyle> 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<String, XSSFCellStyle> createStyles(XSSFWorkbook wb){ | |||
Map<String, XSSFCellStyle> styles = new HashMap<String, XSSFCellStyle>(); | |||
XSSFCellStyle style; | |||
XSSFFont titleFont = wb.createFont(); | |||
/** | |||
* Create a library of cell styles | |||
*/ | |||
private static Map<String, CellStyle> createStyles(Workbook wb){ | |||
Map<String, CellStyle> styles = new HashMap<String, CellStyle>(); | |||
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); | |||
@@ -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. | |||
* | |||
* <pre> | |||
* Usage: | |||
* CalendarDemo <year> |
@@ -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 <code>setEncoding()</code> 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 |
@@ -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 ); |
@@ -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 <code>setEncoding()</code> 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(); | |||
/** |
@@ -409,7 +409,6 @@ public interface Sheet extends Iterable<Row> { | |||
* Additionally shifts merged regions that are completely defined in these | |||
* rows (ie. merged 2 cells on a row to be shifted). | |||
* <p> | |||
* 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<Row> { | |||
*/ | |||
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<Row> { | |||
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<Row> { | |||
*/ | |||
Comment getCellComment(int row, int column); | |||
/** | |||
* Creates the top-level drawing patriarch. | |||
* | |||
* @return The new drawing patriarch. | |||
*/ | |||
Drawing createDrawingPatriarch(); | |||
} |
@@ -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(); |
@@ -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(); |
@@ -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()); | |||
@@ -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; |
@@ -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"); |
@@ -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 <em>doc</em> 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(); | |||