aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYegor Kozlov <yegor@apache.org>2008-11-14 11:56:41 +0000
committerYegor Kozlov <yegor@apache.org>2008-11-14 11:56:41 +0000
commitc67c1d5ca0545d59ca3b8515bd78e7f02328c118 (patch)
tree3dcff450c33781788555bd27ae62dee84b902670
parentdfa42cbf38a6e7adf0e98cc6e76f6126c9fc4617 (diff)
downloadpoi-c67c1d5ca0545d59ca3b8515bd78e7f02328c118.tar.gz
poi-c67c1d5ca0545d59ca3b8515bd78e7f02328c118.zip
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
-rw-r--r--src/documentation/content/xdocs/changes.xml6
-rw-r--r--src/documentation/content/xdocs/spreadsheet/book.xml3
-rwxr-xr-xsrc/documentation/content/xdocs/spreadsheet/examples.xml75
-rw-r--r--src/documentation/content/xdocs/status.xml6
-rwxr-xr-xsrc/documentation/resources/images/businessplan.jpgbin0 -> 63125 bytes
-rwxr-xr-xsrc/documentation/resources/images/calendar.jpgbin0 -> 38647 bytes
-rwxr-xr-xsrc/documentation/resources/images/loancalc.jpgbin0 -> 26555 bytes
-rwxr-xr-xsrc/documentation/resources/images/timesheet.jpgbin0 -> 47311 bytes
-rwxr-xr-xsrc/examples/src/org/apache/poi/ss/examples/BusinessPlan.java (renamed from src/examples/src/org/apache/poi/xssf/usermodel/examples/BusinessPlan.java)174
-rwxr-xr-xsrc/examples/src/org/apache/poi/ss/examples/CalendarDemo.java242
-rwxr-xr-xsrc/examples/src/org/apache/poi/ss/examples/LoanCalculator.java (renamed from src/examples/src/org/apache/poi/xssf/usermodel/examples/LoanCalculator.java)142
-rwxr-xr-xsrc/examples/src/org/apache/poi/ss/examples/TimesheetDemo.java (renamed from src/examples/src/org/apache/poi/xssf/usermodel/examples/TimesheetDemo.java)106
-rwxr-xr-xsrc/examples/src/org/apache/poi/xssf/usermodel/examples/CalendarDemo.java3
-rw-r--r--src/java/org/apache/poi/hssf/usermodel/HSSFCell.java3
-rw-r--r--src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java6
-rw-r--r--src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Cell.java18
-rw-r--r--src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java32
-rwxr-xr-xsrc/ooxml/java/org/apache/poi/xssf/dev/XSSFSave.java2
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java34
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java8
-rw-r--r--src/scratchpad/examples/src/org/apache/poi/hslf/examples/SoundFinder.java (renamed from src/examples/src/org/apache/poi/hslf/usermodel/examples/SoundFinder.java)2
-rw-r--r--src/testcases/org/apache/poi/hpsf/basic/TestMetaDataIPI.java18
-rw-r--r--src/testcases/org/apache/poi/hpsf/basic/TestWriteWellKnown.java21
23 files changed, 640 insertions, 261 deletions
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 @@
<!-- 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>
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 @@
<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"/>
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 @@
+<?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>
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 @@
<!-- 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>
diff --git a/src/documentation/resources/images/businessplan.jpg b/src/documentation/resources/images/businessplan.jpg
new file mode 100755
index 0000000000..9bfaf4c7b2
--- /dev/null
+++ b/src/documentation/resources/images/businessplan.jpg
Binary files differ
diff --git a/src/documentation/resources/images/calendar.jpg b/src/documentation/resources/images/calendar.jpg
new file mode 100755
index 0000000000..4f11878290
--- /dev/null
+++ b/src/documentation/resources/images/calendar.jpg
Binary files differ
diff --git a/src/documentation/resources/images/loancalc.jpg b/src/documentation/resources/images/loancalc.jpg
new file mode 100755
index 0000000000..fdc62e82dd
--- /dev/null
+++ b/src/documentation/resources/images/loancalc.jpg
Binary files differ
diff --git a/src/documentation/resources/images/timesheet.jpg b/src/documentation/resources/images/timesheet.jpg
new file mode 100755
index 0000000000..1ff512b1f9
--- /dev/null
+++ b/src/documentation/resources/images/timesheet.jpg
Binary files differ
diff --git a/src/examples/src/org/apache/poi/xssf/usermodel/examples/BusinessPlan.java b/src/examples/src/org/apache/poi/ss/examples/BusinessPlan.java
index b562417ac6..8d3fcf8224 100755
--- a/src/examples/src/org/apache/poi/xssf/usermodel/examples/BusinessPlan.java
+++ b/src/examples/src/org/apache/poi/ss/examples/BusinessPlan.java
@@ -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;
}
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.
+ * <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;
+ }
+}
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
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<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");
@@ -268,10 +274,6 @@ public class LoanCalculator {
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");
@@ -280,20 +282,12 @@ public class LoanCalculator {
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
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<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);
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.
+ *
* <pre>
* Usage:
* CalendarDemo <year>
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 <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
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 <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();
/**
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<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
@@ -542,14 +541,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.
*
* @param columnNumber One of the columns in the 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();
}
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
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 <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();
tion> Nextcloud server, a safe home for all your data: https://github.com/nextcloud/serverwww-data
summaryrefslogtreecommitdiffstats
path: root/build/htaccess-checker.php
blob: b6932d6543ac3b8f51268ea20c86656955d17922 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
/**
 * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
 *
 * @author Lukas Reschke <lukas@statuscode.ch>
 *
 * @license GNU AGPL version 3 or any later version
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

/**
 * Script to check that the main .htaccess file doesn't include some automated
 * changes done by Nextcloud.
 */

$htaccess = file_get_contents(__DIR__ . '/../.htaccess');
if(strpos($htaccess, 'DO NOT CHANGE ANYTHING') !== false) {
	echo(".htaccess file has invalid changes!\n");
	exit(1);
} else {
	exit(0);
}