git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@780878 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_5-FINAL
@@ -1,89 +1,89 @@ | |||
/* ==================================================================== | |||
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.hssf.usermodel.examples; | |||
import org.apache.poi.hssf.usermodel.*; | |||
import org.apache.poi.hssf.util.HSSFColor; | |||
import java.io.IOException; | |||
import java.io.FileOutputStream; | |||
/** | |||
* Demonstrates how to create hyperlinks. | |||
* | |||
* @author Yegor Kozlov (yegor at apach.org) | |||
*/ | |||
public class Hyperlinks { | |||
public static void main(String[] args) throws IOException { | |||
HSSFWorkbook wb = new HSSFWorkbook(); | |||
//cell style for hyperlinks | |||
//by default hyperlinks are blue and underlined | |||
HSSFCellStyle hlink_style = wb.createCellStyle(); | |||
HSSFFont hlink_font = wb.createFont(); | |||
hlink_font.setUnderline(HSSFFont.U_SINGLE); | |||
hlink_font.setColor(HSSFColor.BLUE.index); | |||
hlink_style.setFont(hlink_font); | |||
HSSFCell cell; | |||
HSSFSheet sheet = wb.createSheet("Hyperlinks"); | |||
//URL | |||
cell = sheet.createRow(0).createCell(0); | |||
cell.setCellValue("URL Link"); | |||
HSSFHyperlink link = new HSSFHyperlink(HSSFHyperlink.LINK_URL); | |||
link.setAddress("http://poi.apache.org/"); | |||
cell.setHyperlink(link); | |||
cell.setCellStyle(hlink_style); | |||
//link to a file in the current directory | |||
cell = sheet.createRow(1).createCell(0); | |||
cell.setCellValue("File Link"); | |||
link = new HSSFHyperlink(HSSFHyperlink.LINK_FILE); | |||
link.setAddress("link1.xls"); | |||
cell.setHyperlink(link); | |||
cell.setCellStyle(hlink_style); | |||
//e-mail link | |||
cell = sheet.createRow(2).createCell(0); | |||
cell.setCellValue("Email Link"); | |||
link = new HSSFHyperlink(HSSFHyperlink.LINK_EMAIL); | |||
//note, if subject contains white spaces, make sure they are url-encoded | |||
link.setAddress("mailto:poi@apache.org?subject=Hyperlinks"); | |||
cell.setHyperlink(link); | |||
cell.setCellStyle(hlink_style); | |||
//link to a place in this workbook | |||
//create a target sheet and cell | |||
HSSFSheet sheet2 = wb.createSheet("Target Sheet"); | |||
sheet2.createRow(0).createCell(0).setCellValue("Target Cell"); | |||
cell = sheet.createRow(3).createCell(0); | |||
cell.setCellValue("Worksheet Link"); | |||
link = new HSSFHyperlink(HSSFHyperlink.LINK_DOCUMENT); | |||
link.setAddress("'Target Sheet'!A1"); | |||
cell.setHyperlink(link); | |||
cell.setCellStyle(hlink_style); | |||
FileOutputStream out = new FileOutputStream("hssf-links.xls"); | |||
wb.write(out); | |||
out.close(); | |||
} | |||
} | |||
/* ==================================================================== | |||
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.hssf.usermodel.examples; | |||
import org.apache.poi.hssf.usermodel.*; | |||
import org.apache.poi.hssf.util.HSSFColor; | |||
import java.io.IOException; | |||
import java.io.FileOutputStream; | |||
/** | |||
* Demonstrates how to create hyperlinks. | |||
* | |||
* @author Yegor Kozlov (yegor at apach.org) | |||
*/ | |||
public class Hyperlinks { | |||
public static void main(String[] args) throws IOException { | |||
HSSFWorkbook wb = new HSSFWorkbook(); | |||
//cell style for hyperlinks | |||
//by default hyperlinks are blue and underlined | |||
HSSFCellStyle hlink_style = wb.createCellStyle(); | |||
HSSFFont hlink_font = wb.createFont(); | |||
hlink_font.setUnderline(HSSFFont.U_SINGLE); | |||
hlink_font.setColor(HSSFColor.BLUE.index); | |||
hlink_style.setFont(hlink_font); | |||
HSSFCell cell; | |||
HSSFSheet sheet = wb.createSheet("Hyperlinks"); | |||
//URL | |||
cell = sheet.createRow(0).createCell(0); | |||
cell.setCellValue("URL Link"); | |||
HSSFHyperlink link = new HSSFHyperlink(HSSFHyperlink.LINK_URL); | |||
link.setAddress("http://poi.apache.org/"); | |||
cell.setHyperlink(link); | |||
cell.setCellStyle(hlink_style); | |||
//link to a file in the current directory | |||
cell = sheet.createRow(1).createCell(0); | |||
cell.setCellValue("File Link"); | |||
link = new HSSFHyperlink(HSSFHyperlink.LINK_FILE); | |||
link.setAddress("link1.xls"); | |||
cell.setHyperlink(link); | |||
cell.setCellStyle(hlink_style); | |||
//e-mail link | |||
cell = sheet.createRow(2).createCell(0); | |||
cell.setCellValue("Email Link"); | |||
link = new HSSFHyperlink(HSSFHyperlink.LINK_EMAIL); | |||
//note, if subject contains white spaces, make sure they are url-encoded | |||
link.setAddress("mailto:poi@apache.org?subject=Hyperlinks"); | |||
cell.setHyperlink(link); | |||
cell.setCellStyle(hlink_style); | |||
//link to a place in this workbook | |||
//create a target sheet and cell | |||
HSSFSheet sheet2 = wb.createSheet("Target Sheet"); | |||
sheet2.createRow(0).createCell(0).setCellValue("Target Cell"); | |||
cell = sheet.createRow(3).createCell(0); | |||
cell.setCellValue("Worksheet Link"); | |||
link = new HSSFHyperlink(HSSFHyperlink.LINK_DOCUMENT); | |||
link.setAddress("'Target Sheet'!A1"); | |||
cell.setHyperlink(link); | |||
cell.setCellStyle(hlink_style); | |||
FileOutputStream out = new FileOutputStream("hssf-links.xls"); | |||
wb.write(out); | |||
out.close(); | |||
} | |||
} |
@@ -1,324 +1,325 @@ | |||
/* ==================================================================== | |||
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.usermodel.*; | |||
import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||
import java.util.Map; | |||
import java.util.HashMap; | |||
import java.util.Calendar; | |||
import java.io.FileOutputStream; | |||
import java.text.SimpleDateFormat; | |||
/** | |||
* A business plan demo | |||
* Usage: | |||
* BusinessPlan -xls|xlsx | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
public class BusinessPlan { | |||
private static SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM"); | |||
private static final String[] titles = { | |||
"ID", "Project Name", "Owner", "Days", "Start", "End"}; | |||
//sample data to fill the sheet. | |||
private static final String[][] data = { | |||
{"1.0", "Marketing Research Tactical Plan", "J. Dow", "70", "9-Jul", null, | |||
"x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x"}, | |||
null, | |||
{"1.1", "Scope Definition Phase", "J. Dow", "10", "9-Jul", null, | |||
"x", "x", null, null, null, null, null, null, null, null, null}, | |||
{"1.1.1", "Define research objectives", "J. Dow", "3", "9-Jul", null, | |||
"x", null, null, null, null, null, null, null, null, null, null}, | |||
{"1.1.2", "Define research requirements", "S. Jones", "7", "10-Jul", null, | |||
"x", "x", null, null, null, null, null, null, null, null, null}, | |||
{"1.1.3", "Determine in-house resource or hire vendor", "J. Dow", "2", "15-Jul", null, | |||
"x", "x", null, null, null, null, null, null, null, null, null}, | |||
null, | |||
{"1.2", "Vendor Selection Phase", "J. Dow", "19", "19-Jul", null, | |||
null, "x", "x", "x", "x", null, null, null, null, null, null}, | |||
{"1.2.1", "Define vendor selection criteria", "J. Dow", "3", "19-Jul", null, | |||
null, "x", null, null, null, null, null, null, null, null, null}, | |||
{"1.2.2", "Develop vendor selection questionnaire", "S. Jones, T. Wates", "2", "22-Jul", null, | |||
null, "x", "x", null, null, null, null, null, null, null, null}, | |||
{"1.2.3", "Develop Statement of Work", "S. Jones", "4", "26-Jul", null, | |||
null, null, "x", "x", null, null, null, null, null, null, null}, | |||
{"1.2.4", "Evaluate proposal", "J. Dow, S. Jones", "4", "2-Aug", null, | |||
null, null, null, "x", "x", null, null, null, null, null, null}, | |||
{"1.2.5", "Select vendor", "J. Dow", "1", "6-Aug", null, | |||
null, null, null, null, "x", null, null, null, null, null, null}, | |||
null, | |||
{"1.3", "Research Phase", "G. Lee", "47", "9-Aug", null, | |||
null, null, null, null, "x", "x", "x", "x", "x", "x", "x"}, | |||
{"1.3.1", "Develop market research information needs questionnaire", "G. Lee", "2", "9-Aug", null, | |||
null, null, null, null, "x", null, null, null, null, null, null}, | |||
{"1.3.2", "Interview marketing group for market research needs", "G. Lee", "2", "11-Aug", null, | |||
null, null, null, null, "x", "x", null, null, null, null, null}, | |||
{"1.3.3", "Document information needs", "G. Lee, S. Jones", "1", "13-Aug", null, | |||
null, null, null, null, null, "x", null, null, null, null, null}, | |||
}; | |||
public static void main(String[] args) throws Exception { | |||
Workbook wb; | |||
if(args.length > 0 && args[0].equals("-xls")) wb = new HSSFWorkbook(); | |||
else wb = new XSSFWorkbook(); | |||
Map<String, CellStyle> styles = createStyles(wb); | |||
Sheet sheet = wb.createSheet("Business Plan"); | |||
//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(12.75f); | |||
for (int i = 0; i < titles.length; i++) { | |||
Cell cell = headerRow.createCell(i); | |||
cell.setCellValue(titles[i]); | |||
cell.setCellStyle(styles.get("header")); | |||
} | |||
//columns for 11 weeks starting from 9-Jul | |||
Calendar calendar = Calendar.getInstance(); | |||
int year = calendar.get(Calendar.YEAR); | |||
calendar.setTime(fmt.parse("9-Jul")); | |||
calendar.set(Calendar.YEAR, year); | |||
for (int i = 0; i < 11; i++) { | |||
Cell cell = headerRow.createCell(titles.length + i); | |||
cell.setCellValue(calendar); | |||
cell.setCellStyle(styles.get("header_date")); | |||
calendar.roll(Calendar.WEEK_OF_YEAR, true); | |||
} | |||
//freeze the first row | |||
sheet.createFreezePane(0, 1); | |||
Row row; | |||
Cell cell; | |||
int rownum = 1; | |||
for (int i = 0; i < data.length; i++, rownum++) { | |||
row = sheet.createRow(rownum); | |||
if(data[i] == null) continue; | |||
for (int j = 0; j < data[i].length; j++) { | |||
cell = row.createCell(j); | |||
String styleName; | |||
boolean isHeader = i == 0 || data[i-1] == null; | |||
switch(j){ | |||
case 0: | |||
if(isHeader) { | |||
styleName = "cell_b"; | |||
cell.setCellValue(Double.parseDouble(data[i][j])); | |||
} else { | |||
styleName = "cell_normal"; | |||
cell.setCellValue(data[i][j]); | |||
} | |||
break; | |||
case 1: | |||
if(isHeader) { | |||
styleName = i == 0 ? "cell_h" : "cell_bb"; | |||
} else { | |||
styleName = "cell_indented"; | |||
} | |||
cell.setCellValue(data[i][j]); | |||
break; | |||
case 2: | |||
styleName = isHeader ? "cell_b" : "cell_normal"; | |||
cell.setCellValue(data[i][j]); | |||
break; | |||
case 3: | |||
styleName = isHeader ? "cell_b_centered" : "cell_normal_centered"; | |||
cell.setCellValue(Integer.parseInt(data[i][j])); | |||
break; | |||
case 4: { | |||
calendar.setTime(fmt.parse(data[i][j])); | |||
calendar.set(Calendar.YEAR, year); | |||
cell.setCellValue(calendar); | |||
styleName = isHeader ? "cell_b_date" : "cell_normal_date"; | |||
break; | |||
} | |||
case 5: { | |||
int r = rownum + 1; | |||
String fmla = "IF(AND(D"+r+",E"+r+"),E"+r+"+D"+r+",\"\")"; | |||
cell.setCellFormula(fmla); | |||
styleName = isHeader ? "cell_bg" : "cell_g"; | |||
break; | |||
} | |||
default: | |||
styleName = data[i][j] != null ? "cell_blue" : "cell_normal"; | |||
} | |||
cell.setCellStyle(styles.get(styleName)); | |||
} | |||
} | |||
//group rows for each phase, row numbers are 0-based | |||
sheet.groupRow(4, 6); | |||
sheet.groupRow(9, 13); | |||
sheet.groupRow(16, 18); | |||
//set column widths, the width is measured in units of 1/256th of a character width | |||
sheet.setColumnWidth(0, 256*6); | |||
sheet.setColumnWidth(1, 256*33); | |||
sheet.setColumnWidth(2, 256*20); | |||
sheet.setZoom(3, 4); | |||
// Write the output to a file | |||
String file = "businessplan.xls"; | |||
if(wb instanceof XSSFWorkbook) file += "x"; | |||
FileOutputStream out = new FileOutputStream(file); | |||
wb.write(out); | |||
out.close(); | |||
} | |||
/** | |||
* create a library of cell styles | |||
*/ | |||
private static Map<String, CellStyle> createStyles(Workbook wb){ | |||
Map<String, CellStyle> styles = new HashMap<String, CellStyle>(); | |||
DataFormat df = wb.createDataFormat(); | |||
CellStyle style; | |||
Font headerFont = wb.createFont(); | |||
headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setFont(headerFont); | |||
styles.put("header", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setFont(headerFont); | |||
style.setDataFormat(df.getFormat("d-mmm")); | |||
styles.put("header_date", style); | |||
Font font1 = wb.createFont(); | |||
font1.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_LEFT); | |||
style.setFont(font1); | |||
styles.put("cell_b", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setFont(font1); | |||
styles.put("cell_b_centered", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(font1); | |||
style.setDataFormat(df.getFormat("d-mmm")); | |||
styles.put("cell_b_date", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(font1); | |||
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setDataFormat(df.getFormat("d-mmm")); | |||
styles.put("cell_g", style); | |||
Font font2 = wb.createFont(); | |||
font2.setColor(IndexedColors.BLUE.getIndex()); | |||
font2.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_LEFT); | |||
style.setFont(font2); | |||
styles.put("cell_bb", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(font1); | |||
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setDataFormat(df.getFormat("d-mmm")); | |||
styles.put("cell_bg", style); | |||
Font font3 = wb.createFont(); | |||
font3.setFontHeightInPoints((short)14); | |||
font3.setColor(IndexedColors.DARK_BLUE.getIndex()); | |||
font3.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_LEFT); | |||
style.setFont(font3); | |||
style.setWrapText(true); | |||
styles.put("cell_h", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_LEFT); | |||
style.setWrapText(true); | |||
styles.put("cell_normal", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setWrapText(true); | |||
styles.put("cell_normal_centered", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setWrapText(true); | |||
style.setDataFormat(df.getFormat("d-mmm")); | |||
styles.put("cell_normal_date", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_LEFT); | |||
style.setIndention((short)1); | |||
style.setWrapText(true); | |||
styles.put("cell_indented", style); | |||
style = createBorderedStyle(wb); | |||
style.setFillForegroundColor(IndexedColors.BLUE.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
styles.put("cell_blue", style); | |||
return styles; | |||
} | |||
private static CellStyle createBorderedStyle(Workbook wb){ | |||
CellStyle style = wb.createCellStyle(); | |||
style.setBorderRight(CellStyle.BORDER_THIN); | |||
style.setRightBorderColor(IndexedColors.BLACK.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_THIN); | |||
style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_THIN); | |||
style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_THIN); | |||
style.setTopBorderColor(IndexedColors.BLACK.getIndex()); | |||
return style; | |||
} | |||
} | |||
/* ==================================================================== | |||
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.usermodel.*; | |||
import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||
import java.util.Map; | |||
import java.util.HashMap; | |||
import java.util.Calendar; | |||
import java.io.FileOutputStream; | |||
import java.text.SimpleDateFormat; | |||
/** | |||
* A business plan demo | |||
* Usage: | |||
* BusinessPlan -xls|xlsx | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
public class BusinessPlan { | |||
private static SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM"); | |||
private static final String[] titles = { | |||
"ID", "Project Name", "Owner", "Days", "Start", "End"}; | |||
//sample data to fill the sheet. | |||
private static final String[][] data = { | |||
{"1.0", "Marketing Research Tactical Plan", "J. Dow", "70", "9-Jul", null, | |||
"x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x"}, | |||
null, | |||
{"1.1", "Scope Definition Phase", "J. Dow", "10", "9-Jul", null, | |||
"x", "x", null, null, null, null, null, null, null, null, null}, | |||
{"1.1.1", "Define research objectives", "J. Dow", "3", "9-Jul", null, | |||
"x", null, null, null, null, null, null, null, null, null, null}, | |||
{"1.1.2", "Define research requirements", "S. Jones", "7", "10-Jul", null, | |||
"x", "x", null, null, null, null, null, null, null, null, null}, | |||
{"1.1.3", "Determine in-house resource or hire vendor", "J. Dow", "2", "15-Jul", null, | |||
"x", "x", null, null, null, null, null, null, null, null, null}, | |||
null, | |||
{"1.2", "Vendor Selection Phase", "J. Dow", "19", "19-Jul", null, | |||
null, "x", "x", "x", "x", null, null, null, null, null, null}, | |||
{"1.2.1", "Define vendor selection criteria", "J. Dow", "3", "19-Jul", null, | |||
null, "x", null, null, null, null, null, null, null, null, null}, | |||
{"1.2.2", "Develop vendor selection questionnaire", "S. Jones, T. Wates", "2", "22-Jul", null, | |||
null, "x", "x", null, null, null, null, null, null, null, null}, | |||
{"1.2.3", "Develop Statement of Work", "S. Jones", "4", "26-Jul", null, | |||
null, null, "x", "x", null, null, null, null, null, null, null}, | |||
{"1.2.4", "Evaluate proposal", "J. Dow, S. Jones", "4", "2-Aug", null, | |||
null, null, null, "x", "x", null, null, null, null, null, null}, | |||
{"1.2.5", "Select vendor", "J. Dow", "1", "6-Aug", null, | |||
null, null, null, null, "x", null, null, null, null, null, null}, | |||
null, | |||
{"1.3", "Research Phase", "G. Lee", "47", "9-Aug", null, | |||
null, null, null, null, "x", "x", "x", "x", "x", "x", "x"}, | |||
{"1.3.1", "Develop market research information needs questionnaire", "G. Lee", "2", "9-Aug", null, | |||
null, null, null, null, "x", null, null, null, null, null, null}, | |||
{"1.3.2", "Interview marketing group for market research needs", "G. Lee", "2", "11-Aug", null, | |||
null, null, null, null, "x", "x", null, null, null, null, null}, | |||
{"1.3.3", "Document information needs", "G. Lee, S. Jones", "1", "13-Aug", null, | |||
null, null, null, null, null, "x", null, null, null, null, null}, | |||
}; | |||
public static void main(String[] args) throws Exception { | |||
Workbook wb; | |||
if(args.length > 0 && args[0].equals("-xls")) wb = new HSSFWorkbook(); | |||
else wb = new XSSFWorkbook(); | |||
Map<String, CellStyle> styles = createStyles(wb); | |||
Sheet sheet = wb.createSheet("Business Plan"); | |||
//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(12.75f); | |||
for (int i = 0; i < titles.length; i++) { | |||
Cell cell = headerRow.createCell(i); | |||
cell.setCellValue(titles[i]); | |||
cell.setCellStyle(styles.get("header")); | |||
} | |||
//columns for 11 weeks starting from 9-Jul | |||
Calendar calendar = Calendar.getInstance(); | |||
int year = calendar.get(Calendar.YEAR); | |||
calendar.setTime(fmt.parse("9-Jul")); | |||
calendar.set(Calendar.YEAR, year); | |||
for (int i = 0; i < 11; i++) { | |||
Cell cell = headerRow.createCell(titles.length + i); | |||
cell.setCellValue(calendar); | |||
cell.setCellStyle(styles.get("header_date")); | |||
calendar.roll(Calendar.WEEK_OF_YEAR, true); | |||
} | |||
//freeze the first row | |||
sheet.createFreezePane(0, 1); | |||
Row row; | |||
Cell cell; | |||
int rownum = 1; | |||
for (int i = 0; i < data.length; i++, rownum++) { | |||
row = sheet.createRow(rownum); | |||
if(data[i] == null) continue; | |||
for (int j = 0; j < data[i].length; j++) { | |||
cell = row.createCell(j); | |||
String styleName; | |||
boolean isHeader = i == 0 || data[i-1] == null; | |||
switch(j){ | |||
case 0: | |||
if(isHeader) { | |||
styleName = "cell_b"; | |||
cell.setCellValue(Double.parseDouble(data[i][j])); | |||
} else { | |||
styleName = "cell_normal"; | |||
cell.setCellValue(data[i][j]); | |||
} | |||
break; | |||
case 1: | |||
if(isHeader) { | |||
styleName = i == 0 ? "cell_h" : "cell_bb"; | |||
} else { | |||
styleName = "cell_indented"; | |||
} | |||
cell.setCellValue(data[i][j]); | |||
break; | |||
case 2: | |||
styleName = isHeader ? "cell_b" : "cell_normal"; | |||
cell.setCellValue(data[i][j]); | |||
break; | |||
case 3: | |||
styleName = isHeader ? "cell_b_centered" : "cell_normal_centered"; | |||
cell.setCellValue(Integer.parseInt(data[i][j])); | |||
break; | |||
case 4: { | |||
calendar.setTime(fmt.parse(data[i][j])); | |||
calendar.set(Calendar.YEAR, year); | |||
cell.setCellValue(calendar); | |||
styleName = isHeader ? "cell_b_date" : "cell_normal_date"; | |||
break; | |||
} | |||
case 5: { | |||
int r = rownum + 1; | |||
String fmla = "IF(AND(D"+r+",E"+r+"),E"+r+"+D"+r+",\"\")"; | |||
cell.setCellFormula(fmla); | |||
styleName = isHeader ? "cell_bg" : "cell_g"; | |||
break; | |||
} | |||
default: | |||
styleName = data[i][j] != null ? "cell_blue" : "cell_normal"; | |||
} | |||
cell.setCellStyle(styles.get(styleName)); | |||
} | |||
} | |||
//group rows for each phase, row numbers are 0-based | |||
sheet.groupRow(4, 6); | |||
sheet.groupRow(9, 13); | |||
sheet.groupRow(16, 18); | |||
//set column widths, the width is measured in units of 1/256th of a character width | |||
sheet.setColumnWidth(0, 256*6); | |||
sheet.setColumnWidth(1, 256*33); | |||
sheet.setColumnWidth(2, 256*20); | |||
sheet.setZoom(3, 4); | |||
// Write the output to a file | |||
String file = "businessplan.xls"; | |||
if(wb instanceof XSSFWorkbook) file += "x"; | |||
FileOutputStream out = new FileOutputStream(file); | |||
wb.write(out); | |||
out.close(); | |||
} | |||
/** | |||
* create a library of cell styles | |||
*/ | |||
private static Map<String, CellStyle> createStyles(Workbook wb){ | |||
Map<String, CellStyle> styles = new HashMap<String, CellStyle>(); | |||
DataFormat df = wb.createDataFormat(); | |||
CellStyle style; | |||
Font headerFont = wb.createFont(); | |||
headerFont.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setFont(headerFont); | |||
styles.put("header", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setFont(headerFont); | |||
style.setDataFormat(df.getFormat("d-mmm")); | |||
styles.put("header_date", style); | |||
Font font1 = wb.createFont(); | |||
font1.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_LEFT); | |||
style.setFont(font1); | |||
styles.put("cell_b", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setFont(font1); | |||
styles.put("cell_b_centered", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(font1); | |||
style.setDataFormat(df.getFormat("d-mmm")); | |||
styles.put("cell_b_date", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(font1); | |||
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setDataFormat(df.getFormat("d-mmm")); | |||
styles.put("cell_g", style); | |||
Font font2 = wb.createFont(); | |||
font2.setColor(IndexedColors.BLUE.getIndex()); | |||
font2.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_LEFT); | |||
style.setFont(font2); | |||
styles.put("cell_bb", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(font1); | |||
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setDataFormat(df.getFormat("d-mmm")); | |||
styles.put("cell_bg", style); | |||
Font font3 = wb.createFont(); | |||
font3.setFontHeightInPoints((short)14); | |||
font3.setColor(IndexedColors.DARK_BLUE.getIndex()); | |||
font3.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_LEFT); | |||
style.setFont(font3); | |||
style.setWrapText(true); | |||
styles.put("cell_h", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_LEFT); | |||
style.setWrapText(true); | |||
styles.put("cell_normal", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setWrapText(true); | |||
styles.put("cell_normal_centered", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setWrapText(true); | |||
style.setDataFormat(df.getFormat("d-mmm")); | |||
styles.put("cell_normal_date", style); | |||
style = createBorderedStyle(wb); | |||
style.setAlignment(CellStyle.ALIGN_LEFT); | |||
style.setIndention((short)1); | |||
style.setWrapText(true); | |||
styles.put("cell_indented", style); | |||
style = createBorderedStyle(wb); | |||
style.setFillForegroundColor(IndexedColors.BLUE.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
styles.put("cell_blue", style); | |||
return styles; | |||
} | |||
private static CellStyle createBorderedStyle(Workbook wb){ | |||
CellStyle style = wb.createCellStyle(); | |||
style.setBorderRight(CellStyle.BORDER_THIN); | |||
style.setRightBorderColor(IndexedColors.BLACK.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_THIN); | |||
style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_THIN); | |||
style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_THIN); | |||
style.setTopBorderColor(IndexedColors.BLACK.getIndex()); | |||
return style; | |||
} | |||
} |
@@ -1,242 +1,243 @@ | |||
/* ==================================================================== | |||
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; | |||
} | |||
} | |||
/* ==================================================================== | |||
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; | |||
} | |||
} |
@@ -1,304 +1,305 @@ | |||
/* ==================================================================== | |||
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.usermodel.*; | |||
import org.apache.poi.ss.util.CellRangeAddress; | |||
import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||
import java.util.Map; | |||
import java.util.HashMap; | |||
import java.io.FileOutputStream; | |||
/** | |||
* Simple Loan Calculator. Demonstrates advance usage of cell formulas and named ranges. | |||
* | |||
* Usage: | |||
* LoanCalculator -xls|xlsx | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
public class LoanCalculator { | |||
public static void main(String[] args) throws Exception { | |||
Workbook wb; | |||
if(args.length > 0 && args[0].equals("-xls")) wb = new HSSFWorkbook(); | |||
else wb = new XSSFWorkbook(); | |||
Map<String, CellStyle> styles = createStyles(wb); | |||
Sheet sheet = wb.createSheet("Loan Calculator"); | |||
sheet.setPrintGridlines(false); | |||
sheet.setDisplayGridlines(false); | |||
PrintSetup printSetup = sheet.getPrintSetup(); | |||
printSetup.setLandscape(true); | |||
sheet.setFitToPage(true); | |||
sheet.setHorizontallyCenter(true); | |||
sheet.setColumnWidth(0, 3*256); | |||
sheet.setColumnWidth(1, 3*256); | |||
sheet.setColumnWidth(2, 11*256); | |||
sheet.setColumnWidth(3, 14*256); | |||
sheet.setColumnWidth(4, 14*256); | |||
sheet.setColumnWidth(5, 14*256); | |||
sheet.setColumnWidth(6, 14*256); | |||
createNames(wb); | |||
Row titleRow = sheet.createRow(0); | |||
titleRow.setHeightInPoints(35); | |||
for (int i = 1; i <= 7; i++) { | |||
titleRow.createCell(i).setCellStyle(styles.get("title")); | |||
} | |||
Cell titleCell = titleRow.getCell(2); | |||
titleCell.setCellValue("Simple Loan Calculator"); | |||
sheet.addMergedRegion(CellRangeAddress.valueOf("$C$1:$H$1")); | |||
Row row = sheet.createRow(2); | |||
Cell cell = row.createCell(4); | |||
cell.setCellValue("Enter values"); | |||
cell.setCellStyle(styles.get("item_right")); | |||
row = sheet.createRow(3); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Loan amount"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellStyle(styles.get("input_$")); | |||
cell.setAsActiveCell(); | |||
row = sheet.createRow(4); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Annual interest rate"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellStyle(styles.get("input_%")); | |||
row = sheet.createRow(5); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Loan period in years"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellStyle(styles.get("input_i")); | |||
row = sheet.createRow(6); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Start date of loan"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellStyle(styles.get("input_d")); | |||
row = sheet.createRow(8); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Monthly payment"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellFormula("IF(Values_Entered,Monthly_Payment,\"\")"); | |||
cell.setCellStyle(styles.get("formula_$")); | |||
row = sheet.createRow(9); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Number of payments"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellFormula("IF(Values_Entered,Loan_Years*12,\"\")"); | |||
cell.setCellStyle(styles.get("formula_i")); | |||
row = sheet.createRow(10); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Total interest"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellFormula("IF(Values_Entered,Total_Cost-Loan_Amount,\"\")"); | |||
cell.setCellStyle(styles.get("formula_$")); | |||
row = sheet.createRow(11); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Total cost of loan"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellFormula("IF(Values_Entered,Monthly_Payment*Number_of_Payments,\"\")"); | |||
cell.setCellStyle(styles.get("formula_$")); | |||
// Write the output to a file | |||
String file = "loan-calculator.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>(); | |||
CellStyle style; | |||
Font titleFont = wb.createFont(); | |||
titleFont.setFontHeightInPoints((short)14); | |||
titleFont.setFontName("Trebuchet MS"); | |||
style = wb.createCellStyle(); | |||
style.setFont(titleFont); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
styles.put("title", style); | |||
Font itemFont = wb.createFont(); | |||
itemFont.setFontHeightInPoints((short)9); | |||
itemFont.setFontName("Trebuchet MS"); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_LEFT); | |||
style.setFont(itemFont); | |||
styles.put("item_left", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(itemFont); | |||
styles.put("item_right", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(itemFont); | |||
style.setBorderRight(CellStyle.BORDER_DOTTED); | |||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_DOTTED); | |||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_DOTTED); | |||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setDataFormat(wb.createDataFormat().getFormat("_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)")); | |||
styles.put("input_$", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(itemFont); | |||
style.setBorderRight(CellStyle.BORDER_DOTTED); | |||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_DOTTED); | |||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_DOTTED); | |||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setDataFormat(wb.createDataFormat().getFormat("0.000%")); | |||
styles.put("input_%", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(itemFont); | |||
style.setBorderRight(CellStyle.BORDER_DOTTED); | |||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_DOTTED); | |||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_DOTTED); | |||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setDataFormat(wb.createDataFormat().getFormat("0")); | |||
styles.put("input_i", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setFont(itemFont); | |||
style.setDataFormat(wb.createDataFormat().getFormat("m/d/yy")); | |||
styles.put("input_d", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(itemFont); | |||
style.setBorderRight(CellStyle.BORDER_DOTTED); | |||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_DOTTED); | |||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_DOTTED); | |||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setDataFormat(wb.createDataFormat().getFormat("$##,##0.00")); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
styles.put("formula_$", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(itemFont); | |||
style.setBorderRight(CellStyle.BORDER_DOTTED); | |||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_DOTTED); | |||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_DOTTED); | |||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setDataFormat(wb.createDataFormat().getFormat("0")); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
styles.put("formula_i", style); | |||
return styles; | |||
} | |||
//define named ranges for the inputs and formulas | |||
public static void createNames(Workbook wb){ | |||
Name name; | |||
name = wb.createName(); | |||
name.setNameName("Interest_Rate"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$5"); | |||
name = wb.createName(); | |||
name.setNameName("Loan_Amount"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$4"); | |||
name = wb.createName(); | |||
name.setNameName("Loan_Start"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$7"); | |||
name = wb.createName(); | |||
name.setNameName("Loan_Years"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$6"); | |||
name = wb.createName(); | |||
name.setNameName("Number_of_Payments"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$10"); | |||
name = wb.createName(); | |||
name.setNameName("Monthly_Payment"); | |||
name.setRefersToFormula("-PMT(Interest_Rate/12,Number_of_Payments,Loan_Amount)"); | |||
name = wb.createName(); | |||
name.setNameName("Total_Cost"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$12"); | |||
name = wb.createName(); | |||
name.setNameName("Total_Interest"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$11"); | |||
name = wb.createName(); | |||
name.setNameName("Values_Entered"); | |||
name.setRefersToFormula("IF(Loan_Amount*Interest_Rate*Loan_Years*Loan_Start>0,1,0)"); | |||
} | |||
} | |||
/* ==================================================================== | |||
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.usermodel.*; | |||
import org.apache.poi.ss.util.CellRangeAddress; | |||
import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||
import java.util.Map; | |||
import java.util.HashMap; | |||
import java.io.FileOutputStream; | |||
/** | |||
* Simple Loan Calculator. Demonstrates advance usage of cell formulas and named ranges. | |||
* | |||
* Usage: | |||
* LoanCalculator -xls|xlsx | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
public class LoanCalculator { | |||
public static void main(String[] args) throws Exception { | |||
Workbook wb; | |||
if(args.length > 0 && args[0].equals("-xls")) wb = new HSSFWorkbook(); | |||
else wb = new XSSFWorkbook(); | |||
Map<String, CellStyle> styles = createStyles(wb); | |||
Sheet sheet = wb.createSheet("Loan Calculator"); | |||
sheet.setPrintGridlines(false); | |||
sheet.setDisplayGridlines(false); | |||
PrintSetup printSetup = sheet.getPrintSetup(); | |||
printSetup.setLandscape(true); | |||
sheet.setFitToPage(true); | |||
sheet.setHorizontallyCenter(true); | |||
sheet.setColumnWidth(0, 3*256); | |||
sheet.setColumnWidth(1, 3*256); | |||
sheet.setColumnWidth(2, 11*256); | |||
sheet.setColumnWidth(3, 14*256); | |||
sheet.setColumnWidth(4, 14*256); | |||
sheet.setColumnWidth(5, 14*256); | |||
sheet.setColumnWidth(6, 14*256); | |||
createNames(wb); | |||
Row titleRow = sheet.createRow(0); | |||
titleRow.setHeightInPoints(35); | |||
for (int i = 1; i <= 7; i++) { | |||
titleRow.createCell(i).setCellStyle(styles.get("title")); | |||
} | |||
Cell titleCell = titleRow.getCell(2); | |||
titleCell.setCellValue("Simple Loan Calculator"); | |||
sheet.addMergedRegion(CellRangeAddress.valueOf("$C$1:$H$1")); | |||
Row row = sheet.createRow(2); | |||
Cell cell = row.createCell(4); | |||
cell.setCellValue("Enter values"); | |||
cell.setCellStyle(styles.get("item_right")); | |||
row = sheet.createRow(3); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Loan amount"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellStyle(styles.get("input_$")); | |||
cell.setAsActiveCell(); | |||
row = sheet.createRow(4); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Annual interest rate"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellStyle(styles.get("input_%")); | |||
row = sheet.createRow(5); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Loan period in years"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellStyle(styles.get("input_i")); | |||
row = sheet.createRow(6); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Start date of loan"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellStyle(styles.get("input_d")); | |||
row = sheet.createRow(8); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Monthly payment"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellFormula("IF(Values_Entered,Monthly_Payment,\"\")"); | |||
cell.setCellStyle(styles.get("formula_$")); | |||
row = sheet.createRow(9); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Number of payments"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellFormula("IF(Values_Entered,Loan_Years*12,\"\")"); | |||
cell.setCellStyle(styles.get("formula_i")); | |||
row = sheet.createRow(10); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Total interest"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellFormula("IF(Values_Entered,Total_Cost-Loan_Amount,\"\")"); | |||
cell.setCellStyle(styles.get("formula_$")); | |||
row = sheet.createRow(11); | |||
cell = row.createCell(2); | |||
cell.setCellValue("Total cost of loan"); | |||
cell.setCellStyle(styles.get("item_left")); | |||
cell = row.createCell(4); | |||
cell.setCellFormula("IF(Values_Entered,Monthly_Payment*Number_of_Payments,\"\")"); | |||
cell.setCellStyle(styles.get("formula_$")); | |||
// Write the output to a file | |||
String file = "loan-calculator.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>(); | |||
CellStyle style; | |||
Font titleFont = wb.createFont(); | |||
titleFont.setFontHeightInPoints((short)14); | |||
titleFont.setFontName("Trebuchet MS"); | |||
style = wb.createCellStyle(); | |||
style.setFont(titleFont); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
styles.put("title", style); | |||
Font itemFont = wb.createFont(); | |||
itemFont.setFontHeightInPoints((short)9); | |||
itemFont.setFontName("Trebuchet MS"); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_LEFT); | |||
style.setFont(itemFont); | |||
styles.put("item_left", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(itemFont); | |||
styles.put("item_right", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(itemFont); | |||
style.setBorderRight(CellStyle.BORDER_DOTTED); | |||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_DOTTED); | |||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_DOTTED); | |||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setDataFormat(wb.createDataFormat().getFormat("_($* #,##0.00_);_($* (#,##0.00);_($* \"-\"??_);_(@_)")); | |||
styles.put("input_$", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(itemFont); | |||
style.setBorderRight(CellStyle.BORDER_DOTTED); | |||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_DOTTED); | |||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_DOTTED); | |||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setDataFormat(wb.createDataFormat().getFormat("0.000%")); | |||
styles.put("input_%", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(itemFont); | |||
style.setBorderRight(CellStyle.BORDER_DOTTED); | |||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_DOTTED); | |||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_DOTTED); | |||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setDataFormat(wb.createDataFormat().getFormat("0")); | |||
styles.put("input_i", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setFont(itemFont); | |||
style.setDataFormat(wb.createDataFormat().getFormat("m/d/yy")); | |||
styles.put("input_d", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(itemFont); | |||
style.setBorderRight(CellStyle.BORDER_DOTTED); | |||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_DOTTED); | |||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_DOTTED); | |||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setDataFormat(wb.createDataFormat().getFormat("$##,##0.00")); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
styles.put("formula_$", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_RIGHT); | |||
style.setFont(itemFont); | |||
style.setBorderRight(CellStyle.BORDER_DOTTED); | |||
style.setRightBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_DOTTED); | |||
style.setLeftBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_DOTTED); | |||
style.setTopBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setDataFormat(wb.createDataFormat().getFormat("0")); | |||
style.setBorderBottom(CellStyle.BORDER_DOTTED); | |||
style.setBottomBorderColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
styles.put("formula_i", style); | |||
return styles; | |||
} | |||
//define named ranges for the inputs and formulas | |||
public static void createNames(Workbook wb){ | |||
Name name; | |||
name = wb.createName(); | |||
name.setNameName("Interest_Rate"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$5"); | |||
name = wb.createName(); | |||
name.setNameName("Loan_Amount"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$4"); | |||
name = wb.createName(); | |||
name.setNameName("Loan_Start"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$7"); | |||
name = wb.createName(); | |||
name.setNameName("Loan_Years"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$6"); | |||
name = wb.createName(); | |||
name.setNameName("Number_of_Payments"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$10"); | |||
name = wb.createName(); | |||
name.setNameName("Monthly_Payment"); | |||
name.setRefersToFormula("-PMT(Interest_Rate/12,Number_of_Payments,Loan_Amount)"); | |||
name = wb.createName(); | |||
name.setNameName("Total_Cost"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$12"); | |||
name = wb.createName(); | |||
name.setNameName("Total_Interest"); | |||
name.setRefersToFormula("'Loan Calculator'!$E$11"); | |||
name = wb.createName(); | |||
name.setNameName("Values_Entered"); | |||
name.setRefersToFormula("IF(Loan_Amount*Interest_Rate*Loan_Years*Loan_Start>0,1,0)"); | |||
} | |||
} |
@@ -1,219 +1,220 @@ | |||
/* ==================================================================== | |||
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.hssf.usermodel.HSSFWorkbook; | |||
import java.util.Map; | |||
import java.util.HashMap; | |||
import java.io.FileOutputStream; | |||
/** | |||
* A weekly timesheet created using Apache POI. | |||
* Usage: | |||
* TimesheetDemo -xls|xlsx | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
public class TimesheetDemo { | |||
private static final String[] titles = { | |||
"Person", "ID", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", | |||
"Total\nHrs", "Overtime\nHrs", "Regular\nHrs" | |||
}; | |||
private static Object[][] sample_data = { | |||
{"Yegor Kozlov", "YK", 5.0, 8.0, 10.0, 5.0, 5.0, 7.0, 6.0}, | |||
{"Gisella Bronzetti", "GB", 4.0, 3.0, 1.0, 3.5, null, null, 4.0}, | |||
}; | |||
public static void main(String[] args) throws Exception { | |||
Workbook wb; | |||
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("Timesheet"); | |||
PrintSetup printSetup = sheet.getPrintSetup(); | |||
printSetup.setLandscape(true); | |||
sheet.setFitToPage(true); | |||
sheet.setHorizontallyCenter(true); | |||
//title row | |||
Row titleRow = sheet.createRow(0); | |||
titleRow.setHeightInPoints(45); | |||
Cell titleCell = titleRow.createCell(0); | |||
titleCell.setCellValue("Weekly Timesheet"); | |||
titleCell.setCellStyle(styles.get("title")); | |||
sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$L$1")); | |||
//header row | |||
Row headerRow = sheet.createRow(1); | |||
headerRow.setHeightInPoints(40); | |||
Cell headerCell; | |||
for (int i = 0; i < titles.length; i++) { | |||
headerCell = headerRow.createCell(i); | |||
headerCell.setCellValue(titles[i]); | |||
headerCell.setCellStyle(styles.get("header")); | |||
} | |||
int rownum = 2; | |||
for (int i = 0; i < 10; i++) { | |||
Row row = sheet.createRow(rownum++); | |||
for (int j = 0; j < titles.length; j++) { | |||
Cell cell = row.createCell(j); | |||
if(j == 9){ | |||
//the 10th cell contains sum over week days, e.g. SUM(C3:I3) | |||
String ref = "C" +rownum+ ":I" + rownum; | |||
cell.setCellFormula("SUM("+ref+")"); | |||
cell.setCellStyle(styles.get("formula")); | |||
} else if (j == 11){ | |||
cell.setCellFormula("J" +rownum+ "-K" + rownum); | |||
cell.setCellStyle(styles.get("formula")); | |||
} else { | |||
cell.setCellStyle(styles.get("cell")); | |||
} | |||
} | |||
} | |||
//row with totals below | |||
Row sumRow = sheet.createRow(rownum++); | |||
sumRow.setHeightInPoints(35); | |||
Cell cell; | |||
cell = sumRow.createCell(0); | |||
cell.setCellStyle(styles.get("formula")); | |||
cell = sumRow.createCell(1); | |||
cell.setCellValue("Total Hrs:"); | |||
cell.setCellStyle(styles.get("formula")); | |||
for (int j = 2; j < 12; j++) { | |||
cell = sumRow.createCell(j); | |||
String ref = (char)('A' + j) + "3:" + (char)('A' + j) + "12"; | |||
cell.setCellFormula("SUM(" + ref + ")"); | |||
if(j >= 9) cell.setCellStyle(styles.get("formula_2")); | |||
else cell.setCellStyle(styles.get("formula")); | |||
} | |||
rownum++; | |||
sumRow = sheet.createRow(rownum++); | |||
sumRow.setHeightInPoints(25); | |||
cell = sumRow.createCell(0); | |||
cell.setCellValue("Total Regular Hours"); | |||
cell.setCellStyle(styles.get("formula")); | |||
cell = sumRow.createCell(1); | |||
cell.setCellFormula("L13"); | |||
cell.setCellStyle(styles.get("formula_2")); | |||
sumRow = sheet.createRow(rownum++); | |||
sumRow.setHeightInPoints(25); | |||
cell = sumRow.createCell(0); | |||
cell.setCellValue("Total Overtime Hours"); | |||
cell.setCellStyle(styles.get("formula")); | |||
cell = sumRow.createCell(1); | |||
cell.setCellFormula("K13"); | |||
cell.setCellStyle(styles.get("formula_2")); | |||
//set sample data | |||
for (int i = 0; i < sample_data.length; i++) { | |||
Row row = sheet.getRow(2 + i); | |||
for (int j = 0; j < sample_data[i].length; j++) { | |||
if(sample_data[i][j] == null) continue; | |||
if(sample_data[i][j] instanceof String) { | |||
row.getCell(j).setCellValue((String)sample_data[i][j]); | |||
} else { | |||
row.getCell(j).setCellValue((Double)sample_data[i][j]); | |||
} | |||
} | |||
} | |||
//finally set column widths, the width is measured in units of 1/256th of a character width | |||
sheet.setColumnWidth(0, 30*256); //30 characters wide | |||
for (int i = 2; i < 9; i++) { | |||
sheet.setColumnWidth(i, 6*256); //6 characters wide | |||
} | |||
sheet.setColumnWidth(10, 10*256); //10 characters wide | |||
// Write the output to a file | |||
String file = "timesheet.xls"; | |||
if(wb instanceof XSSFWorkbook) file += "x"; | |||
FileOutputStream out = new FileOutputStream(file); | |||
wb.write(out); | |||
out.close(); | |||
} | |||
/** | |||
* Create a library of cell styles | |||
*/ | |||
private static Map<String, CellStyle> createStyles(Workbook wb){ | |||
Map<String, CellStyle> styles = new HashMap<String, CellStyle>(); | |||
CellStyle style; | |||
Font titleFont = wb.createFont(); | |||
titleFont.setFontHeightInPoints((short)18); | |||
titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
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)11); | |||
monthFont.setColor(IndexedColors.WHITE.getIndex()); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); | |||
style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setFont(monthFont); | |||
style.setWrapText(true); | |||
styles.put("header", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setWrapText(true); | |||
style.setBorderRight(CellStyle.BORDER_THIN); | |||
style.setRightBorderColor(IndexedColors.BLACK.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_THIN); | |||
style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_THIN); | |||
style.setTopBorderColor(IndexedColors.BLACK.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_THIN); | |||
style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); | |||
styles.put("cell", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); | |||
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setDataFormat(wb.createDataFormat().getFormat("0.00")); | |||
styles.put("formula", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); | |||
style.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setDataFormat(wb.createDataFormat().getFormat("0.00")); | |||
styles.put("formula_2", style); | |||
return styles; | |||
} | |||
} | |||
/* ==================================================================== | |||
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.hssf.usermodel.HSSFWorkbook; | |||
import java.util.Map; | |||
import java.util.HashMap; | |||
import java.io.FileOutputStream; | |||
/** | |||
* A weekly timesheet created using Apache POI. | |||
* Usage: | |||
* TimesheetDemo -xls|xlsx | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
public class TimesheetDemo { | |||
private static final String[] titles = { | |||
"Person", "ID", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", | |||
"Total\nHrs", "Overtime\nHrs", "Regular\nHrs" | |||
}; | |||
private static Object[][] sample_data = { | |||
{"Yegor Kozlov", "YK", 5.0, 8.0, 10.0, 5.0, 5.0, 7.0, 6.0}, | |||
{"Gisella Bronzetti", "GB", 4.0, 3.0, 1.0, 3.5, null, null, 4.0}, | |||
}; | |||
public static void main(String[] args) throws Exception { | |||
Workbook wb; | |||
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("Timesheet"); | |||
PrintSetup printSetup = sheet.getPrintSetup(); | |||
printSetup.setLandscape(true); | |||
sheet.setFitToPage(true); | |||
sheet.setHorizontallyCenter(true); | |||
//title row | |||
Row titleRow = sheet.createRow(0); | |||
titleRow.setHeightInPoints(45); | |||
Cell titleCell = titleRow.createCell(0); | |||
titleCell.setCellValue("Weekly Timesheet"); | |||
titleCell.setCellStyle(styles.get("title")); | |||
sheet.addMergedRegion(CellRangeAddress.valueOf("$A$1:$L$1")); | |||
//header row | |||
Row headerRow = sheet.createRow(1); | |||
headerRow.setHeightInPoints(40); | |||
Cell headerCell; | |||
for (int i = 0; i < titles.length; i++) { | |||
headerCell = headerRow.createCell(i); | |||
headerCell.setCellValue(titles[i]); | |||
headerCell.setCellStyle(styles.get("header")); | |||
} | |||
int rownum = 2; | |||
for (int i = 0; i < 10; i++) { | |||
Row row = sheet.createRow(rownum++); | |||
for (int j = 0; j < titles.length; j++) { | |||
Cell cell = row.createCell(j); | |||
if(j == 9){ | |||
//the 10th cell contains sum over week days, e.g. SUM(C3:I3) | |||
String ref = "C" +rownum+ ":I" + rownum; | |||
cell.setCellFormula("SUM("+ref+")"); | |||
cell.setCellStyle(styles.get("formula")); | |||
} else if (j == 11){ | |||
cell.setCellFormula("J" +rownum+ "-K" + rownum); | |||
cell.setCellStyle(styles.get("formula")); | |||
} else { | |||
cell.setCellStyle(styles.get("cell")); | |||
} | |||
} | |||
} | |||
//row with totals below | |||
Row sumRow = sheet.createRow(rownum++); | |||
sumRow.setHeightInPoints(35); | |||
Cell cell; | |||
cell = sumRow.createCell(0); | |||
cell.setCellStyle(styles.get("formula")); | |||
cell = sumRow.createCell(1); | |||
cell.setCellValue("Total Hrs:"); | |||
cell.setCellStyle(styles.get("formula")); | |||
for (int j = 2; j < 12; j++) { | |||
cell = sumRow.createCell(j); | |||
String ref = (char)('A' + j) + "3:" + (char)('A' + j) + "12"; | |||
cell.setCellFormula("SUM(" + ref + ")"); | |||
if(j >= 9) cell.setCellStyle(styles.get("formula_2")); | |||
else cell.setCellStyle(styles.get("formula")); | |||
} | |||
rownum++; | |||
sumRow = sheet.createRow(rownum++); | |||
sumRow.setHeightInPoints(25); | |||
cell = sumRow.createCell(0); | |||
cell.setCellValue("Total Regular Hours"); | |||
cell.setCellStyle(styles.get("formula")); | |||
cell = sumRow.createCell(1); | |||
cell.setCellFormula("L13"); | |||
cell.setCellStyle(styles.get("formula_2")); | |||
sumRow = sheet.createRow(rownum++); | |||
sumRow.setHeightInPoints(25); | |||
cell = sumRow.createCell(0); | |||
cell.setCellValue("Total Overtime Hours"); | |||
cell.setCellStyle(styles.get("formula")); | |||
cell = sumRow.createCell(1); | |||
cell.setCellFormula("K13"); | |||
cell.setCellStyle(styles.get("formula_2")); | |||
//set sample data | |||
for (int i = 0; i < sample_data.length; i++) { | |||
Row row = sheet.getRow(2 + i); | |||
for (int j = 0; j < sample_data[i].length; j++) { | |||
if(sample_data[i][j] == null) continue; | |||
if(sample_data[i][j] instanceof String) { | |||
row.getCell(j).setCellValue((String)sample_data[i][j]); | |||
} else { | |||
row.getCell(j).setCellValue((Double)sample_data[i][j]); | |||
} | |||
} | |||
} | |||
//finally set column widths, the width is measured in units of 1/256th of a character width | |||
sheet.setColumnWidth(0, 30*256); //30 characters wide | |||
for (int i = 2; i < 9; i++) { | |||
sheet.setColumnWidth(i, 6*256); //6 characters wide | |||
} | |||
sheet.setColumnWidth(10, 10*256); //10 characters wide | |||
// Write the output to a file | |||
String file = "timesheet.xls"; | |||
if(wb instanceof XSSFWorkbook) file += "x"; | |||
FileOutputStream out = new FileOutputStream(file); | |||
wb.write(out); | |||
out.close(); | |||
} | |||
/** | |||
* Create a library of cell styles | |||
*/ | |||
private static Map<String, CellStyle> createStyles(Workbook wb){ | |||
Map<String, CellStyle> styles = new HashMap<String, CellStyle>(); | |||
CellStyle style; | |||
Font titleFont = wb.createFont(); | |||
titleFont.setFontHeightInPoints((short)18); | |||
titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD); | |||
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)11); | |||
monthFont.setColor(IndexedColors.WHITE.getIndex()); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); | |||
style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setFont(monthFont); | |||
style.setWrapText(true); | |||
styles.put("header", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setWrapText(true); | |||
style.setBorderRight(CellStyle.BORDER_THIN); | |||
style.setRightBorderColor(IndexedColors.BLACK.getIndex()); | |||
style.setBorderLeft(CellStyle.BORDER_THIN); | |||
style.setLeftBorderColor(IndexedColors.BLACK.getIndex()); | |||
style.setBorderTop(CellStyle.BORDER_THIN); | |||
style.setTopBorderColor(IndexedColors.BLACK.getIndex()); | |||
style.setBorderBottom(CellStyle.BORDER_THIN); | |||
style.setBottomBorderColor(IndexedColors.BLACK.getIndex()); | |||
styles.put("cell", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); | |||
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setDataFormat(wb.createDataFormat().getFormat("0.00")); | |||
styles.put("formula", style); | |||
style = wb.createCellStyle(); | |||
style.setAlignment(CellStyle.ALIGN_CENTER); | |||
style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); | |||
style.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex()); | |||
style.setFillPattern(CellStyle.SOLID_FOREGROUND); | |||
style.setDataFormat(wb.createDataFormat().getFormat("0.00")); | |||
styles.put("formula_2", style); | |||
return styles; | |||
} | |||
} |
@@ -1,29 +1,29 @@ | |||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | |||
<!-- | |||
==================================================================== | |||
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. | |||
==================================================================== | |||
--> | |||
<html> | |||
<head> | |||
</head> | |||
<body bgcolor="white"> | |||
This package contains common internal POI code for manipulating formulas. | |||
Client applications should not refer to these classes directly. | |||
</body> | |||
</html> | |||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | |||
<!-- | |||
==================================================================== | |||
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. | |||
==================================================================== | |||
--> | |||
<html> | |||
<head> | |||
</head> | |||
<body bgcolor="white"> | |||
This package contains common internal POI code for manipulating formulas. | |||
Client applications should not refer to these classes directly. | |||
</body> | |||
</html> |
@@ -1,285 +1,285 @@ | |||
# 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. | |||
# Created by (org.apache.poi.hssf.record.formula.function.ExcelFileFormatDocFunctionExtractor) | |||
# from source file 'excelfileformat.odt' (size=356107, md5=0x8f789cb6e75594caf068f8e193004ef4) | |||
# | |||
#Columns: (index, name, minParams, maxParams, returnClass, paramClasses, isVolatile, hasFootnote ) | |||
# Built-In Sheet Functions in BIFF2 | |||
0 COUNT 0 30 V R | |||
1 IF 2 3 R V R R | |||
2 ISNA 1 1 V V | |||
3 ISERROR 1 1 V V | |||
4 SUM 0 30 V R | |||
5 AVERAGE 1 30 V R | |||
6 MIN 1 30 V R | |||
7 MAX 1 30 V R | |||
8 ROW 0 1 V R | |||
9 COLUMN 0 1 V R | |||
10 NA 0 0 V - | |||
11 NPV 2 30 V V R | |||
12 STDEV 1 30 V R | |||
13 DOLLAR 1 2 V V V | |||
14 FIXED 2 2 V V V x | |||
15 SIN 1 1 V V | |||
16 COS 1 1 V V | |||
17 TAN 1 1 V V | |||
18 ATAN 1 1 V V | |||
19 PI 0 0 V - | |||
20 SQRT 1 1 V V | |||
21 EXP 1 1 V V | |||
22 LN 1 1 V V | |||
23 LOG10 1 1 V V | |||
24 ABS 1 1 V V | |||
25 INT 1 1 V V | |||
26 SIGN 1 1 V V | |||
27 ROUND 2 2 V V V | |||
28 LOOKUP 2 3 V V R R | |||
29 INDEX 2 4 R R V V V | |||
30 REPT 2 2 V V V | |||
31 MID 3 3 V V V V | |||
32 LEN 1 1 V V | |||
33 VALUE 1 1 V V | |||
34 TRUE 0 0 V - | |||
35 FALSE 0 0 V - | |||
36 AND 1 30 V R | |||
37 OR 1 30 V R | |||
38 NOT 1 1 V V | |||
39 MOD 2 2 V V V | |||
40 DCOUNT 3 3 V R R R | |||
41 DSUM 3 3 V R R R | |||
42 DAVERAGE 3 3 V R R R | |||
43 DMIN 3 3 V R R R | |||
44 DMAX 3 3 V R R R | |||
45 DSTDEV 3 3 V R R R | |||
46 VAR 1 30 V R | |||
47 DVAR 3 3 V R R R | |||
48 TEXT 2 2 V V V | |||
49 LINEST 1 2 A R R x | |||
50 TREND 1 3 A R R R x | |||
51 LOGEST 1 2 A R R x | |||
52 GROWTH 1 3 A R R R x | |||
56 PV 3 5 V V V V V V | |||
# Built-In Sheet Functions in BIFF2 | |||
57 FV 3 5 V V V V V V | |||
58 NPER 3 5 V V V V V V | |||
59 PMT 3 5 V V V V V V | |||
60 RATE 3 6 V V V V V V V | |||
61 MIRR 3 3 V R V V | |||
62 IRR 1 2 V R V | |||
63 RAND 0 0 V - x | |||
64 MATCH 2 3 V V R R | |||
65 DATE 3 3 V V V V | |||
66 TIME 3 3 V V V V | |||
67 DAY 1 1 V V | |||
68 MONTH 1 1 V V | |||
69 YEAR 1 1 V V | |||
70 WEEKDAY 1 1 V V x | |||
71 HOUR 1 1 V V | |||
72 MINUTE 1 1 V V | |||
73 SECOND 1 1 V V | |||
74 NOW 0 0 V - x | |||
75 AREAS 1 1 V R | |||
76 ROWS 1 1 V R | |||
77 COLUMNS 1 1 V R | |||
78 OFFSET 3 5 R R V V V V x | |||
82 SEARCH 2 3 V V V V | |||
83 TRANSPOSE 1 1 A A | |||
86 TYPE 1 1 V V | |||
97 ATAN2 2 2 V V V | |||
98 ASIN 1 1 V V | |||
99 ACOS 1 1 V V | |||
100 CHOOSE 2 30 R V R | |||
101 HLOOKUP 3 3 V V R R x | |||
102 VLOOKUP 3 3 V V R R x | |||
105 ISREF 1 1 V R | |||
109 LOG 1 2 V V V | |||
111 CHAR 1 1 V V | |||
112 LOWER 1 1 V V | |||
113 UPPER 1 1 V V | |||
114 PROPER 1 1 V V | |||
115 LEFT 1 2 V V V | |||
116 RIGHT 1 2 V V V | |||
117 EXACT 2 2 V V V | |||
118 TRIM 1 1 V V | |||
119 REPLACE 4 4 V V V V V | |||
120 SUBSTITUTE 3 4 V V V V V | |||
121 CODE 1 1 V V | |||
124 FIND 2 3 V V V V | |||
125 CELL 1 2 V V R x | |||
126 ISERR 1 1 V V | |||
127 ISTEXT 1 1 V V | |||
128 ISNUMBER 1 1 V V | |||
129 ISBLANK 1 1 V V | |||
130 T 1 1 V R | |||
131 N 1 1 V R | |||
140 DATEVALUE 1 1 V V | |||
141 TIMEVALUE 1 1 V V | |||
142 SLN 3 3 V V V V | |||
143 SYD 4 4 V V V V V | |||
144 DDB 4 5 V V V V V V | |||
148 INDIRECT 1 2 R V V x | |||
162 CLEAN 1 1 V V | |||
163 MDETERM 1 1 V A | |||
164 MINVERSE 1 1 A A | |||
165 MMULT 2 2 A A A | |||
167 IPMT 4 6 V V V V V V V | |||
168 PPMT 4 6 V V V V V V V | |||
169 COUNTA 0 30 V R | |||
183 PRODUCT 0 30 V R | |||
184 FACT 1 1 V V | |||
189 DPRODUCT 3 3 V R R R | |||
190 ISNONTEXT 1 1 V V | |||
193 STDEVP 1 30 V R | |||
194 VARP 1 30 V R | |||
195 DSTDEVP 3 3 V R R R | |||
196 DVARP 3 3 V R R R | |||
197 TRUNC 1 1 V V x | |||
198 ISLOGICAL 1 1 V V | |||
199 DCOUNTA 3 3 V R R R | |||
# New Built-In Sheet Functions in BIFF3 | |||
49 LINEST 1 4 A R R V V x | |||
50 TREND 1 4 A R R R V x | |||
51 LOGEST 1 4 A R R V V x | |||
52 GROWTH 1 4 A R R R V x | |||
197 TRUNC 1 2 V V V x | |||
204 YEN 1 2 V V V x | |||
205 FINDB 2 3 V V V V | |||
206 SEARCHB 2 3 V V V V | |||
207 REPLACEB 4 4 V V V V V | |||
208 LEFTB 1 2 V V V | |||
209 RIGHTB 1 2 V V V | |||
210 MIDB 3 3 V V V V | |||
211 LENB 1 1 V V | |||
212 ROUNDUP 2 2 V V V | |||
213 ROUNDDOWN 2 2 V V V | |||
214 ASC 1 1 V V | |||
215 JIS 1 1 V V x | |||
219 ADDRESS 2 5 V V V V V V | |||
220 DAYS360 2 2 V V V x | |||
221 TODAY 0 0 V - x | |||
222 VDB 5 7 V V V V V V V V | |||
227 MEDIAN 1 30 V R ... | |||
228 SUMPRODUCT 1 30 V A ... | |||
229 SINH 1 1 V V | |||
230 COSH 1 1 V V | |||
231 TANH 1 1 V V | |||
232 ASINH 1 1 V V | |||
233 ACOSH 1 1 V V | |||
234 ATANH 1 1 V V | |||
235 DGET 3 3 V R R R | |||
244 INFO 1 1 V V | |||
# New Built-In Sheet Functions in BIFF4 | |||
14 FIXED 2 3 V V V V x | |||
204 USDOLLAR 1 2 V V V x | |||
215 DBCS 1 1 V V x | |||
216 RANK 2 3 V V R V | |||
247 DB 4 5 V V V V V V | |||
252 FREQUENCY 2 2 A R R | |||
261 ERROR.TYPE 1 1 V V | |||
269 AVEDEV 1 30 V R ... | |||
270 BETADIST 3 5 V V V V V V | |||
271 GAMMALN 1 1 V V | |||
272 BETAINV 3 5 V V V V V V | |||
273 BINOMDIST 4 4 V V V V V | |||
274 CHIDIST 2 2 V V V | |||
275 CHIINV 2 2 V V V | |||
276 COMBIN 2 2 V V V | |||
277 CONFIDENCE 3 3 V V V V | |||
278 CRITBINOM 3 3 V V V V | |||
279 EVEN 1 1 V V | |||
280 EXPONDIST 3 3 V V V V | |||
281 FDIST 3 3 V V V V | |||
282 FINV 3 3 V V V V | |||
283 FISHER 1 1 V V | |||
284 FISHERINV 1 1 V V | |||
285 FLOOR 2 2 V V V | |||
286 GAMMADIST 4 4 V V V V V | |||
287 GAMMAINV 3 3 V V V V | |||
288 CEILING 2 2 V V V | |||
289 HYPGEOMDIST 4 4 V V V V V | |||
290 LOGNORMDIST 3 3 V V V V | |||
291 LOGINV 3 3 V V V V | |||
292 NEGBINOMDIST 3 3 V V V V | |||
293 NORMDIST 4 4 V V V V V | |||
294 NORMSDIST 1 1 V V | |||
295 NORMINV 3 3 V V V V | |||
296 NORMSINV 1 1 V V | |||
297 STANDARDIZE 3 3 V V V V | |||
298 ODD 1 1 V V | |||
299 PERMUT 2 2 V V V | |||
300 POISSON 3 3 V V V V | |||
301 TDIST 3 3 V V V V | |||
302 WEIBULL 4 4 V V V V V | |||
303 SUMXMY2 2 2 V A A | |||
304 SUMX2MY2 2 2 V A A | |||
305 SUMX2PY2 2 2 V A A | |||
306 CHITEST 2 2 V A A | |||
307 CORREL 2 2 V A A | |||
308 COVAR 2 2 V A A | |||
309 FORECAST 3 3 V V A A | |||
310 FTEST 2 2 V A A | |||
311 INTERCEPT 2 2 V A A | |||
312 PEARSON 2 2 V A A | |||
313 RSQ 2 2 V A A | |||
314 STEYX 2 2 V A A | |||
315 SLOPE 2 2 V A A | |||
316 TTEST 4 4 V A A V V | |||
317 PROB 3 4 V A A V V | |||
318 DEVSQ 1 30 V R ... | |||
319 GEOMEAN 1 30 V R ... | |||
320 HARMEAN 1 30 V R ... | |||
321 SUMSQ 0 30 V R ... | |||
322 KURT 1 30 V R ... | |||
323 SKEW 1 30 V R ... | |||
324 ZTEST 2 3 V R V V | |||
325 LARGE 2 2 V R V | |||
326 SMALL 2 2 V R V | |||
327 QUARTILE 2 2 V R V | |||
328 PERCENTILE 2 2 V R V | |||
329 PERCENTRANK 2 3 V R V V | |||
330 MODE 1 30 V A | |||
331 TRIMMEAN 2 2 V R V | |||
332 TINV 2 2 V V V | |||
# New Built-In Sheet Functions in BIFF5 | |||
70 WEEKDAY 1 2 V V V x | |||
101 HLOOKUP 3 4 V V R R V x | |||
102 VLOOKUP 3 4 V V R R V x | |||
220 DAYS360 2 3 V V V V x | |||
336 CONCATENATE 0 30 V V | |||
337 POWER 2 2 V V V | |||
342 RADIANS 1 1 V V | |||
343 DEGREES 1 1 V V | |||
344 SUBTOTAL 2 30 V V R | |||
345 SUMIF 2 3 V R V R | |||
346 COUNTIF 2 2 V R V | |||
347 COUNTBLANK 1 1 V R | |||
350 ISPMT 4 4 V V V V V | |||
351 DATEDIF 3 3 V V V V | |||
352 DATESTRING 1 1 V V | |||
353 NUMBERSTRING 2 2 V V V | |||
354 ROMAN 1 2 V V V | |||
# New Built-In Sheet Functions in BIFF8 | |||
358 GETPIVOTDATA 2 30 | |||
359 HYPERLINK 1 2 V V V | |||
360 PHONETIC 1 1 V R | |||
361 AVERAGEA 1 30 V R ... | |||
362 MAXA 1 30 V R ... | |||
363 MINA 1 30 V R ... | |||
364 STDEVPA 1 30 V R ... | |||
365 VARPA 1 30 V R ... | |||
366 STDEVA 1 30 V R ... | |||
367 VARA 1 30 V R ... | |||
# 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. | |||
# Created by (org.apache.poi.hssf.record.formula.function.ExcelFileFormatDocFunctionExtractor) | |||
# from source file 'excelfileformat.odt' (size=356107, md5=0x8f789cb6e75594caf068f8e193004ef4) | |||
# | |||
#Columns: (index, name, minParams, maxParams, returnClass, paramClasses, isVolatile, hasFootnote ) | |||
# Built-In Sheet Functions in BIFF2 | |||
0 COUNT 0 30 V R | |||
1 IF 2 3 R V R R | |||
2 ISNA 1 1 V V | |||
3 ISERROR 1 1 V V | |||
4 SUM 0 30 V R | |||
5 AVERAGE 1 30 V R | |||
6 MIN 1 30 V R | |||
7 MAX 1 30 V R | |||
8 ROW 0 1 V R | |||
9 COLUMN 0 1 V R | |||
10 NA 0 0 V - | |||
11 NPV 2 30 V V R | |||
12 STDEV 1 30 V R | |||
13 DOLLAR 1 2 V V V | |||
14 FIXED 2 2 V V V x | |||
15 SIN 1 1 V V | |||
16 COS 1 1 V V | |||
17 TAN 1 1 V V | |||
18 ATAN 1 1 V V | |||
19 PI 0 0 V - | |||
20 SQRT 1 1 V V | |||
21 EXP 1 1 V V | |||
22 LN 1 1 V V | |||
23 LOG10 1 1 V V | |||
24 ABS 1 1 V V | |||
25 INT 1 1 V V | |||
26 SIGN 1 1 V V | |||
27 ROUND 2 2 V V V | |||
28 LOOKUP 2 3 V V R R | |||
29 INDEX 2 4 R R V V V | |||
30 REPT 2 2 V V V | |||
31 MID 3 3 V V V V | |||
32 LEN 1 1 V V | |||
33 VALUE 1 1 V V | |||
34 TRUE 0 0 V - | |||
35 FALSE 0 0 V - | |||
36 AND 1 30 V R | |||
37 OR 1 30 V R | |||
38 NOT 1 1 V V | |||
39 MOD 2 2 V V V | |||
40 DCOUNT 3 3 V R R R | |||
41 DSUM 3 3 V R R R | |||
42 DAVERAGE 3 3 V R R R | |||
43 DMIN 3 3 V R R R | |||
44 DMAX 3 3 V R R R | |||
45 DSTDEV 3 3 V R R R | |||
46 VAR 1 30 V R | |||
47 DVAR 3 3 V R R R | |||
48 TEXT 2 2 V V V | |||
49 LINEST 1 2 A R R x | |||
50 TREND 1 3 A R R R x | |||
51 LOGEST 1 2 A R R x | |||
52 GROWTH 1 3 A R R R x | |||
56 PV 3 5 V V V V V V | |||
# Built-In Sheet Functions in BIFF2 | |||
57 FV 3 5 V V V V V V | |||
58 NPER 3 5 V V V V V V | |||
59 PMT 3 5 V V V V V V | |||
60 RATE 3 6 V V V V V V V | |||
61 MIRR 3 3 V R V V | |||
62 IRR 1 2 V R V | |||
63 RAND 0 0 V - x | |||
64 MATCH 2 3 V V R R | |||
65 DATE 3 3 V V V V | |||
66 TIME 3 3 V V V V | |||
67 DAY 1 1 V V | |||
68 MONTH 1 1 V V | |||
69 YEAR 1 1 V V | |||
70 WEEKDAY 1 1 V V x | |||
71 HOUR 1 1 V V | |||
72 MINUTE 1 1 V V | |||
73 SECOND 1 1 V V | |||
74 NOW 0 0 V - x | |||
75 AREAS 1 1 V R | |||
76 ROWS 1 1 V R | |||
77 COLUMNS 1 1 V R | |||
78 OFFSET 3 5 R R V V V V x | |||
82 SEARCH 2 3 V V V V | |||
83 TRANSPOSE 1 1 A A | |||
86 TYPE 1 1 V V | |||
97 ATAN2 2 2 V V V | |||
98 ASIN 1 1 V V | |||
99 ACOS 1 1 V V | |||
100 CHOOSE 2 30 R V R | |||
101 HLOOKUP 3 3 V V R R x | |||
102 VLOOKUP 3 3 V V R R x | |||
105 ISREF 1 1 V R | |||
109 LOG 1 2 V V V | |||
111 CHAR 1 1 V V | |||
112 LOWER 1 1 V V | |||
113 UPPER 1 1 V V | |||
114 PROPER 1 1 V V | |||
115 LEFT 1 2 V V V | |||
116 RIGHT 1 2 V V V | |||
117 EXACT 2 2 V V V | |||
118 TRIM 1 1 V V | |||
119 REPLACE 4 4 V V V V V | |||
120 SUBSTITUTE 3 4 V V V V V | |||
121 CODE 1 1 V V | |||
124 FIND 2 3 V V V V | |||
125 CELL 1 2 V V R x | |||
126 ISERR 1 1 V V | |||
127 ISTEXT 1 1 V V | |||
128 ISNUMBER 1 1 V V | |||
129 ISBLANK 1 1 V V | |||
130 T 1 1 V R | |||
131 N 1 1 V R | |||
140 DATEVALUE 1 1 V V | |||
141 TIMEVALUE 1 1 V V | |||
142 SLN 3 3 V V V V | |||
143 SYD 4 4 V V V V V | |||
144 DDB 4 5 V V V V V V | |||
148 INDIRECT 1 2 R V V x | |||
162 CLEAN 1 1 V V | |||
163 MDETERM 1 1 V A | |||
164 MINVERSE 1 1 A A | |||
165 MMULT 2 2 A A A | |||
167 IPMT 4 6 V V V V V V V | |||
168 PPMT 4 6 V V V V V V V | |||
169 COUNTA 0 30 V R | |||
183 PRODUCT 0 30 V R | |||
184 FACT 1 1 V V | |||
189 DPRODUCT 3 3 V R R R | |||
190 ISNONTEXT 1 1 V V | |||
193 STDEVP 1 30 V R | |||
194 VARP 1 30 V R | |||
195 DSTDEVP 3 3 V R R R | |||
196 DVARP 3 3 V R R R | |||
197 TRUNC 1 1 V V x | |||
198 ISLOGICAL 1 1 V V | |||
199 DCOUNTA 3 3 V R R R | |||
# New Built-In Sheet Functions in BIFF3 | |||
49 LINEST 1 4 A R R V V x | |||
50 TREND 1 4 A R R R V x | |||
51 LOGEST 1 4 A R R V V x | |||
52 GROWTH 1 4 A R R R V x | |||
197 TRUNC 1 2 V V V x | |||
204 YEN 1 2 V V V x | |||
205 FINDB 2 3 V V V V | |||
206 SEARCHB 2 3 V V V V | |||
207 REPLACEB 4 4 V V V V V | |||
208 LEFTB 1 2 V V V | |||
209 RIGHTB 1 2 V V V | |||
210 MIDB 3 3 V V V V | |||
211 LENB 1 1 V V | |||
212 ROUNDUP 2 2 V V V | |||
213 ROUNDDOWN 2 2 V V V | |||
214 ASC 1 1 V V | |||
215 JIS 1 1 V V x | |||
219 ADDRESS 2 5 V V V V V V | |||
220 DAYS360 2 2 V V V x | |||
221 TODAY 0 0 V - x | |||
222 VDB 5 7 V V V V V V V V | |||
227 MEDIAN 1 30 V R ... | |||
228 SUMPRODUCT 1 30 V A ... | |||
229 SINH 1 1 V V | |||
230 COSH 1 1 V V | |||
231 TANH 1 1 V V | |||
232 ASINH 1 1 V V | |||
233 ACOSH 1 1 V V | |||
234 ATANH 1 1 V V | |||
235 DGET 3 3 V R R R | |||
244 INFO 1 1 V V | |||
# New Built-In Sheet Functions in BIFF4 | |||
14 FIXED 2 3 V V V V x | |||
204 USDOLLAR 1 2 V V V x | |||
215 DBCS 1 1 V V x | |||
216 RANK 2 3 V V R V | |||
247 DB 4 5 V V V V V V | |||
252 FREQUENCY 2 2 A R R | |||
261 ERROR.TYPE 1 1 V V | |||
269 AVEDEV 1 30 V R ... | |||
270 BETADIST 3 5 V V V V V V | |||
271 GAMMALN 1 1 V V | |||
272 BETAINV 3 5 V V V V V V | |||
273 BINOMDIST 4 4 V V V V V | |||
274 CHIDIST 2 2 V V V | |||
275 CHIINV 2 2 V V V | |||
276 COMBIN 2 2 V V V | |||
277 CONFIDENCE 3 3 V V V V | |||
278 CRITBINOM 3 3 V V V V | |||
279 EVEN 1 1 V V | |||
280 EXPONDIST 3 3 V V V V | |||
281 FDIST 3 3 V V V V | |||
282 FINV 3 3 V V V V | |||
283 FISHER 1 1 V V | |||
284 FISHERINV 1 1 V V | |||
285 FLOOR 2 2 V V V | |||
286 GAMMADIST 4 4 V V V V V | |||
287 GAMMAINV 3 3 V V V V | |||
288 CEILING 2 2 V V V | |||
289 HYPGEOMDIST 4 4 V V V V V | |||
290 LOGNORMDIST 3 3 V V V V | |||
291 LOGINV 3 3 V V V V | |||
292 NEGBINOMDIST 3 3 V V V V | |||
293 NORMDIST 4 4 V V V V V | |||
294 NORMSDIST 1 1 V V | |||
295 NORMINV 3 3 V V V V | |||
296 NORMSINV 1 1 V V | |||
297 STANDARDIZE 3 3 V V V V | |||
298 ODD 1 1 V V | |||
299 PERMUT 2 2 V V V | |||
300 POISSON 3 3 V V V V | |||
301 TDIST 3 3 V V V V | |||
302 WEIBULL 4 4 V V V V V | |||
303 SUMXMY2 2 2 V A A | |||
304 SUMX2MY2 2 2 V A A | |||
305 SUMX2PY2 2 2 V A A | |||
306 CHITEST 2 2 V A A | |||
307 CORREL 2 2 V A A | |||
308 COVAR 2 2 V A A | |||
309 FORECAST 3 3 V V A A | |||
310 FTEST 2 2 V A A | |||
311 INTERCEPT 2 2 V A A | |||
312 PEARSON 2 2 V A A | |||
313 RSQ 2 2 V A A | |||
314 STEYX 2 2 V A A | |||
315 SLOPE 2 2 V A A | |||
316 TTEST 4 4 V A A V V | |||
317 PROB 3 4 V A A V V | |||
318 DEVSQ 1 30 V R ... | |||
319 GEOMEAN 1 30 V R ... | |||
320 HARMEAN 1 30 V R ... | |||
321 SUMSQ 0 30 V R ... | |||
322 KURT 1 30 V R ... | |||
323 SKEW 1 30 V R ... | |||
324 ZTEST 2 3 V R V V | |||
325 LARGE 2 2 V R V | |||
326 SMALL 2 2 V R V | |||
327 QUARTILE 2 2 V R V | |||
328 PERCENTILE 2 2 V R V | |||
329 PERCENTRANK 2 3 V R V V | |||
330 MODE 1 30 V A | |||
331 TRIMMEAN 2 2 V R V | |||
332 TINV 2 2 V V V | |||
# New Built-In Sheet Functions in BIFF5 | |||
70 WEEKDAY 1 2 V V V x | |||
101 HLOOKUP 3 4 V V R R V x | |||
102 VLOOKUP 3 4 V V R R V x | |||
220 DAYS360 2 3 V V V V x | |||
336 CONCATENATE 0 30 V V | |||
337 POWER 2 2 V V V | |||
342 RADIANS 1 1 V V | |||
343 DEGREES 1 1 V V | |||
344 SUBTOTAL 2 30 V V R | |||
345 SUMIF 2 3 V R V R | |||
346 COUNTIF 2 2 V R V | |||
347 COUNTBLANK 1 1 V R | |||
350 ISPMT 4 4 V V V V V | |||
351 DATEDIF 3 3 V V V V | |||
352 DATESTRING 1 1 V V | |||
353 NUMBERSTRING 2 2 V V V | |||
354 ROMAN 1 2 V V V | |||
# New Built-In Sheet Functions in BIFF8 | |||
358 GETPIVOTDATA 2 30 | |||
359 HYPERLINK 1 2 V V V | |||
360 PHONETIC 1 1 V R | |||
361 AVERAGEA 1 30 V R ... | |||
362 MAXA 1 30 V R ... | |||
363 MINA 1 30 V R ... | |||
364 STDEVPA 1 30 V R ... | |||
365 VARPA 1 30 V R ... | |||
366 STDEVA 1 30 V R ... | |||
367 VARA 1 30 V R ... |
@@ -1,286 +1,286 @@ | |||
# 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. | |||
# Created by (org.apache.poi.hssf.record.formula.function.ExcelFileFormatDocFunctionExtractor) | |||
# from source file 'excelfileformat.odt' (size=356107, md5=0x8f789cb6e75594caf068f8e193004ef4) | |||
# ! + some manual edits ! | |||
# | |||
#Columns: (index, name, minParams, maxParams, returnClass, paramClasses, isVolatile, hasFootnote ) | |||
# Built-In Sheet Functions in BIFF2 | |||
0 COUNT 0 30 V R | |||
1 IF 2 3 R V R R | |||
2 ISNA 1 1 V V | |||
3 ISERROR 1 1 V V | |||
4 SUM 0 30 V R | |||
5 AVERAGE 1 30 V R | |||
6 MIN 1 30 V R | |||
7 MAX 1 30 V R | |||
8 ROW 0 1 V R | |||
9 COLUMN 0 1 V R | |||
10 NA 0 0 V - | |||
11 NPV 2 30 V V R | |||
12 STDEV 1 30 V R | |||
13 DOLLAR 1 2 V V V | |||
14 FIXED 2 2 V V V x | |||
15 SIN 1 1 V V | |||
16 COS 1 1 V V | |||
17 TAN 1 1 V V | |||
18 ATAN 1 1 V V | |||
19 PI 0 0 V - | |||
20 SQRT 1 1 V V | |||
21 EXP 1 1 V V | |||
22 LN 1 1 V V | |||
23 LOG10 1 1 V V | |||
24 ABS 1 1 V V | |||
25 INT 1 1 V V | |||
26 SIGN 1 1 V V | |||
27 ROUND 2 2 V V V | |||
28 LOOKUP 2 3 V V R R | |||
29 INDEX 2 4 R R V V V | |||
30 REPT 2 2 V V V | |||
31 MID 3 3 V V V V | |||
32 LEN 1 1 V V | |||
33 VALUE 1 1 V V | |||
34 TRUE 0 0 V - | |||
35 FALSE 0 0 V - | |||
36 AND 1 30 V R | |||
37 OR 1 30 V R | |||
38 NOT 1 1 V V | |||
39 MOD 2 2 V V V | |||
40 DCOUNT 3 3 V R R R | |||
41 DSUM 3 3 V R R R | |||
42 DAVERAGE 3 3 V R R R | |||
43 DMIN 3 3 V R R R | |||
44 DMAX 3 3 V R R R | |||
45 DSTDEV 3 3 V R R R | |||
46 VAR 1 30 V R | |||
47 DVAR 3 3 V R R R | |||
48 TEXT 2 2 V V V | |||
49 LINEST 1 2 A R R x | |||
50 TREND 1 3 A R R R x | |||
51 LOGEST 1 2 A R R x | |||
52 GROWTH 1 3 A R R R x | |||
56 PV 3 5 V V V V V V | |||
# Built-In Sheet Functions in BIFF2 | |||
57 FV 3 5 V V V V V V | |||
58 NPER 3 5 V V V V V V | |||
59 PMT 3 5 V V V V V V | |||
60 RATE 3 6 V V V V V V V | |||
61 MIRR 3 3 V A V V | |||
62 IRR 1 2 V A V | |||
63 RAND 0 0 V - x | |||
64 MATCH 2 3 V V R R | |||
65 DATE 3 3 V V V V | |||
66 TIME 3 3 V V V V | |||
67 DAY 1 1 V V | |||
68 MONTH 1 1 V V | |||
69 YEAR 1 1 V V | |||
70 WEEKDAY 1 1 V V x | |||
71 HOUR 1 1 V V | |||
72 MINUTE 1 1 V V | |||
73 SECOND 1 1 V V | |||
74 NOW 0 0 V - x | |||
75 AREAS 1 1 V R | |||
76 ROWS 1 1 V A | |||
77 COLUMNS 1 1 V A | |||
78 OFFSET 3 5 R R V V V V x | |||
82 SEARCH 2 3 V V V V | |||
83 TRANSPOSE 1 1 A A | |||
86 TYPE 1 1 V V | |||
97 ATAN2 2 2 V V V | |||
98 ASIN 1 1 V V | |||
99 ACOS 1 1 V V | |||
100 CHOOSE 2 30 R V R | |||
101 HLOOKUP 3 3 V V R R x | |||
102 VLOOKUP 3 3 V V R R x | |||
105 ISREF 1 1 V R | |||
109 LOG 1 2 V V V | |||
111 CHAR 1 1 V V | |||
112 LOWER 1 1 V V | |||
113 UPPER 1 1 V V | |||
114 PROPER 1 1 V V | |||
115 LEFT 1 2 V V V | |||
116 RIGHT 1 2 V V V | |||
117 EXACT 2 2 V V V | |||
118 TRIM 1 1 V V | |||
119 REPLACE 4 4 V V V V V | |||
120 SUBSTITUTE 3 4 V V V V V | |||
121 CODE 1 1 V V | |||
124 FIND 2 3 V V V V | |||
125 CELL 1 2 V V R x | |||
126 ISERR 1 1 V V | |||
127 ISTEXT 1 1 V V | |||
128 ISNUMBER 1 1 V V | |||
129 ISBLANK 1 1 V V | |||
130 T 1 1 V R | |||
131 N 1 1 V R | |||
140 DATEVALUE 1 1 V V | |||
141 TIMEVALUE 1 1 V V | |||
142 SLN 3 3 V V V V | |||
143 SYD 4 4 V V V V V | |||
144 DDB 4 5 V V V V V V | |||
148 INDIRECT 1 2 R V V x | |||
162 CLEAN 1 1 V V | |||
163 MDETERM 1 1 V A | |||
164 MINVERSE 1 1 A A | |||
165 MMULT 2 2 A A A | |||
167 IPMT 4 6 V V V V V V V | |||
168 PPMT 4 6 V V V V V V V | |||
169 COUNTA 0 30 V R | |||
183 PRODUCT 0 30 V R | |||
184 FACT 1 1 V V | |||
189 DPRODUCT 3 3 V R R R | |||
190 ISNONTEXT 1 1 V V | |||
193 STDEVP 1 30 V R | |||
194 VARP 1 30 V R | |||
195 DSTDEVP 3 3 V R R R | |||
196 DVARP 3 3 V R R R | |||
197 TRUNC 1 1 V V x | |||
198 ISLOGICAL 1 1 V V | |||
199 DCOUNTA 3 3 V R R R | |||
# New Built-In Sheet Functions in BIFF3 | |||
49 LINEST 1 4 A R R V V x | |||
50 TREND 1 4 A R R R V x | |||
51 LOGEST 1 4 A R R V V x | |||
52 GROWTH 1 4 A R R R V x | |||
197 TRUNC 1 2 V V V x | |||
204 YEN 1 2 V V V x | |||
205 FINDB 2 3 V V V V | |||
206 SEARCHB 2 3 V V V V | |||
207 REPLACEB 4 4 V V V V V | |||
208 LEFTB 1 2 V V V | |||
209 RIGHTB 1 2 V V V | |||
210 MIDB 3 3 V V V V | |||
211 LENB 1 1 V V | |||
212 ROUNDUP 2 2 V V V | |||
213 ROUNDDOWN 2 2 V V V | |||
214 ASC 1 1 V V | |||
215 JIS 1 1 V V x | |||
219 ADDRESS 2 5 V V V V V V | |||
220 DAYS360 2 2 V V V x | |||
221 TODAY 0 0 V - x | |||
222 VDB 5 7 V V V V V V V V | |||
227 MEDIAN 1 30 V R ... | |||
228 SUMPRODUCT 1 30 V A ... | |||
229 SINH 1 1 V V | |||
230 COSH 1 1 V V | |||
231 TANH 1 1 V V | |||
232 ASINH 1 1 V V | |||
233 ACOSH 1 1 V V | |||
234 ATANH 1 1 V V | |||
235 DGET 3 3 V R R R | |||
244 INFO 1 1 V V | |||
# New Built-In Sheet Functions in BIFF4 | |||
14 FIXED 2 3 V V V V x | |||
204 USDOLLAR 1 2 V V V x | |||
215 DBCS 1 1 V V x | |||
216 RANK 2 3 V V R V | |||
247 DB 4 5 V V V V V V | |||
252 FREQUENCY 2 2 A R R | |||
261 ERROR.TYPE 1 1 V V | |||
269 AVEDEV 1 30 V R ... | |||
270 BETADIST 3 5 V V V V V V | |||
271 GAMMALN 1 1 V V | |||
272 BETAINV 3 5 V V V V V V | |||
273 BINOMDIST 4 4 V V V V V | |||
274 CHIDIST 2 2 V V V | |||
275 CHIINV 2 2 V V V | |||
276 COMBIN 2 2 V V V | |||
277 CONFIDENCE 3 3 V V V V | |||
278 CRITBINOM 3 3 V V V V | |||
279 EVEN 1 1 V V | |||
280 EXPONDIST 3 3 V V V V | |||
281 FDIST 3 3 V V V V | |||
282 FINV 3 3 V V V V | |||
283 FISHER 1 1 V V | |||
284 FISHERINV 1 1 V V | |||
285 FLOOR 2 2 V V V | |||
286 GAMMADIST 4 4 V V V V V | |||
287 GAMMAINV 3 3 V V V V | |||
288 CEILING 2 2 V V V | |||
289 HYPGEOMDIST 4 4 V V V V V | |||
290 LOGNORMDIST 3 3 V V V V | |||
291 LOGINV 3 3 V V V V | |||
292 NEGBINOMDIST 3 3 V V V V | |||
293 NORMDIST 4 4 V V V V V | |||
294 NORMSDIST 1 1 V V | |||
295 NORMINV 3 3 V V V V | |||
296 NORMSINV 1 1 V V | |||
297 STANDARDIZE 3 3 V V V V | |||
298 ODD 1 1 V V | |||
299 PERMUT 2 2 V V V | |||
300 POISSON 3 3 V V V V | |||
301 TDIST 3 3 V V V V | |||
302 WEIBULL 4 4 V V V V V | |||
303 SUMXMY2 2 2 V A A | |||
304 SUMX2MY2 2 2 V A A | |||
305 SUMX2PY2 2 2 V A A | |||
306 CHITEST 2 2 V A A | |||
307 CORREL 2 2 V A A | |||
308 COVAR 2 2 V A A | |||
309 FORECAST 3 3 V V A A | |||
310 FTEST 2 2 V A A | |||
311 INTERCEPT 2 2 V A A | |||
312 PEARSON 2 2 V A A | |||
313 RSQ 2 2 V A A | |||
314 STEYX 2 2 V A A | |||
315 SLOPE 2 2 V A A | |||
316 TTEST 4 4 V A A V V | |||
317 PROB 3 4 V A A V V | |||
318 DEVSQ 1 30 V R ... | |||
319 GEOMEAN 1 30 V R ... | |||
320 HARMEAN 1 30 V R ... | |||
321 SUMSQ 0 30 V R ... | |||
322 KURT 1 30 V R ... | |||
323 SKEW 1 30 V R ... | |||
324 ZTEST 2 3 V R V V | |||
325 LARGE 2 2 V R V | |||
326 SMALL 2 2 V R V | |||
327 QUARTILE 2 2 V R V | |||
328 PERCENTILE 2 2 V R V | |||
329 PERCENTRANK 2 3 V R V V | |||
330 MODE 1 30 V A | |||
331 TRIMMEAN 2 2 V R V | |||
332 TINV 2 2 V V V | |||
# New Built-In Sheet Functions in BIFF5 | |||
70 WEEKDAY 1 2 V V V x | |||
101 HLOOKUP 3 4 V V R R V x | |||
102 VLOOKUP 3 4 V V R R V x | |||
220 DAYS360 2 3 V V V V x | |||
336 CONCATENATE 0 30 V V | |||
337 POWER 2 2 V V V | |||
342 RADIANS 1 1 V V | |||
343 DEGREES 1 1 V V | |||
344 SUBTOTAL 2 30 V V R | |||
345 SUMIF 2 3 V R V R | |||
346 COUNTIF 2 2 V R V | |||
347 COUNTBLANK 1 1 V R | |||
350 ISPMT 4 4 V V V V V | |||
351 DATEDIF 3 3 V V V V | |||
352 DATESTRING 1 1 V V | |||
353 NUMBERSTRING 2 2 V V V | |||
354 ROMAN 1 2 V V V | |||
# New Built-In Sheet Functions in BIFF8 | |||
358 GETPIVOTDATA 2 30 | |||
359 HYPERLINK 1 2 V V V | |||
360 PHONETIC 1 1 V R | |||
361 AVERAGEA 1 30 V R ... | |||
362 MAXA 1 30 V R ... | |||
363 MINA 1 30 V R ... | |||
364 STDEVPA 1 30 V R ... | |||
365 VARPA 1 30 V R ... | |||
366 STDEVA 1 30 V R ... | |||
367 VARA 1 30 V R ... | |||
# 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. | |||
# Created by (org.apache.poi.hssf.record.formula.function.ExcelFileFormatDocFunctionExtractor) | |||
# from source file 'excelfileformat.odt' (size=356107, md5=0x8f789cb6e75594caf068f8e193004ef4) | |||
# ! + some manual edits ! | |||
# | |||
#Columns: (index, name, minParams, maxParams, returnClass, paramClasses, isVolatile, hasFootnote ) | |||
# Built-In Sheet Functions in BIFF2 | |||
0 COUNT 0 30 V R | |||
1 IF 2 3 R V R R | |||
2 ISNA 1 1 V V | |||
3 ISERROR 1 1 V V | |||
4 SUM 0 30 V R | |||
5 AVERAGE 1 30 V R | |||
6 MIN 1 30 V R | |||
7 MAX 1 30 V R | |||
8 ROW 0 1 V R | |||
9 COLUMN 0 1 V R | |||
10 NA 0 0 V - | |||
11 NPV 2 30 V V R | |||
12 STDEV 1 30 V R | |||
13 DOLLAR 1 2 V V V | |||
14 FIXED 2 2 V V V x | |||
15 SIN 1 1 V V | |||
16 COS 1 1 V V | |||
17 TAN 1 1 V V | |||
18 ATAN 1 1 V V | |||
19 PI 0 0 V - | |||
20 SQRT 1 1 V V | |||
21 EXP 1 1 V V | |||
22 LN 1 1 V V | |||
23 LOG10 1 1 V V | |||
24 ABS 1 1 V V | |||
25 INT 1 1 V V | |||
26 SIGN 1 1 V V | |||
27 ROUND 2 2 V V V | |||
28 LOOKUP 2 3 V V R R | |||
29 INDEX 2 4 R R V V V | |||
30 REPT 2 2 V V V | |||
31 MID 3 3 V V V V | |||
32 LEN 1 1 V V | |||
33 VALUE 1 1 V V | |||
34 TRUE 0 0 V - | |||
35 FALSE 0 0 V - | |||
36 AND 1 30 V R | |||
37 OR 1 30 V R | |||
38 NOT 1 1 V V | |||
39 MOD 2 2 V V V | |||
40 DCOUNT 3 3 V R R R | |||
41 DSUM 3 3 V R R R | |||
42 DAVERAGE 3 3 V R R R | |||
43 DMIN 3 3 V R R R | |||
44 DMAX 3 3 V R R R | |||
45 DSTDEV 3 3 V R R R | |||
46 VAR 1 30 V R | |||
47 DVAR 3 3 V R R R | |||
48 TEXT 2 2 V V V | |||
49 LINEST 1 2 A R R x | |||
50 TREND 1 3 A R R R x | |||
51 LOGEST 1 2 A R R x | |||
52 GROWTH 1 3 A R R R x | |||
56 PV 3 5 V V V V V V | |||
# Built-In Sheet Functions in BIFF2 | |||
57 FV 3 5 V V V V V V | |||
58 NPER 3 5 V V V V V V | |||
59 PMT 3 5 V V V V V V | |||
60 RATE 3 6 V V V V V V V | |||
61 MIRR 3 3 V A V V | |||
62 IRR 1 2 V A V | |||
63 RAND 0 0 V - x | |||
64 MATCH 2 3 V V R R | |||
65 DATE 3 3 V V V V | |||
66 TIME 3 3 V V V V | |||
67 DAY 1 1 V V | |||
68 MONTH 1 1 V V | |||
69 YEAR 1 1 V V | |||
70 WEEKDAY 1 1 V V x | |||
71 HOUR 1 1 V V | |||
72 MINUTE 1 1 V V | |||
73 SECOND 1 1 V V | |||
74 NOW 0 0 V - x | |||
75 AREAS 1 1 V R | |||
76 ROWS 1 1 V A | |||
77 COLUMNS 1 1 V A | |||
78 OFFSET 3 5 R R V V V V x | |||
82 SEARCH 2 3 V V V V | |||
83 TRANSPOSE 1 1 A A | |||
86 TYPE 1 1 V V | |||
97 ATAN2 2 2 V V V | |||
98 ASIN 1 1 V V | |||
99 ACOS 1 1 V V | |||
100 CHOOSE 2 30 R V R | |||
101 HLOOKUP 3 3 V V R R x | |||
102 VLOOKUP 3 3 V V R R x | |||
105 ISREF 1 1 V R | |||
109 LOG 1 2 V V V | |||
111 CHAR 1 1 V V | |||
112 LOWER 1 1 V V | |||
113 UPPER 1 1 V V | |||
114 PROPER 1 1 V V | |||
115 LEFT 1 2 V V V | |||
116 RIGHT 1 2 V V V | |||
117 EXACT 2 2 V V V | |||
118 TRIM 1 1 V V | |||
119 REPLACE 4 4 V V V V V | |||
120 SUBSTITUTE 3 4 V V V V V | |||
121 CODE 1 1 V V | |||
124 FIND 2 3 V V V V | |||
125 CELL 1 2 V V R x | |||
126 ISERR 1 1 V V | |||
127 ISTEXT 1 1 V V | |||
128 ISNUMBER 1 1 V V | |||
129 ISBLANK 1 1 V V | |||
130 T 1 1 V R | |||
131 N 1 1 V R | |||
140 DATEVALUE 1 1 V V | |||
141 TIMEVALUE 1 1 V V | |||
142 SLN 3 3 V V V V | |||
143 SYD 4 4 V V V V V | |||
144 DDB 4 5 V V V V V V | |||
148 INDIRECT 1 2 R V V x | |||
162 CLEAN 1 1 V V | |||
163 MDETERM 1 1 V A | |||
164 MINVERSE 1 1 A A | |||
165 MMULT 2 2 A A A | |||
167 IPMT 4 6 V V V V V V V | |||
168 PPMT 4 6 V V V V V V V | |||
169 COUNTA 0 30 V R | |||
183 PRODUCT 0 30 V R | |||
184 FACT 1 1 V V | |||
189 DPRODUCT 3 3 V R R R | |||
190 ISNONTEXT 1 1 V V | |||
193 STDEVP 1 30 V R | |||
194 VARP 1 30 V R | |||
195 DSTDEVP 3 3 V R R R | |||
196 DVARP 3 3 V R R R | |||
197 TRUNC 1 1 V V x | |||
198 ISLOGICAL 1 1 V V | |||
199 DCOUNTA 3 3 V R R R | |||
# New Built-In Sheet Functions in BIFF3 | |||
49 LINEST 1 4 A R R V V x | |||
50 TREND 1 4 A R R R V x | |||
51 LOGEST 1 4 A R R V V x | |||
52 GROWTH 1 4 A R R R V x | |||
197 TRUNC 1 2 V V V x | |||
204 YEN 1 2 V V V x | |||
205 FINDB 2 3 V V V V | |||
206 SEARCHB 2 3 V V V V | |||
207 REPLACEB 4 4 V V V V V | |||
208 LEFTB 1 2 V V V | |||
209 RIGHTB 1 2 V V V | |||
210 MIDB 3 3 V V V V | |||
211 LENB 1 1 V V | |||
212 ROUNDUP 2 2 V V V | |||
213 ROUNDDOWN 2 2 V V V | |||
214 ASC 1 1 V V | |||
215 JIS 1 1 V V x | |||
219 ADDRESS 2 5 V V V V V V | |||
220 DAYS360 2 2 V V V x | |||
221 TODAY 0 0 V - x | |||
222 VDB 5 7 V V V V V V V V | |||
227 MEDIAN 1 30 V R ... | |||
228 SUMPRODUCT 1 30 V A ... | |||
229 SINH 1 1 V V | |||
230 COSH 1 1 V V | |||
231 TANH 1 1 V V | |||
232 ASINH 1 1 V V | |||
233 ACOSH 1 1 V V | |||
234 ATANH 1 1 V V | |||
235 DGET 3 3 V R R R | |||
244 INFO 1 1 V V | |||
# New Built-In Sheet Functions in BIFF4 | |||
14 FIXED 2 3 V V V V x | |||
204 USDOLLAR 1 2 V V V x | |||
215 DBCS 1 1 V V x | |||
216 RANK 2 3 V V R V | |||
247 DB 4 5 V V V V V V | |||
252 FREQUENCY 2 2 A R R | |||
261 ERROR.TYPE 1 1 V V | |||
269 AVEDEV 1 30 V R ... | |||
270 BETADIST 3 5 V V V V V V | |||
271 GAMMALN 1 1 V V | |||
272 BETAINV 3 5 V V V V V V | |||
273 BINOMDIST 4 4 V V V V V | |||
274 CHIDIST 2 2 V V V | |||
275 CHIINV 2 2 V V V | |||
276 COMBIN 2 2 V V V | |||
277 CONFIDENCE 3 3 V V V V | |||
278 CRITBINOM 3 3 V V V V | |||
279 EVEN 1 1 V V | |||
280 EXPONDIST 3 3 V V V V | |||
281 FDIST 3 3 V V V V | |||
282 FINV 3 3 V V V V | |||
283 FISHER 1 1 V V | |||
284 FISHERINV 1 1 V V | |||
285 FLOOR 2 2 V V V | |||
286 GAMMADIST 4 4 V V V V V | |||
287 GAMMAINV 3 3 V V V V | |||
288 CEILING 2 2 V V V | |||
289 HYPGEOMDIST 4 4 V V V V V | |||
290 LOGNORMDIST 3 3 V V V V | |||
291 LOGINV 3 3 V V V V | |||
292 NEGBINOMDIST 3 3 V V V V | |||
293 NORMDIST 4 4 V V V V V | |||
294 NORMSDIST 1 1 V V | |||
295 NORMINV 3 3 V V V V | |||
296 NORMSINV 1 1 V V | |||
297 STANDARDIZE 3 3 V V V V | |||
298 ODD 1 1 V V | |||
299 PERMUT 2 2 V V V | |||
300 POISSON 3 3 V V V V | |||
301 TDIST 3 3 V V V V | |||
302 WEIBULL 4 4 V V V V V | |||
303 SUMXMY2 2 2 V A A | |||
304 SUMX2MY2 2 2 V A A | |||
305 SUMX2PY2 2 2 V A A | |||
306 CHITEST 2 2 V A A | |||
307 CORREL 2 2 V A A | |||
308 COVAR 2 2 V A A | |||
309 FORECAST 3 3 V V A A | |||
310 FTEST 2 2 V A A | |||
311 INTERCEPT 2 2 V A A | |||
312 PEARSON 2 2 V A A | |||
313 RSQ 2 2 V A A | |||
314 STEYX 2 2 V A A | |||
315 SLOPE 2 2 V A A | |||
316 TTEST 4 4 V A A V V | |||
317 PROB 3 4 V A A V V | |||
318 DEVSQ 1 30 V R ... | |||
319 GEOMEAN 1 30 V R ... | |||
320 HARMEAN 1 30 V R ... | |||
321 SUMSQ 0 30 V R ... | |||
322 KURT 1 30 V R ... | |||
323 SKEW 1 30 V R ... | |||
324 ZTEST 2 3 V R V V | |||
325 LARGE 2 2 V R V | |||
326 SMALL 2 2 V R V | |||
327 QUARTILE 2 2 V R V | |||
328 PERCENTILE 2 2 V R V | |||
329 PERCENTRANK 2 3 V R V V | |||
330 MODE 1 30 V A | |||
331 TRIMMEAN 2 2 V R V | |||
332 TINV 2 2 V V V | |||
# New Built-In Sheet Functions in BIFF5 | |||
70 WEEKDAY 1 2 V V V x | |||
101 HLOOKUP 3 4 V V R R V x | |||
102 VLOOKUP 3 4 V V R R V x | |||
220 DAYS360 2 3 V V V V x | |||
336 CONCATENATE 0 30 V V | |||
337 POWER 2 2 V V V | |||
342 RADIANS 1 1 V V | |||
343 DEGREES 1 1 V V | |||
344 SUBTOTAL 2 30 V V R | |||
345 SUMIF 2 3 V R V R | |||
346 COUNTIF 2 2 V R V | |||
347 COUNTBLANK 1 1 V R | |||
350 ISPMT 4 4 V V V V V | |||
351 DATEDIF 3 3 V V V V | |||
352 DATESTRING 1 1 V V | |||
353 NUMBERSTRING 2 2 V V V | |||
354 ROMAN 1 2 V V V | |||
# New Built-In Sheet Functions in BIFF8 | |||
358 GETPIVOTDATA 2 30 | |||
359 HYPERLINK 1 2 V V V | |||
360 PHONETIC 1 1 V R | |||
361 AVERAGEA 1 30 V R ... | |||
362 MAXA 1 30 V R ... | |||
363 MINA 1 30 V R ... | |||
364 STDEVPA 1 30 V R ... | |||
365 VARPA 1 30 V R ... | |||
366 STDEVA 1 30 V R ... | |||
367 VARA 1 30 V R ... |