I will output from what I have learned at the company on a daily basis. This time, create an Excel file (.xlsx) using "Apache POI".
From Java applications such as "Excel" and "Word"
API for reading and writing format files of Microsoft products.
Prepare the library from the following URL. This time, I will use the latest version "poi-bin-3.17-20170915". (As of December 2017)
--WorkBook class (for workbooks) --Sheet class (handles sheets) --Row class (handles rows) --Cell class (handles cells) --CellStyle class (handles cell style)
There are two formats for these classes, "HSSF" and "XSSF".
It refers to the Excel file format.
| type | file format |
|---|---|
| HSSF | File format up to Excel 2003 |
| XSSF | OOXML format file format in Excel 2007 |
python
/**
*Creating a workbook
*/
// HSSF
HSSFWorkbook workbook1 = new HSSFWorkbook();
// XSSF
XSSFWorkbook workbook2 = new XSSFWorkbook();
// Workbook (Common interface for HSSFWorkbook and XSSFWorkbook classes)
Workbook workbook3 = new HSSFWorkbook();
Workbook workbook4 = new XSSFWorkbook();
python
/**
*Creating a sheet, specifying a sheet
*/
// HSSF
HSSFSheet sheet1 = workbook1.createSheet();
//Designation by sheet name
sheet1 = workbook1.getSheet("Sheet 1");
//Designated by index(Sheet numbers start at 0)
sheet1 = workbook1.getSheetAt(0);
// XSSF
XSSFSheet sheet2 = workbook2.createSheet();
/*Sheet specification omitted*/
// Sheet (Interface common to HSSFSheet class and XSSFSheet class)
Sheet sheet3 = workbook3.createSheet();
/*Sheet specification omitted*/
Sheet sheet4 = workbook4.createSheet();
/*Sheet specification omitted*/
python
/**
*Create line, specify line
*/
// HSSF (Line numbers start at 0)
HSSFRow row1 = sheet1.createRow(0);
//Specifying a line(Line numbers start at 0)
row1 = sheet1.getRow(0);
// XSSF (Line numbers start at 0)
XSSFRow row2 = sheet2.createRow(0);
/*Line specification omitted*/
// Row (Interface common to HSSFRow and XSSFRow classes)
Row row3 = sheet3.createRow(0);
/*Line specification omitted*/
Row row4 = sheet4.createRow(0);
/*Line specification omitted*/
python
/**
*Create cell, specify cell, set value in cell
*/
// HSSF (Cell numbers start at 0)
HSSFCell cell1 = row1.getCell(0);
//Cell specification(Cell numbers start at 0)
cell1 = row1.getCell(0);
//Set value in cell(Set string)
/*
*Data types that can be set in cells
*Boolean type: setCellValue(boolean value)
*String type: setCellValue(java.lang.String value)
*RichTextString type: setCellValue(RichTextString value)
*Calendar type: setCellValue(java.util.Calendar value)
*Date type: setCellValue(java.util.Date value)
*Double type: setCellValue(double value)
*/
cell1.setCellValue("Test 1");
// XSSF (Cell numbers start at 0)
XSSFCell cell2 = row2.getCell(0);
/*Cell specification / cell value setting omitted*/
// Cell (Interface common to HSSFCell and XSSFCell classes)
Cell cell3 = row3.getCell(0);
/*Cell specification / cell value setting omitted*/
Cell cell4 = row4.getCell(0);
/*Cell specification / cell value setting omitted*/
python
/**
*Create cell style, specify cell style, set value for cell style
*/
// HSSF
HSSFCellStyle cellstyle1 = workbook1.createCellStyle();
//Set a value for the cell style(font)
Font font = workbook1.createFont();
font.setFontName("MS gothic");
font.setColor(IndexedColors.RED.getIndex());
font.setFontHeightInPoints((short)14);
cellstyle1.setFont(font);
//Cell style specification
cell1.setCellStyle(cellstyle1);
// XSSF
XSSFCellStyle cellstyle2 = workbook2.createCellStyle();
/*Specifying the cell style and setting the value of the cell style are omitted.*/
// CellStyle (Interface common to HSSFCellStyle class and XSSFCellStyle class)
CellStyle cellstyle3 = workbook3.createCellStyle();
/*Specifying the cell style and setting the value of the cell style are omitted.*/
CellStyle cellstyle4 = workbook4.createCellStyle();
/*Specifying the cell style and setting the value of the cell style are omitted.*/
Please refer to the URL below because the cell style is large. URL : https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/CellStyle.html
python
/**
*Excel file output
*/
//Output file settings
FileOutputStream outExcelFile = null;
String outputPath = "File path you want to output";
String fileName = "test.xlsx";
try{
//Output file
outExcelFile = new FileOutputStream(outputPath + fileName);
workbook1.write(outExcelFile);
}catch(Exception e){
System.out.println(e.toString());
}finally{
try {
outExcelFile.close();
}catch(Exception e){
System.out.println(e.toString());
}
}
This time, I tried to output "multiplication table" in Excel. I just want to display it in Excel, so I made it quite forcibly. Please note.
python
package apache_poi.kuku;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
*Output the multiplication table to an excel file
* @author s-tsuchida
*
*/
public class Kuku_Poi {
public static void main(String[] args) {
//workbook
XSSFWorkbook workBook = null;
//Sheet
XSSFSheet sheet = null;
//Output file
FileOutputStream outPutFile = null;
//Output file path
String outPutFilePath = null;
//Output file name
String outPutFileName = null;
//Creating an excel file
try {
//Creating a workbook
workBook = new XSSFWorkbook();
//Sheet settings
sheet = workBook.createSheet();
workBook.setSheetName(0, "Multiplication table");
sheet = workBook.getSheet("Multiplication table");
//Create initial line
XSSFRow row = sheet.createRow(2);
//"Title" cell style settings
XSSFCellStyle titleCellStyle = workBook.createCellStyle();
XSSFCell cell = row.createCell(7);
XSSFFont titleFont = workBook.createFont();
titleFont.setFontName("MS gothic");
titleFont.setFontHeightInPoints((short)36);
titleFont.setUnderline(XSSFFont.U_SINGLE);
titleCellStyle.setFont(titleFont);
cell.setCellStyle(titleCellStyle);
//Set "Title" in cell
cell.setCellValue("Multiplication table");
//Cell style settings for "Table Header"
XSSFCellStyle headerCellStyle = workBook.createCellStyle();
XSSFFont headerFont = workBook.createFont();
headerFont.setFontName("MS gothic");
headerFont.setFontHeightInPoints((short)25);
headerCellStyle.setFont(headerFont);
headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
headerCellStyle.setAlignment(HorizontalAlignment.CENTER);
headerCellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.index);
headerCellStyle.setBorderTop(BorderStyle.MEDIUM);
headerCellStyle.setBorderBottom(BorderStyle.MEDIUM);
headerCellStyle.setBorderRight(BorderStyle.MEDIUM);
headerCellStyle.setBorderLeft(BorderStyle.MEDIUM);
//Set "table header" in cell
row = sheet.createRow(5);
//side
for(int i = 3 , j = 0; i < 13 ; i++, j++) {
cell = row.createCell(i);
cell.setCellStyle(headerCellStyle);
if(i == 3) {
cell.setCellValue("");
}else {
cell.setCellValue(j);
}
}
//Vertical
for(int i = 6 , j = 1 ; i < 15 ; i++, j++) {
row = sheet.createRow(i);
cell = row.createCell(3);
cell.setCellStyle(headerCellStyle);
cell.setCellValue(j);
}
//Cell style setting of "calculation result"
XSSFCellStyle resultCellStyle = workBook.createCellStyle();
XSSFFont resultFont = workBook.createFont();
resultFont.setFontName("MS gothic");
resultFont.setFontHeightInPoints((short)25);
resultCellStyle.setFont(resultFont);
resultCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
resultCellStyle.setAlignment(HorizontalAlignment.CENTER);
resultCellStyle.setFillForegroundColor(IndexedColors.WHITE.index);
resultCellStyle.setBorderTop(BorderStyle.MEDIUM);
resultCellStyle.setBorderBottom(BorderStyle.MEDIUM);
resultCellStyle.setBorderRight(BorderStyle.MEDIUM);
resultCellStyle.setBorderLeft(BorderStyle.MEDIUM);
//Set "table header" in cell
double num1 = 0;
double num2 = 0;
double result = 0;
for(int i = 6 ; i < 15 ; i++) {
for(int j = 4 ; j < 13 ; j++) {
//Multiplication table calculation
num1 = sheet.getRow(5).getCell(j).getNumericCellValue();
num2 = sheet.getRow(i).getCell(3).getNumericCellValue();
result = num1 * num2;
row = sheet.getRow(i);
cell = row.createCell(j);
cell.setCellStyle(resultCellStyle);
cell.setCellValue(result);
}
}
//Output excel file
try {
//Get the current date
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
//Specifying the file path and file name
outPutFilePath = "File path you want to output";
outPutFileName = "kuku_" + dateFormat.format(date).toString() + ".xlsx";
//Output excel file
outPutFile = new FileOutputStream(outPutFilePath + outPutFileName);
workBook.write(outPutFile);
System.out.println("「" + outPutFilePath + outPutFileName + "Was output.");
}catch(IOException e) {
System.out.println(e.toString());
}
}catch(Exception e) {
System.out.println(e.toString());
}
}
}
This time, I used "Apache POI" for the first time, I felt that the operation was easier and easier to use than I expected. I can't deny the feeling of groping, so I will continue to study.
Recommended Posts