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
This commit is contained in:
parent
e703a254ed
commit
acc1ba4585
@ -37,11 +37,11 @@
|
|||||||
|
|
||||||
<!-- Don't forget to update status.xml too! -->
|
<!-- Don't forget to update status.xml too! -->
|
||||||
<release version="3.5-beta4" date="2008-??-??">
|
<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="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="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="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="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>
|
<action dev="POI-DEVELOPERS" type="fix">46043 - correctly write out HPSF properties with HWPF</action>
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
<menu-item label="Formula Support" href="formula.html" />
|
<menu-item label="Formula Support" href="formula.html" />
|
||||||
<menu-item label="Formula Evaluation" href="eval.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="Use Case" href="use-case.html"/>
|
||||||
<menu-item label="Pictorial Docs" href="diagrams.html"/>
|
<menu-item label="Pictorial Docs" href="diagrams.html"/>
|
||||||
<menu-item label="Limitations" href="limitations.html"/>
|
<menu-item label="Limitations" href="limitations.html"/>
|
||||||
|
75
src/documentation/content/xdocs/spreadsheet/examples.xml
Executable file
75
src/documentation/content/xdocs/spreadsheet/examples.xml
Executable file
@ -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! -->
|
<!-- Don't forget to update changes.xml too! -->
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.5-beta4" date="2008-??-??">
|
<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="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="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="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="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>
|
<action dev="POI-DEVELOPERS" type="fix">46043 - correctly write out HPSF properties with HWPF</action>
|
||||||
|
BIN
src/documentation/resources/images/businessplan.jpg
Executable file
BIN
src/documentation/resources/images/businessplan.jpg
Executable file
Binary file not shown.
After Width: | Height: | Size: 62 KiB |
BIN
src/documentation/resources/images/calendar.jpg
Executable file
BIN
src/documentation/resources/images/calendar.jpg
Executable file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
BIN
src/documentation/resources/images/loancalc.jpg
Executable file
BIN
src/documentation/resources/images/loancalc.jpg
Executable file
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
BIN
src/documentation/resources/images/timesheet.jpg
Executable file
BIN
src/documentation/resources/images/timesheet.jpg
Executable file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
@ -14,20 +14,22 @@
|
|||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
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.xssf.usermodel.*;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A business plan demo
|
* A business plan demo
|
||||||
|
* Usage:
|
||||||
|
* BusinessPlan -xls|xlsx
|
||||||
*
|
*
|
||||||
* @author Yegor Kozlov
|
* @author Yegor Kozlov
|
||||||
*/
|
*/
|
||||||
@ -35,85 +37,94 @@ public class BusinessPlan {
|
|||||||
|
|
||||||
private static SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM");
|
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"};
|
"ID", "Project Name", "Owner", "Days", "Start", "End"};
|
||||||
|
|
||||||
//sample data to fill the sheet.
|
//sample data to fill the sheet.
|
||||||
private static final String[][] data = {
|
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"},
|
"x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x"},
|
||||||
null,
|
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},
|
"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},
|
"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},
|
"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},
|
"x", "x", null, 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},
|
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},
|
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},
|
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},
|
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},
|
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, null, null, null, "x", null, 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"},
|
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},
|
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},
|
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},
|
null, null, null, null, null, "x", null, null, null, null, null},
|
||||||
};
|
};
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
Calendar calendar = Calendar.getInstance();
|
Workbook wb;
|
||||||
int year = calendar.get(Calendar.YEAR);
|
|
||||||
|
|
||||||
XSSFWorkbook wb = new XSSFWorkbook();
|
if(args.length > 0 && args[0].equals("-xls")) wb = new HSSFWorkbook();
|
||||||
Map<String, XSSFCellStyle> styles = createStyles(wb);
|
else wb = new XSSFWorkbook();
|
||||||
|
|
||||||
XSSFSheet sheet = wb.createSheet("Plan");
|
Map<String, CellStyle> styles = createStyles(wb);
|
||||||
|
|
||||||
|
Sheet sheet = wb.createSheet("Business Plan");
|
||||||
|
|
||||||
//turn off gridlines
|
//turn off gridlines
|
||||||
sheet.setDisplayGridlines(false);
|
sheet.setDisplayGridlines(false);
|
||||||
sheet.setPrintGridlines(false);
|
sheet.setPrintGridlines(false);
|
||||||
XSSFPrintSetup printSetup = sheet.getPrintSetup();
|
|
||||||
printSetup.setOrientation(PrintOrientation.LANDSCAPE);
|
|
||||||
sheet.setFitToPage(true);
|
sheet.setFitToPage(true);
|
||||||
sheet.setHorizontallyCenter(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
|
//the header row: centered text in 48pt font
|
||||||
XSSFRow headerRow = sheet.createRow(0);
|
Row headerRow = sheet.createRow(0);
|
||||||
headerRow.setHeightInPoints(12.75f);
|
headerRow.setHeightInPoints(12.75f);
|
||||||
for (int i = 0; i < days.length; i++) {
|
for (int i = 0; i < titles.length; i++) {
|
||||||
XSSFCell cell = headerRow.createCell(i);
|
Cell cell = headerRow.createCell(i);
|
||||||
cell.setCellValue(days[i]);
|
cell.setCellValue(titles[i]);
|
||||||
cell.setCellStyle(styles.get("header"));
|
cell.setCellStyle(styles.get("header"));
|
||||||
}
|
}
|
||||||
//columns for 11 weeks starting from 9-Jul
|
//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.setTime(fmt.parse("9-Jul"));
|
||||||
calendar.set(Calendar.YEAR, year);
|
calendar.set(Calendar.YEAR, year);
|
||||||
for (int i = 0; i < 11; i++) {
|
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.setCellValue(calendar);
|
||||||
cell.setCellStyle(styles.get("header_date"));
|
cell.setCellStyle(styles.get("header_date"));
|
||||||
calendar.roll(Calendar.WEEK_OF_YEAR, true);
|
calendar.roll(Calendar.WEEK_OF_YEAR, true);
|
||||||
}
|
}
|
||||||
|
//freeze the first row
|
||||||
sheet.createFreezePane(0, 1);
|
sheet.createFreezePane(0, 1);
|
||||||
XSSFRow row;
|
|
||||||
XSSFCell cell;
|
|
||||||
|
|
||||||
|
Row row;
|
||||||
|
Cell cell;
|
||||||
int rownum = 1;
|
int rownum = 1;
|
||||||
for (int i = 0; i < data.length; i++, rownum++) {
|
for (int i = 0; i < data.length; i++, rownum++) {
|
||||||
row = sheet.createRow(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);
|
//set column widths, the width is measured in units of 1/256th of a character width
|
||||||
sheet.groupRow(10, 14);
|
|
||||||
sheet.groupRow(17, 19);
|
|
||||||
|
|
||||||
sheet.setColumnWidth(0, 256*6);
|
sheet.setColumnWidth(0, 256*6);
|
||||||
sheet.setColumnWidth(1, 256*33);
|
sheet.setColumnWidth(1, 256*33);
|
||||||
sheet.setColumnWidth(2, 256*20);
|
sheet.setColumnWidth(2, 256*20);
|
||||||
sheet.setZoom(75);
|
sheet.setZoom(3, 4);
|
||||||
|
|
||||||
|
|
||||||
// Write the output to a file
|
// 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);
|
wb.write(out);
|
||||||
out.close();
|
out.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cell styles used for formatting calendar sheets
|
* create a library of cell styles
|
||||||
*/
|
*/
|
||||||
private static Map<String, XSSFCellStyle> createStyles(XSSFWorkbook wb){
|
private static Map<String, CellStyle> createStyles(Workbook wb){
|
||||||
Map<String, XSSFCellStyle> styles = new HashMap<String, XSSFCellStyle>();
|
Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
|
||||||
XSSFDataFormat df = wb.createDataFormat();
|
DataFormat df = wb.createDataFormat();
|
||||||
|
|
||||||
XSSFCellStyle style;
|
CellStyle style;
|
||||||
XSSFFont headerFont = wb.createFont();
|
Font headerFont = wb.createFont();
|
||||||
headerFont.setBold(true);
|
headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.CENTER);
|
style.setAlignment(CellStyle.ALIGN_CENTER);
|
||||||
style.setFillForegroundColor(new XSSFColor(new java.awt.Color(204, 204, 255)));
|
style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex());
|
||||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
|
||||||
style.setFont(headerFont);
|
style.setFont(headerFont);
|
||||||
styles.put("header", style);
|
styles.put("header", style);
|
||||||
|
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.CENTER);
|
style.setAlignment(CellStyle.ALIGN_CENTER);
|
||||||
style.setFillForegroundColor(new XSSFColor(new java.awt.Color(204, 204, 255)));
|
style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex());
|
||||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
|
||||||
style.setFont(headerFont);
|
style.setFont(headerFont);
|
||||||
style.setDataFormat(df.getFormat("d-mmm"));
|
style.setDataFormat(df.getFormat("d-mmm"));
|
||||||
styles.put("header_date", style);
|
styles.put("header_date", style);
|
||||||
|
|
||||||
XSSFFont font1 = wb.createFont();
|
Font font1 = wb.createFont();
|
||||||
font1.setBold(true);
|
font1.setBoldweight(Font.BOLDWEIGHT_BOLD);
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.LEFT);
|
style.setAlignment(CellStyle.ALIGN_LEFT);
|
||||||
style.setFont(font1);
|
style.setFont(font1);
|
||||||
styles.put("cell_b", style);
|
styles.put("cell_b", style);
|
||||||
|
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.CENTER);
|
style.setAlignment(CellStyle.ALIGN_CENTER);
|
||||||
style.setFont(font1);
|
style.setFont(font1);
|
||||||
styles.put("cell_b_centered", style);
|
styles.put("cell_b_centered", style);
|
||||||
|
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.RIGHT);
|
style.setAlignment(CellStyle.ALIGN_RIGHT);
|
||||||
style.setFont(font1);
|
style.setFont(font1);
|
||||||
style.setDataFormat(df.getFormat("d-mmm"));
|
style.setDataFormat(df.getFormat("d-mmm"));
|
||||||
styles.put("cell_b_date", style);
|
styles.put("cell_b_date", style);
|
||||||
|
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.RIGHT);
|
style.setAlignment(CellStyle.ALIGN_RIGHT);
|
||||||
style.setFont(font1);
|
style.setFont(font1);
|
||||||
style.setFillForegroundColor(new XSSFColor(new java.awt.Color(228, 228, 228)));
|
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
|
||||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
|
||||||
style.setDataFormat(df.getFormat("d-mmm"));
|
style.setDataFormat(df.getFormat("d-mmm"));
|
||||||
styles.put("cell_g", style);
|
styles.put("cell_g", style);
|
||||||
|
|
||||||
XSSFFont font2 = wb.createFont();
|
Font font2 = wb.createFont();
|
||||||
font2.setColor(IndexedColors.BLUE.getIndex());
|
font2.setColor(IndexedColors.BLUE.getIndex());
|
||||||
font2.setBold(true);
|
font2.setBoldweight(Font.BOLDWEIGHT_BOLD);
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.LEFT);
|
style.setAlignment(CellStyle.ALIGN_LEFT);
|
||||||
style.setFont(font2);
|
style.setFont(font2);
|
||||||
styles.put("cell_bb", style);
|
styles.put("cell_bb", style);
|
||||||
|
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.RIGHT);
|
style.setAlignment(CellStyle.ALIGN_RIGHT);
|
||||||
style.setFont(font1);
|
style.setFont(font1);
|
||||||
style.setFillForegroundColor(new XSSFColor(new java.awt.Color(228, 228, 228)));
|
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
|
||||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
|
||||||
style.setDataFormat(df.getFormat("d-mmm"));
|
style.setDataFormat(df.getFormat("d-mmm"));
|
||||||
styles.put("cell_bg", style);
|
styles.put("cell_bg", style);
|
||||||
|
|
||||||
XSSFFont font3 = wb.createFont();
|
Font font3 = wb.createFont();
|
||||||
font3.setFontHeightInPoints((short)14);
|
font3.setFontHeightInPoints((short)14);
|
||||||
font3.setColor(IndexedColors.DARK_BLUE.getIndex());
|
font3.setColor(IndexedColors.DARK_BLUE.getIndex());
|
||||||
font3.setBold(true);
|
font3.setBoldweight(Font.BOLDWEIGHT_BOLD);
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.LEFT);
|
style.setAlignment(CellStyle.ALIGN_LEFT);
|
||||||
style.setFont(font3);
|
style.setFont(font3);
|
||||||
style.setWrapText(true);
|
style.setWrapText(true);
|
||||||
styles.put("cell_h", style);
|
styles.put("cell_h", style);
|
||||||
|
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.LEFT);
|
style.setAlignment(CellStyle.ALIGN_LEFT);
|
||||||
style.setWrapText(true);
|
style.setWrapText(true);
|
||||||
styles.put("cell_normal", style);
|
styles.put("cell_normal", style);
|
||||||
|
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.CENTER);
|
style.setAlignment(CellStyle.ALIGN_CENTER);
|
||||||
style.setWrapText(true);
|
style.setWrapText(true);
|
||||||
styles.put("cell_normal_centered", style);
|
styles.put("cell_normal_centered", style);
|
||||||
|
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.RIGHT);
|
style.setAlignment(CellStyle.ALIGN_RIGHT);
|
||||||
style.setWrapText(true);
|
style.setWrapText(true);
|
||||||
style.setDataFormat(df.getFormat("d-mmm"));
|
style.setDataFormat(df.getFormat("d-mmm"));
|
||||||
styles.put("cell_normal_date", style);
|
styles.put("cell_normal_date", style);
|
||||||
|
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setAlignment(HorizontalAlignment.LEFT);
|
style.setAlignment(CellStyle.ALIGN_LEFT);
|
||||||
style.setIndention((short)1);
|
style.setIndention((short)1);
|
||||||
style.setWrapText(true);
|
style.setWrapText(true);
|
||||||
styles.put("cell_indented", style);
|
styles.put("cell_indented", style);
|
||||||
|
|
||||||
style = createBorderedStyle(wb);
|
style = createBorderedStyle(wb);
|
||||||
style.setFillForegroundColor(IndexedColors.BLUE.getIndex());
|
style.setFillForegroundColor(IndexedColors.BLUE.getIndex());
|
||||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
|
||||||
styles.put("cell_blue", style);
|
styles.put("cell_blue", style);
|
||||||
|
|
||||||
return styles;
|
return styles;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static XSSFCellStyle createBorderedStyle(XSSFWorkbook wb){
|
private static CellStyle createBorderedStyle(Workbook wb){
|
||||||
XSSFCellStyle style = wb.createCellStyle();
|
CellStyle style = wb.createCellStyle();
|
||||||
style.setBorderRight(BorderStyle.THIN);
|
style.setBorderRight(CellStyle.BORDER_THIN);
|
||||||
style.setRightBorderColor(IndexedColors.BLACK.getIndex());
|
style.setRightBorderColor(IndexedColors.BLACK.getIndex());
|
||||||
style.setBorderBottom(BorderStyle.THIN);
|
style.setBorderBottom(CellStyle.BORDER_THIN);
|
||||||
style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
|
style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
|
||||||
style.setBorderLeft(BorderStyle.THIN);
|
style.setBorderLeft(CellStyle.BORDER_THIN);
|
||||||
style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
|
style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
|
||||||
style.setBorderTop(BorderStyle.THIN);
|
style.setBorderTop(CellStyle.BORDER_THIN);
|
||||||
style.setTopBorderColor(IndexedColors.BLACK.getIndex());
|
style.setTopBorderColor(IndexedColors.BLACK.getIndex());
|
||||||
return style;
|
return style;
|
||||||
}
|
}
|
242
src/examples/src/org/apache/poi/ss/examples/CalendarDemo.java
Executable file
242
src/examples/src/org/apache/poi/ss/examples/CalendarDemo.java
Executable file
@ -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
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
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.xssf.usermodel.*;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.apache.poi.ss.util.CellRangeAddress;
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.io.FileOutputStream;
|
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
|
* @author Yegor Kozlov
|
||||||
*/
|
*/
|
||||||
public class LoanCalculator {
|
public class LoanCalculator {
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
XSSFWorkbook wb = new XSSFWorkbook();
|
Workbook wb;
|
||||||
Map<String, XSSFCellStyle> styles = createStyles(wb);
|
|
||||||
XSSFSheet sheet = wb.createSheet("Loan Calculator");
|
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.setPrintGridlines(false);
|
||||||
sheet.setDisplayGridlines(false);
|
sheet.setDisplayGridlines(false);
|
||||||
|
|
||||||
XSSFPrintSetup printSetup = sheet.getPrintSetup();
|
PrintSetup printSetup = sheet.getPrintSetup();
|
||||||
printSetup.setOrientation(PrintOrientation.LANDSCAPE);
|
printSetup.setLandscape(true);
|
||||||
sheet.setFitToPage(true);
|
sheet.setFitToPage(true);
|
||||||
sheet.setHorizontallyCenter(true);
|
sheet.setHorizontallyCenter(true);
|
||||||
|
|
||||||
@ -53,17 +61,17 @@ public class LoanCalculator {
|
|||||||
|
|
||||||
createNames(wb);
|
createNames(wb);
|
||||||
|
|
||||||
XSSFRow titleRow = sheet.createRow(0);
|
Row titleRow = sheet.createRow(0);
|
||||||
titleRow.setHeightInPoints(35);
|
titleRow.setHeightInPoints(35);
|
||||||
for (int i = 1; i <= 7; i++) {
|
for (int i = 1; i <= 7; i++) {
|
||||||
titleRow.createCell(i).setCellStyle(styles.get("title"));
|
titleRow.createCell(i).setCellStyle(styles.get("title"));
|
||||||
}
|
}
|
||||||
XSSFCell titleCell = titleRow.getCell(2);
|
Cell titleCell = titleRow.getCell(2);
|
||||||
titleCell.setCellValue("Simple Loan Calculator");
|
titleCell.setCellValue("Simple Loan Calculator");
|
||||||
sheet.addMergedRegion(CellRangeAddress.valueOf("$C$1:$H$1"));
|
sheet.addMergedRegion(CellRangeAddress.valueOf("$C$1:$H$1"));
|
||||||
|
|
||||||
XSSFRow row = sheet.createRow(2);
|
Row row = sheet.createRow(2);
|
||||||
XSSFCell cell = row.createCell(4);
|
Cell cell = row.createCell(4);
|
||||||
cell.setCellValue("Enter values");
|
cell.setCellValue("Enter values");
|
||||||
cell.setCellStyle(styles.get("item_right"));
|
cell.setCellStyle(styles.get("item_right"));
|
||||||
|
|
||||||
@ -73,6 +81,7 @@ public class LoanCalculator {
|
|||||||
cell.setCellStyle(styles.get("item_left"));
|
cell.setCellStyle(styles.get("item_left"));
|
||||||
cell = row.createCell(4);
|
cell = row.createCell(4);
|
||||||
cell.setCellStyle(styles.get("input_$"));
|
cell.setCellStyle(styles.get("input_$"));
|
||||||
|
cell.setAsActiveCell();
|
||||||
|
|
||||||
row = sheet.createRow(4);
|
row = sheet.createRow(4);
|
||||||
cell = row.createCell(2);
|
cell = row.createCell(2);
|
||||||
@ -127,10 +136,11 @@ public class LoanCalculator {
|
|||||||
cell.setCellFormula("IF(Values_Entered,Monthly_Payment*Number_of_Payments,\"\")");
|
cell.setCellFormula("IF(Values_Entered,Monthly_Payment*Number_of_Payments,\"\")");
|
||||||
cell.setCellStyle(styles.get("formula_$"));
|
cell.setCellStyle(styles.get("formula_$"));
|
||||||
|
|
||||||
sheet.setActiveCell("E4");
|
|
||||||
|
|
||||||
// Write the output to a file
|
// 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);
|
wb.write(out);
|
||||||
out.close();
|
out.close();
|
||||||
}
|
}
|
||||||
@ -138,126 +148,122 @@ public class LoanCalculator {
|
|||||||
/**
|
/**
|
||||||
* cell styles used for formatting calendar sheets
|
* cell styles used for formatting calendar sheets
|
||||||
*/
|
*/
|
||||||
private static Map<String, XSSFCellStyle> createStyles(XSSFWorkbook wb){
|
private static Map<String, CellStyle> createStyles(Workbook wb){
|
||||||
Map<String, XSSFCellStyle> styles = new HashMap<String, XSSFCellStyle>();
|
Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
|
||||||
|
|
||||||
XSSFCellStyle style;
|
CellStyle style;
|
||||||
XSSFFont titleFont = wb.createFont();
|
Font titleFont = wb.createFont();
|
||||||
titleFont.setFontHeightInPoints((short)14);
|
titleFont.setFontHeightInPoints((short)14);
|
||||||
titleFont.setFontName("Trebuchet MS");
|
titleFont.setFontName("Trebuchet MS");
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setFont(titleFont);
|
style.setFont(titleFont);
|
||||||
style.setBorderBottom(BorderStyle.DOTTED);
|
style.setBorderBottom(CellStyle.BORDER_DOTTED);
|
||||||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
styles.put("title", style);
|
styles.put("title", style);
|
||||||
|
|
||||||
XSSFFont itemFont = wb.createFont();
|
Font itemFont = wb.createFont();
|
||||||
itemFont.setFontHeightInPoints((short)9);
|
itemFont.setFontHeightInPoints((short)9);
|
||||||
itemFont.setFontName("Trebuchet MS");
|
itemFont.setFontName("Trebuchet MS");
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.LEFT);
|
style.setAlignment(CellStyle.ALIGN_LEFT);
|
||||||
style.setFont(itemFont);
|
style.setFont(itemFont);
|
||||||
styles.put("item_left", style);
|
styles.put("item_left", style);
|
||||||
|
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.RIGHT);
|
style.setAlignment(CellStyle.ALIGN_RIGHT);
|
||||||
style.setFont(itemFont);
|
style.setFont(itemFont);
|
||||||
styles.put("item_right", style);
|
styles.put("item_right", style);
|
||||||
|
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.RIGHT);
|
style.setAlignment(CellStyle.ALIGN_RIGHT);
|
||||||
style.setFont(itemFont);
|
style.setFont(itemFont);
|
||||||
style.setBorderRight(BorderStyle.DOTTED);
|
style.setBorderRight(CellStyle.BORDER_DOTTED);
|
||||||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderBottom(BorderStyle.DOTTED);
|
style.setBorderBottom(CellStyle.BORDER_DOTTED);
|
||||||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderLeft(BorderStyle.DOTTED);
|
style.setBorderLeft(CellStyle.BORDER_DOTTED);
|
||||||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderTop(BorderStyle.DOTTED);
|
style.setBorderTop(CellStyle.BORDER_DOTTED);
|
||||||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setDataFormat(wb.createDataFormat().getFormat("_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)"));
|
style.setDataFormat(wb.createDataFormat().getFormat("_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)"));
|
||||||
styles.put("input_$", style);
|
styles.put("input_$", style);
|
||||||
|
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.RIGHT);
|
style.setAlignment(CellStyle.ALIGN_RIGHT);
|
||||||
style.setFont(itemFont);
|
style.setFont(itemFont);
|
||||||
style.setBorderRight(BorderStyle.DOTTED);
|
style.setBorderRight(CellStyle.BORDER_DOTTED);
|
||||||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderBottom(BorderStyle.DOTTED);
|
style.setBorderBottom(CellStyle.BORDER_DOTTED);
|
||||||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderLeft(BorderStyle.DOTTED);
|
style.setBorderLeft(CellStyle.BORDER_DOTTED);
|
||||||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderTop(BorderStyle.DOTTED);
|
style.setBorderTop(CellStyle.BORDER_DOTTED);
|
||||||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setDataFormat(wb.createDataFormat().getFormat("0.000%"));
|
style.setDataFormat(wb.createDataFormat().getFormat("0.000%"));
|
||||||
styles.put("input_%", style);
|
styles.put("input_%", style);
|
||||||
|
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.RIGHT);
|
style.setAlignment(CellStyle.ALIGN_RIGHT);
|
||||||
style.setFont(itemFont);
|
style.setFont(itemFont);
|
||||||
style.setBorderRight(BorderStyle.DOTTED);
|
style.setBorderRight(CellStyle.BORDER_DOTTED);
|
||||||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderBottom(BorderStyle.DOTTED);
|
style.setBorderBottom(CellStyle.BORDER_DOTTED);
|
||||||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderLeft(BorderStyle.DOTTED);
|
style.setBorderLeft(CellStyle.BORDER_DOTTED);
|
||||||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderTop(BorderStyle.DOTTED);
|
style.setBorderTop(CellStyle.BORDER_DOTTED);
|
||||||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setDataFormat(wb.createDataFormat().getFormat("0"));
|
style.setDataFormat(wb.createDataFormat().getFormat("0"));
|
||||||
styles.put("input_i", style);
|
styles.put("input_i", style);
|
||||||
|
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.CENTER);
|
style.setAlignment(CellStyle.ALIGN_CENTER);
|
||||||
style.setFont(itemFont);
|
style.setFont(itemFont);
|
||||||
style.setDataFormat(wb.createDataFormat().getFormat("m/d/yy"));
|
style.setDataFormat(wb.createDataFormat().getFormat("m/d/yy"));
|
||||||
styles.put("input_d", style);
|
styles.put("input_d", style);
|
||||||
|
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.RIGHT);
|
style.setAlignment(CellStyle.ALIGN_RIGHT);
|
||||||
style.setFont(itemFont);
|
style.setFont(itemFont);
|
||||||
style.setBorderRight(BorderStyle.DOTTED);
|
style.setBorderRight(CellStyle.BORDER_DOTTED);
|
||||||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderBottom(BorderStyle.DOTTED);
|
style.setBorderBottom(CellStyle.BORDER_DOTTED);
|
||||||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderLeft(BorderStyle.DOTTED);
|
style.setBorderLeft(CellStyle.BORDER_DOTTED);
|
||||||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderTop(BorderStyle.DOTTED);
|
style.setBorderTop(CellStyle.BORDER_DOTTED);
|
||||||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setDataFormat(wb.createDataFormat().getFormat("$##,##0.00"));
|
style.setDataFormat(wb.createDataFormat().getFormat("$##,##0.00"));
|
||||||
style.setBorderBottom(BorderStyle.DOTTED);
|
style.setBorderBottom(CellStyle.BORDER_DOTTED);
|
||||||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setFillForegroundColor(new XSSFColor(new java.awt.Color(234, 234, 234)));
|
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
|
||||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
|
||||||
styles.put("formula_$", style);
|
styles.put("formula_$", style);
|
||||||
|
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.RIGHT);
|
style.setAlignment(CellStyle.ALIGN_RIGHT);
|
||||||
style.setFont(itemFont);
|
style.setFont(itemFont);
|
||||||
style.setBorderRight(BorderStyle.DOTTED);
|
style.setBorderRight(CellStyle.BORDER_DOTTED);
|
||||||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderBottom(BorderStyle.DOTTED);
|
style.setBorderBottom(CellStyle.BORDER_DOTTED);
|
||||||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderLeft(BorderStyle.DOTTED);
|
style.setBorderLeft(CellStyle.BORDER_DOTTED);
|
||||||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setBorderTop(BorderStyle.DOTTED);
|
style.setBorderTop(CellStyle.BORDER_DOTTED);
|
||||||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setDataFormat(wb.createDataFormat().getFormat("0"));
|
style.setDataFormat(wb.createDataFormat().getFormat("0"));
|
||||||
style.setBorderBottom(BorderStyle.DOTTED);
|
style.setBorderBottom(CellStyle.BORDER_DOTTED);
|
||||||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setFillForegroundColor(new XSSFColor(new java.awt.Color(234, 234, 234)));
|
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
|
||||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
|
||||||
styles.put("formula_i", style);
|
styles.put("formula_i", style);
|
||||||
|
|
||||||
return styles;
|
return styles;
|
||||||
}
|
}
|
||||||
|
|
||||||
//define named ranges for the inputs and formulas
|
//define named ranges for the inputs and formulas
|
||||||
public static void createNames(XSSFWorkbook wb){
|
public static void createNames(Workbook wb){
|
||||||
XSSFName name;
|
Name name;
|
||||||
|
|
||||||
name = wb.createName();
|
|
||||||
name.setNameName("Header_Row");
|
|
||||||
name.setReference("ROW('Loan Calculator'!#REF!)");
|
|
||||||
|
|
||||||
name = wb.createName();
|
name = wb.createName();
|
||||||
name.setNameName("Interest_Rate");
|
name.setNameName("Interest_Rate");
|
||||||
@ -267,10 +273,6 @@ public class LoanCalculator {
|
|||||||
name.setNameName("Loan_Amount");
|
name.setNameName("Loan_Amount");
|
||||||
name.setReference("'Loan Calculator'!$E$4");
|
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 = wb.createName();
|
||||||
name.setNameName("Loan_Start");
|
name.setNameName("Loan_Start");
|
||||||
name.setReference("'Loan Calculator'!$E$7");
|
name.setReference("'Loan Calculator'!$E$7");
|
||||||
@ -279,21 +281,13 @@ public class LoanCalculator {
|
|||||||
name.setNameName("Loan_Years");
|
name.setNameName("Loan_Years");
|
||||||
name.setReference("'Loan Calculator'!$E$6");
|
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 = wb.createName();
|
||||||
name.setNameName("Number_of_Payments");
|
name.setNameName("Number_of_Payments");
|
||||||
name.setReference("'Loan Calculator'!$E$10");
|
name.setReference("'Loan Calculator'!$E$10");
|
||||||
|
|
||||||
name = wb.createName();
|
name = wb.createName();
|
||||||
name.setNameName("Payment_Number");
|
name.setNameName("Monthly_Payment");
|
||||||
name.setReference("ROW()-Header_Row");
|
name.setReference("-PMT(Interest_Rate/12,Number_of_Payments,Loan_Amount)");
|
||||||
|
|
||||||
name = wb.createName();
|
|
||||||
name.setNameName("Principal");
|
|
||||||
name.setReference("-PPMT(Interest_Rate/12,Payment_Number,Number_of_Payments,Loan_Amount)");
|
|
||||||
|
|
||||||
name = wb.createName();
|
name = wb.createName();
|
||||||
name.setNameName("Total_Cost");
|
name.setNameName("Total_Cost");
|
||||||
@ -306,7 +300,5 @@ public class LoanCalculator {
|
|||||||
name = wb.createName();
|
name = wb.createName();
|
||||||
name.setNameName("Values_Entered");
|
name.setNameName("Values_Entered");
|
||||||
name.setReference("IF(Loan_Amount*Interest_Rate*Loan_Years*Loan_Start>0,1,0)");
|
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
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
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.xssf.usermodel.*;
|
||||||
import org.apache.poi.ss.util.CellRangeAddress;
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -26,6 +27,8 @@ import java.io.FileOutputStream;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* A weekly timesheet created using Apache POI.
|
* A weekly timesheet created using Apache POI.
|
||||||
|
* Usage:
|
||||||
|
* TimesheetDemo -xls|xlsx
|
||||||
*
|
*
|
||||||
* @author Yegor Kozlov
|
* @author Yegor Kozlov
|
||||||
*/
|
*/
|
||||||
@ -37,32 +40,35 @@ public class TimesheetDemo {
|
|||||||
|
|
||||||
private static Object[][] sample_data = {
|
private static Object[][] sample_data = {
|
||||||
{"Yegor Kozlov", "YK", 5.0, 8.0, 10.0, 5.0, 5.0, 7.0, 6.0},
|
{"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 {
|
public static void main(String[] args) throws Exception {
|
||||||
|
Workbook wb;
|
||||||
|
|
||||||
XSSFWorkbook wb = new XSSFWorkbook();
|
if(args.length > 0 && args[0].equals("-xls")) wb = new HSSFWorkbook();
|
||||||
Map<String, XSSFCellStyle> styles = createStyles(wb);
|
else wb = new XSSFWorkbook();
|
||||||
|
|
||||||
XSSFSheet sheet = wb.createSheet("Timesheet");
|
Map<String, CellStyle> styles = createStyles(wb);
|
||||||
XSSFPrintSetup printSetup = sheet.getPrintSetup();
|
|
||||||
printSetup.setOrientation(PrintOrientation.LANDSCAPE);
|
Sheet sheet = wb.createSheet("Timesheet");
|
||||||
|
PrintSetup printSetup = sheet.getPrintSetup();
|
||||||
|
printSetup.setLandscape(true);
|
||||||
sheet.setFitToPage(true);
|
sheet.setFitToPage(true);
|
||||||
sheet.setHorizontallyCenter(true);
|
sheet.setHorizontallyCenter(true);
|
||||||
|
|
||||||
//title row
|
//title row
|
||||||
XSSFRow titleRow = sheet.createRow(0);
|
Row titleRow = sheet.createRow(0);
|
||||||
titleRow.setHeightInPoints(45);
|
titleRow.setHeightInPoints(45);
|
||||||
XSSFCell titleCell = titleRow.createCell(0);
|
Cell titleCell = titleRow.createCell(0);
|
||||||
titleCell.setCellValue("Weekly Timesheet");
|
titleCell.setCellValue("Weekly Timesheet");
|
||||||
titleCell.setCellStyle(styles.get("title"));
|
titleCell.setCellStyle(styles.get("title"));
|
||||||
sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$L$1"));
|
sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$L$1"));
|
||||||
|
|
||||||
//header row
|
//header row
|
||||||
XSSFRow headerRow = sheet.createRow(1);
|
Row headerRow = sheet.createRow(1);
|
||||||
headerRow.setHeightInPoints(40);
|
headerRow.setHeightInPoints(40);
|
||||||
XSSFCell headerCell;
|
Cell headerCell;
|
||||||
for (int i = 0; i < titles.length; i++) {
|
for (int i = 0; i < titles.length; i++) {
|
||||||
headerCell = headerRow.createCell(i);
|
headerCell = headerRow.createCell(i);
|
||||||
headerCell.setCellValue(titles[i]);
|
headerCell.setCellValue(titles[i]);
|
||||||
@ -71,9 +77,9 @@ public class TimesheetDemo {
|
|||||||
|
|
||||||
int rownum = 2;
|
int rownum = 2;
|
||||||
for (int i = 0; i < 10; i++) {
|
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++) {
|
for (int j = 0; j < titles.length; j++) {
|
||||||
XSSFCell cell = row.createCell(j);
|
Cell cell = row.createCell(j);
|
||||||
if(j == 9){
|
if(j == 9){
|
||||||
//the 10th cell contains sum over week days, e.g. SUM(C3:I3)
|
//the 10th cell contains sum over week days, e.g. SUM(C3:I3)
|
||||||
String ref = "C" +rownum+ ":I" + rownum;
|
String ref = "C" +rownum+ ":I" + rownum;
|
||||||
@ -89,9 +95,9 @@ public class TimesheetDemo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//row with totals below
|
//row with totals below
|
||||||
XSSFRow sumRow = sheet.createRow(rownum++);
|
Row sumRow = sheet.createRow(rownum++);
|
||||||
sumRow.setHeightInPoints(35);
|
sumRow.setHeightInPoints(35);
|
||||||
XSSFCell cell;
|
Cell cell;
|
||||||
cell = sumRow.createCell(0);
|
cell = sumRow.createCell(0);
|
||||||
cell.setCellStyle(styles.get("formula"));
|
cell.setCellStyle(styles.get("formula"));
|
||||||
cell = sumRow.createCell(1);
|
cell = sumRow.createCell(1);
|
||||||
@ -125,7 +131,7 @@ public class TimesheetDemo {
|
|||||||
|
|
||||||
//set sample data
|
//set sample data
|
||||||
for (int i = 0; i < sample_data.length; i++) {
|
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++) {
|
for (int j = 0; j < sample_data[i].length; j++) {
|
||||||
if(sample_data[i][j] == null) continue;
|
if(sample_data[i][j] == null) continue;
|
||||||
|
|
||||||
@ -137,70 +143,74 @@ public class TimesheetDemo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//finally set column widths
|
//finally set column widths, the width is measured in units of 1/256th of a character width
|
||||||
sheet.setColumnWidth(0, 30*256);
|
sheet.setColumnWidth(0, 30*256); //30 characters wide
|
||||||
for (int i = 2; i < 9; i++) {
|
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
|
// 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);
|
wb.write(out);
|
||||||
out.close();
|
out.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<String, XSSFCellStyle> createStyles(XSSFWorkbook wb){
|
/**
|
||||||
Map<String, XSSFCellStyle> styles = new HashMap<String, XSSFCellStyle>();
|
* Create a library of cell styles
|
||||||
XSSFCellStyle style;
|
*/
|
||||||
XSSFFont titleFont = wb.createFont();
|
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.setFontHeightInPoints((short)18);
|
||||||
titleFont.setBold(true);
|
titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.CENTER);
|
style.setAlignment(CellStyle.ALIGN_CENTER);
|
||||||
style.setVerticalAlignment(VerticalAlignment.CENTER);
|
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
|
||||||
style.setFillForegroundColor(new XSSFColor(new java.awt.Color(234, 234, 234)));
|
|
||||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
|
||||||
style.setFont(titleFont);
|
style.setFont(titleFont);
|
||||||
styles.put("title", style);
|
styles.put("title", style);
|
||||||
|
|
||||||
XSSFFont monthFont = wb.createFont();
|
Font monthFont = wb.createFont();
|
||||||
monthFont.setFontHeightInPoints((short)11);
|
monthFont.setFontHeightInPoints((short)11);
|
||||||
monthFont.setColor(new XSSFColor(new java.awt.Color(255, 255, 255)));
|
monthFont.setColor(IndexedColors.WHITE.getIndex());
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.CENTER);
|
style.setAlignment(CellStyle.ALIGN_CENTER);
|
||||||
style.setVerticalAlignment(VerticalAlignment.CENTER);
|
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
|
||||||
style.setFillForegroundColor(new XSSFColor(new java.awt.Color(102, 102, 102)));
|
style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
|
||||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
|
||||||
style.setFont(monthFont);
|
style.setFont(monthFont);
|
||||||
style.setWrapText(true);
|
style.setWrapText(true);
|
||||||
styles.put("header", style);
|
styles.put("header", style);
|
||||||
|
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.CENTER);
|
style.setAlignment(CellStyle.ALIGN_CENTER);
|
||||||
style.setWrapText(true);
|
style.setWrapText(true);
|
||||||
style.setBorderRight(BorderStyle.THIN);
|
style.setBorderRight(CellStyle.BORDER_THIN);
|
||||||
style.setRightBorderColor(IndexedColors.BLACK.getIndex());
|
style.setRightBorderColor(IndexedColors.BLACK.getIndex());
|
||||||
style.setBorderLeft(BorderStyle.THIN);
|
style.setBorderLeft(CellStyle.BORDER_THIN);
|
||||||
style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
|
style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
|
||||||
style.setBorderTop(BorderStyle.THIN);
|
style.setBorderTop(CellStyle.BORDER_THIN);
|
||||||
style.setTopBorderColor(IndexedColors.BLACK.getIndex());
|
style.setTopBorderColor(IndexedColors.BLACK.getIndex());
|
||||||
style.setBorderBottom(BorderStyle.THIN);
|
style.setBorderBottom(CellStyle.BORDER_THIN);
|
||||||
style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
|
style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
|
||||||
styles.put("cell", style);
|
styles.put("cell", style);
|
||||||
|
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.CENTER);
|
style.setAlignment(CellStyle.ALIGN_CENTER);
|
||||||
style.setVerticalAlignment(VerticalAlignment.CENTER);
|
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
|
||||||
style.setFillForegroundColor(new XSSFColor(new java.awt.Color(234, 234, 234)));
|
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
|
||||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
|
||||||
style.setDataFormat(wb.createDataFormat().getFormat("0.00"));
|
style.setDataFormat(wb.createDataFormat().getFormat("0.00"));
|
||||||
styles.put("formula", style);
|
styles.put("formula", style);
|
||||||
|
|
||||||
style = wb.createCellStyle();
|
style = wb.createCellStyle();
|
||||||
style.setAlignment(HorizontalAlignment.CENTER);
|
style.setAlignment(CellStyle.ALIGN_CENTER);
|
||||||
style.setVerticalAlignment(VerticalAlignment.CENTER);
|
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
|
||||||
style.setFillForegroundColor(new XSSFColor(new java.awt.Color(192, 192, 192)));
|
style.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex());
|
||||||
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
|
||||||
style.setDataFormat(wb.createDataFormat().getFormat("0.00"));
|
style.setDataFormat(wb.createDataFormat().getFormat("0.00"));
|
||||||
styles.put("formula_2", style);
|
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.
|
* 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>
|
* <pre>
|
||||||
* Usage:
|
* Usage:
|
||||||
* CalendarDemo <year>
|
* 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
|
* Set a string value for the cell.
|
||||||
* full 16 bit unicode you should call <code>setEncoding()</code> first.
|
|
||||||
*
|
*
|
||||||
* @param value value to set the cell to. For formulas we'll set the formula
|
* @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
|
* 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);
|
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)
|
public void groupRow(int fromRow, int toRow)
|
||||||
{
|
{
|
||||||
sheet.groupRowRange( fromRow, toRow, true );
|
sheet.groupRowRange( fromRow, toRow, true );
|
||||||
|
@ -145,21 +145,33 @@ public interface Cell {
|
|||||||
void setCellValue(Calendar value);
|
void setCellValue(Calendar value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set a string value for the cell. Please note that if you are using
|
* Set a rich string value for the cell.
|
||||||
* full 16 bit unicode you should call <code>setEncoding()</code> first.
|
|
||||||
*
|
*
|
||||||
* @param value value to set the cell to. For formulas we'll set the formula
|
* @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
|
* 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.
|
* 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.
|
* If value is null then we will change the cell to a Blank cell.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void setCellValue(RichTextString value);
|
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);
|
void setCellValue(String value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a formula value for the cell.
|
||||||
|
*/
|
||||||
void setCellFormula(String formula);
|
void setCellFormula(String formula);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the formula value of the cell.
|
||||||
|
*/
|
||||||
String getCellFormula();
|
String getCellFormula();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -409,7 +409,6 @@ public interface Sheet extends Iterable<Row> {
|
|||||||
* Additionally shifts merged regions that are completely defined in these
|
* Additionally shifts merged regions that are completely defined in these
|
||||||
* rows (ie. merged 2 cells on a row to be shifted).
|
* rows (ie. merged 2 cells on a row to be shifted).
|
||||||
* <p>
|
* <p>
|
||||||
* TODO Might want to add bounds checking here
|
|
||||||
* @param startRow the row to start shifting
|
* @param startRow the row to start shifting
|
||||||
* @param endRow the row to end shifting
|
* @param endRow the row to end shifting
|
||||||
* @param n the number of rows to shift
|
* @param n the number of rows to shift
|
||||||
@ -541,14 +540,6 @@ public interface Sheet extends Iterable<Row> {
|
|||||||
*/
|
*/
|
||||||
void removeColumnBreak(short column);
|
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.
|
* Expands or collapses a column group.
|
||||||
*
|
*
|
||||||
@ -567,10 +558,28 @@ public interface Sheet extends Iterable<Row> {
|
|||||||
|
|
||||||
void ungroupColumn(short fromColumn, short toColumn);
|
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);
|
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);
|
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);
|
void setRowGroupCollapsed(int row, boolean collapse);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -599,6 +608,11 @@ public interface Sheet extends Iterable<Row> {
|
|||||||
*/
|
*/
|
||||||
Comment getCellComment(int row, int column);
|
Comment getCellComment(int row, int column);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the top-level drawing patriarch.
|
||||||
|
*
|
||||||
|
* @return The new drawing patriarch.
|
||||||
|
*/
|
||||||
Drawing createDrawingPatriarch();
|
Drawing createDrawingPatriarch();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ public class XSSFSave {
|
|||||||
XSSFWorkbook wb = new XSSFWorkbook(args[i]);
|
XSSFWorkbook wb = new XSSFWorkbook(args[i]);
|
||||||
|
|
||||||
int sep = args[i].lastIndexOf('.');
|
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);
|
FileOutputStream out = new FileOutputStream(outfile);
|
||||||
wb.write(out);
|
wb.write(out);
|
||||||
out.close();
|
out.close();
|
||||||
|
@ -952,11 +952,17 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
setSheetFormatPrOutlineLevelCol();
|
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) {
|
public void groupRow(int fromRow, int toRow) {
|
||||||
for (int i = fromRow; i <= toRow; i++) {
|
for (int i = fromRow; i <= toRow; i++) {
|
||||||
XSSFRow xrow = getRow(i-1);
|
XSSFRow xrow = getRow(i);
|
||||||
if(xrow == null){//create a new Row
|
if (xrow == null) {
|
||||||
xrow = createRow(i-1);
|
xrow = createRow(i);
|
||||||
}
|
}
|
||||||
CTRow ctrow = xrow.getCTRow();
|
CTRow ctrow = xrow.getCTRow();
|
||||||
short outlineLevel = ctrow.getOutlineLevel();
|
short outlineLevel = ctrow.getOutlineLevel();
|
||||||
@ -1478,9 +1484,15 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
|
|||||||
setSheetFormatPrOutlineLevelCol();
|
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) {
|
public void ungroupRow(int fromRow, int toRow) {
|
||||||
for (int i = fromRow; i <= toRow; i++) {
|
for (int i = fromRow; i <= toRow; i++) {
|
||||||
XSSFRow xrow = getRow(i - 1);
|
XSSFRow xrow = getRow(i);
|
||||||
if (xrow != null) {
|
if (xrow != null) {
|
||||||
CTRow ctrow = xrow.getCTRow();
|
CTRow ctrow = xrow.getCTRow();
|
||||||
short outlinelevel = ctrow.getOutlineLevel();
|
short outlinelevel = ctrow.getOutlineLevel();
|
||||||
|
@ -789,19 +789,19 @@ public class TestXSSFSheet extends TestCase {
|
|||||||
//one level
|
//one level
|
||||||
sheet.groupRow(9,10);
|
sheet.groupRow(9,10);
|
||||||
assertEquals(2,sheet.getPhysicalNumberOfRows());
|
assertEquals(2,sheet.getPhysicalNumberOfRows());
|
||||||
CTRow ctrow = sheet.getRow(8).getCTRow();
|
CTRow ctrow = sheet.getRow(9).getCTRow();
|
||||||
|
|
||||||
assertNotNull(ctrow);
|
assertNotNull(ctrow);
|
||||||
assertEquals(9,ctrow.getR());
|
assertEquals(10,ctrow.getR());
|
||||||
assertEquals(1, ctrow.getOutlineLevel());
|
assertEquals(1, ctrow.getOutlineLevel());
|
||||||
assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
assertEquals(1,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||||
|
|
||||||
//two level
|
//two level
|
||||||
sheet.groupRow(10,13);
|
sheet.groupRow(10,13);
|
||||||
assertEquals(5,sheet.getPhysicalNumberOfRows());
|
assertEquals(5,sheet.getPhysicalNumberOfRows());
|
||||||
ctrow = sheet.getRow(9).getCTRow();
|
ctrow = sheet.getRow(10).getCTRow();
|
||||||
assertNotNull(ctrow);
|
assertNotNull(ctrow);
|
||||||
assertEquals(10,ctrow.getR());
|
assertEquals(11,ctrow.getR());
|
||||||
assertEquals(2, ctrow.getOutlineLevel());
|
assertEquals(2, ctrow.getOutlineLevel());
|
||||||
assertEquals(2,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
assertEquals(2,sheet.getCTWorksheet().getSheetFormatPr().getOutlineLevelRow());
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
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.ddf.*;
|
||||||
import org.apache.poi.hslf.model.*;
|
import org.apache.poi.hslf.model.*;
|
||||||
import org.apache.poi.hslf.record.InteractiveInfo;
|
import org.apache.poi.hslf.record.InteractiveInfo;
|
@ -286,7 +286,7 @@ public class TestMetaDataIPI extends TestCase{
|
|||||||
|
|
||||||
/* Insert some custom properties into the container. */
|
/* Insert some custom properties into the container. */
|
||||||
customProperties.put("Key1", "Value1");
|
customProperties.put("Key1", "Value1");
|
||||||
customProperties.put("Schl<EFBFBD>ssel2", "Wert2");
|
customProperties.put("Schl\u00fcssel2", "Wert2");
|
||||||
customProperties.put("Sample Integer", new Integer(12345));
|
customProperties.put("Sample Integer", new Integer(12345));
|
||||||
customProperties.put("Sample Boolean", new Boolean(true));
|
customProperties.put("Sample Boolean", new Boolean(true));
|
||||||
Date date=new Date();
|
Date date=new Date();
|
||||||
@ -325,8 +325,8 @@ public class TestMetaDataIPI extends TestCase{
|
|||||||
/* Insert some custom properties into the container. */
|
/* Insert some custom properties into the container. */
|
||||||
String a1=(String) customProperties.get("Key1");
|
String a1=(String) customProperties.get("Key1");
|
||||||
assertEquals("Key1","Value1",a1);
|
assertEquals("Key1","Value1",a1);
|
||||||
String a2=(String) customProperties.get("Schl<EFBFBD>ssel2");
|
String a2=(String) customProperties.get("Schl\u00fcssel2");
|
||||||
assertEquals("Schl<EFBFBD>ssel2","Wert2",a2);
|
assertEquals("Schl\u00fcssel2","Wert2",a2);
|
||||||
Integer a3=(Integer) customProperties.get("Sample Integer");
|
Integer a3=(Integer) customProperties.get("Sample Integer");
|
||||||
assertEquals("Sample Number",new Integer(12345),a3);
|
assertEquals("Sample Number",new Integer(12345),a3);
|
||||||
Boolean a4=(Boolean) customProperties.get("Sample Boolean");
|
Boolean a4=(Boolean) customProperties.get("Sample Boolean");
|
||||||
@ -431,7 +431,7 @@ public void testTwo(){
|
|||||||
String a1=(String) customProperties.get(k1);
|
String a1=(String) customProperties.get(k1);
|
||||||
assertEquals("Key1",p1,a1);
|
assertEquals("Key1",p1,a1);
|
||||||
String a2=(String) customProperties.get(k2);
|
String a2=(String) customProperties.get(k2);
|
||||||
assertEquals("Schl<EFBFBD>ssel2",p2,a2);
|
assertEquals("Schl\u00fcssel2",p2,a2);
|
||||||
Integer a3=(Integer) customProperties.get("Sample Number");
|
Integer a3=(Integer) customProperties.get("Sample Number");
|
||||||
assertEquals("Sample Number",new Integer(12345),a3);
|
assertEquals("Sample Number",new Integer(12345),a3);
|
||||||
Boolean a4=(Boolean) customProperties.get("Sample Boolean");
|
Boolean a4=(Boolean) customProperties.get("Sample Boolean");
|
||||||
@ -450,7 +450,7 @@ public void testTwo(){
|
|||||||
*/
|
*/
|
||||||
public String strangize(String s){
|
public String strangize(String s){
|
||||||
StringBuffer sb=new StringBuffer();
|
StringBuffer sb=new StringBuffer();
|
||||||
String[] umlaute= {"<EFBFBD>","<EFBFBD>","<EFBFBD>","<EFBFBD>","$","<EFBFBD>","<EFBFBD>","<EFBFBD>","<EFBFBD>","@","<EFBFBD>","&"};
|
String[] umlaute= {"\u00e4","\u00fc","\u00f6","\u00dc","$","\u00d6","\u00dc","\u00c9","\u00d6","@","\u00e7","&"};
|
||||||
char j=0;
|
char j=0;
|
||||||
Random rand=new Random();
|
Random rand=new Random();
|
||||||
for (int i=0;i<5;i++){
|
for (int i=0;i<5;i++){
|
||||||
@ -544,7 +544,7 @@ public void testThree(){
|
|||||||
String a1=(String) customProperties.get(k1);
|
String a1=(String) customProperties.get(k1);
|
||||||
assertEquals("Key1",p1,a1);
|
assertEquals("Key1",p1,a1);
|
||||||
String a2=(String) customProperties.get(k2);
|
String a2=(String) customProperties.get(k2);
|
||||||
assertEquals("Schl<EFBFBD>ssel2",p2,a2);
|
assertEquals("Schl\u00fcssel2",p2,a2);
|
||||||
Integer a3=(Integer) customProperties.get("Sample Number");
|
Integer a3=(Integer) customProperties.get("Sample Number");
|
||||||
assertEquals("Sample Number",new Integer(12345),a3);
|
assertEquals("Sample Number",new Integer(12345),a3);
|
||||||
Boolean a4=(Boolean) customProperties.get("Sample Boolean");
|
Boolean a4=(Boolean) customProperties.get("Sample Boolean");
|
||||||
@ -577,7 +577,7 @@ public void testThree(){
|
|||||||
public String strangizeU(String s){
|
public String strangizeU(String s){
|
||||||
|
|
||||||
StringBuffer sb=new StringBuffer();
|
StringBuffer sb=new StringBuffer();
|
||||||
String[] umlaute= {"<EFBFBD>","<EFBFBD>","<EFBFBD>","<EFBFBD>","$","<EFBFBD>","<EFBFBD>","<EFBFBD>","<EFBFBD>","@","<EFBFBD>","&"};
|
String[] umlaute= {"\u00e4","\u00fc","\u00f6","\u00dc","$","\u00d6","\u00dc","\u00c9","\u00d6","@","\u00e7","&"};
|
||||||
char j=0;
|
char j=0;
|
||||||
Random rand=new Random();
|
Random rand=new Random();
|
||||||
for (int i=0;i<5;i++){
|
for (int i=0;i<5;i++){
|
||||||
@ -592,7 +592,7 @@ public void testThree(){
|
|||||||
sb.append(umlaute[rand.nextInt(umlaute.length)]);
|
sb.append(umlaute[rand.nextInt(umlaute.length)]);
|
||||||
sb.append("<");
|
sb.append("<");
|
||||||
}
|
}
|
||||||
sb.append("<EFBFBD><EFBFBD><EFBFBD>\uD840\uDC00");
|
sb.append("\u00e4\u00f6\u00fc\uD840\uDC00");
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -668,7 +668,7 @@ public void testThree(){
|
|||||||
String a1=(String) customProperties.get(k1);
|
String a1=(String) customProperties.get(k1);
|
||||||
assertEquals("Key1",p1,a1);
|
assertEquals("Key1",p1,a1);
|
||||||
String a2=(String) customProperties.get(k2);
|
String a2=(String) customProperties.get(k2);
|
||||||
assertEquals("Schl<EFBFBD>ssel2",p2,a2);
|
assertEquals("Schl\u00fcssel2",p2,a2);
|
||||||
Integer a3=(Integer) customProperties.get("Sample Number");
|
Integer a3=(Integer) customProperties.get("Sample Number");
|
||||||
assertEquals("Sample Number",new Integer(12345),a3);
|
assertEquals("Sample Number",new Integer(12345),a3);
|
||||||
Boolean a4=(Boolean) customProperties.get("Sample Boolean");
|
Boolean a4=(Boolean) customProperties.get("Sample Boolean");
|
||||||
|
@ -120,7 +120,6 @@ public class TestWriteWellKnown extends TestCase
|
|||||||
for (int i = 0; i < docs.length; i++)
|
for (int i = 0; i < docs.length; i++)
|
||||||
{
|
{
|
||||||
final File doc = docs[i];
|
final File doc = docs[i];
|
||||||
System.out.println("Reading file " + doc);
|
|
||||||
|
|
||||||
/* Read a test document <em>doc</em> into a POI filesystem. */
|
/* Read a test document <em>doc</em> into a POI filesystem. */
|
||||||
final POIFSFileSystem poifs = new POIFSFileSystem(new FileInputStream(doc));
|
final POIFSFileSystem poifs = new POIFSFileSystem(new FileInputStream(doc));
|
||||||
@ -351,10 +350,10 @@ public class TestWriteWellKnown extends TestCase
|
|||||||
CustomProperties customProperties = dsi.getCustomProperties();
|
CustomProperties customProperties = dsi.getCustomProperties();
|
||||||
if (customProperties == null)
|
if (customProperties == null)
|
||||||
customProperties = new CustomProperties();
|
customProperties = new CustomProperties();
|
||||||
customProperties.put("Schl\u00fcssel <EFBFBD>", "Wert <20>");
|
customProperties.put("Schl\u00fcssel \u00e4", "Wert \u00e4");
|
||||||
customProperties.put("Schl\u00fcssel <EFBFBD><EFBFBD>", "Wert <20><>");
|
customProperties.put("Schl\u00fcssel \u00e4\u00f6", "Wert \u00e4\u00f6");
|
||||||
customProperties.put("Schl\u00fcssel <EFBFBD><EFBFBD><EFBFBD>", "Wert <20><><EFBFBD>");
|
customProperties.put("Schl\u00fcssel \u00e4\u00f6\u00fc", "Wert \u00e4\u00f6\u00fc");
|
||||||
customProperties.put("Schl\u00fcssel <EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "Wert <20><><EFBFBD><EFBFBD>");
|
customProperties.put("Schl\u00fcssel \u00e4\u00f6\u00fc\u00d6", "Wert \u00e4\u00f6\u00fc\u00d6");
|
||||||
customProperties.put("positive_Integer", POSITIVE_INTEGER);
|
customProperties.put("positive_Integer", POSITIVE_INTEGER);
|
||||||
customProperties.put("positive_Long", POSITIVE_LONG);
|
customProperties.put("positive_Long", POSITIVE_LONG);
|
||||||
customProperties.put("positive_Double", POSITIVE_DOUBLE);
|
customProperties.put("positive_Double", POSITIVE_DOUBLE);
|
||||||
@ -440,10 +439,10 @@ public class TestWriteWellKnown extends TestCase
|
|||||||
final CustomProperties cps = dsi.getCustomProperties();
|
final CustomProperties cps = dsi.getCustomProperties();
|
||||||
assertEquals(customProperties, cps);
|
assertEquals(customProperties, cps);
|
||||||
assertNull(cps.get("No value available"));
|
assertNull(cps.get("No value available"));
|
||||||
assertEquals("Wert <EFBFBD>", cps.get("Schl\u00fcssel <EFBFBD>"));
|
assertEquals("Wert \u00e4", cps.get("Schl\u00fcssel \u00e4"));
|
||||||
assertEquals("Wert <EFBFBD><EFBFBD>", cps.get("Schl\u00fcssel <EFBFBD><EFBFBD>"));
|
assertEquals("Wert \u00e4\u00f6", cps.get("Schl\u00fcssel \u00e4\u00f6"));
|
||||||
assertEquals("Wert <EFBFBD><EFBFBD><EFBFBD>", cps.get("Schl\u00fcssel <EFBFBD><EFBFBD><EFBFBD>"));
|
assertEquals("Wert \u00e4\u00f6\u00fc", cps.get("Schl\u00fcssel \u00e4\u00f6\u00fc"));
|
||||||
assertEquals("Wert <EFBFBD><EFBFBD><EFBFBD><EFBFBD>", cps.get("Schl\u00fcssel <EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
assertEquals("Wert \u00e4\u00f6\u00fc\u00d6", cps.get("Schl\u00fcssel \u00e4\u00f6\u00fc\u00d6"));
|
||||||
assertEquals(POSITIVE_INTEGER, cps.get("positive_Integer"));
|
assertEquals(POSITIVE_INTEGER, cps.get("positive_Integer"));
|
||||||
assertEquals(POSITIVE_LONG, cps.get("positive_Long"));
|
assertEquals(POSITIVE_LONG, cps.get("positive_Long"));
|
||||||
assertEquals(POSITIVE_DOUBLE, cps.get("positive_Double"));
|
assertEquals(POSITIVE_DOUBLE, cps.get("positive_Double"));
|
||||||
@ -665,7 +664,7 @@ public class TestWriteWellKnown extends TestCase
|
|||||||
*/
|
*/
|
||||||
public void testCustomerProperties()
|
public void testCustomerProperties()
|
||||||
{
|
{
|
||||||
final String KEY = "Schl\u00fcssel <EFBFBD>";
|
final String KEY = "Schl\u00fcssel \u00e4";
|
||||||
final String VALUE_1 = "Wert 1";
|
final String VALUE_1 = "Wert 1";
|
||||||
final String VALUE_2 = "Wert 2";
|
final String VALUE_2 = "Wert 2";
|
||||||
|
|
||||||
@ -705,7 +704,7 @@ public class TestWriteWellKnown extends TestCase
|
|||||||
{
|
{
|
||||||
final int ID_1 = 2;
|
final int ID_1 = 2;
|
||||||
final int ID_2 = 3;
|
final int ID_2 = 3;
|
||||||
final String NAME_1 = "Schl\u00fcssel <EFBFBD>";
|
final String NAME_1 = "Schl\u00fcssel \u00e4";
|
||||||
final String VALUE_1 = "Wert 1";
|
final String VALUE_1 = "Wert 1";
|
||||||
final Map dictionary = new HashMap();
|
final Map dictionary = new HashMap();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user