1.Apache POI的组件
Apache POI包含用于处理了Office的所有OLE2符合文档的类和方法。该API的组件列表如下。
POIFS → 该组件时所有其他POI元素的基本要素。他用于显式读取不同的文件。HSSF → 用于读写xls格式的excel文件XSSF → 用于读写xlsx格式的excel文件HPSF → 它用于提取Office文件的属性集HWPF → 用于读写Word的doc扩展的文件。XWPF → 用于读写Word的docx扩展的文件。HSLF → 用户阅读,创建和编辑PowerPoint演示文稿。HDGF → 他包含Ms-Visio二进制的类和方法HPDF → 它用于读取和写入MS-Publisher文件。
本文只介绍Java处理Excel文件的过程。因此,仅限于HSSF和XSSF组件。
2. POI的核心类
2.1 Workbook
这是创建或维护Excel工作簿的所有类的超级接口。它属于org.apache.poi.ss.usermode包。实现这个接口的两个类如下:
HSSFWorkbook:此类具有读取和写入【xls】格式的excel文件的方法。XSSFWorkbook:此类具有读取和写入【xls,xlsx】格式的文件的方法。
2.2 HSSFWorkbook
它是org.apache.poi.hssf.usermodel包下的高级类。它实现了Workbook接口,用于【xls】格式的excel文件。下面列出了该类下的一些方法和构造函数。
类构造函数:
序号类构造函数描述1HSSFWorkbook()从头开始创建一个新的HSSFWorkbook对象。2HSSFWorkbook(DirectoryNode directory, boolean preserverNodes)在特定目录中创建一个新的HSSFWorkbook对象。3HSSFWorkbook(DirectoryNode directory, POIFSFileSystem fs, boolean preserveNodes)给定一个POIFSFileSystem对象和其中的特定目录,它会创建一个SSFWorkbook对象来读取指定的工作簿。4HSSFWorkbook(InputStream s)使用输入流创建一个新的HSSFWorkbook对象。5HSSFWorkbook(InputStream s, boolean preserveNodes)围绕输入流构建POI文件系统6HSSFWorkbook(POIFSFileSystem fs)使用POIFSFile对象构造一个新的HSSFWorkbook对象7HSSFWorkbook(POIFSFileSystem fs, boolean preserveNodes)给定一个POIFSFileSystem对象,它会创建一个新的HSSFWorkbook对象来读取指定的工作簿
这些构造函数中经常使用的参数:
directory:它是要处理的POI文件系统目录。
fs:它是包含工作簿的POI文件系统。
preservenodes:这是一个可选参数,决定是否保留其他节点,如宏。它消耗大量内存。
2.3 XSSFWorkbook
它是一个用于表示高级和低级excel文件格式的类。它属于org.apache.xssf.usermodel包,实现了Workbook接口。下面列出了这个类下的方法和构造函数。
类构造函数
序号构造函数描述1XSSFWorkbook()从头开始创建一个新的XSSFworkbook对象2XSSFWorkbook(File file)从给定的文件构造一个XSSFWorkbook对象3XSSFWorkbook(InputStream is)构造一个XSSFWorkbook对象,方法是将整个输入流缓冲到内存中,然后为其打开一个OPCPackage对象。4XSSFWorkbook(String path)在给定的文件的完整路径的情况下构造一个XSSFWorkbook对象。
类方法
序号方法描述1createSheet()为此工作簿创建一个XSSFSheet,将其添加到工作表中,并返回高级表示。2createSheet(String sheetName)为此工作簿创建一个新工作表并返回高级表示。3createFont()创建新字体并添加到工作簿的字体表中。4createCellStyle()创建一个新的XSSFCellStyle并将其添加到工作簿的样式表中。5setPrintArea(int sheetIndex, int startColumn, int endColumn, int startRow, int endRow)根据指定参数设置给定工作簿的打印区域。
2.4 Sheet
Sheet是org.apache.poi.ss.usermodel包下的一个接口,它是创建具有特定名称的高级或低级电子表格的所有类的超级接口。最常见的电子表格类型是工作表,它表示为单元格网格。
2.5 HSSFSheet
这是org.apache.poi.hssf.usermodel包下的一个类。它可以创建excel电子表格,并允许格式化工作表样式和工作表数据。
类构造函数
序号构造函数描述1HSSFSheet(HSSFWorkbook workbook)创建由HSSFWorkbook调用的新HSSFSheet以从头开始创建工作表。2HSSFSheet(HSSFWorkboot workbook, InternalSheet sheet)创建一个表示给定工作表对象的HSSFSheet。
2.6 XSSFSheet
这是一个代表excel电子变革的高级表示的类。它在org.apache,poi,hssf.usermodel包下。
类构造函数
序号构造函数描述1XSSFSheet()创建一个新的XSSFSheet对象由XSSFWorkbook调用以从头开始创建工作表。2XSSFSheet(PaceagePart part, PackageRelationship rel)创建一个表示给定包部分和关系的XSSFSheet。
类方法
序号方法描述1addMergedRegion(CellRangeAddress region)添加单元格的合并区域2autoSizeColumn(int column)调整列宽以适合内容3iterator()此方法是rowIterator()的别名,以允许foreach循环4addHyperlink(XSSFHyperlink hyperlink)在此工作表上的超链接结合中注册一个超链接。
2.7 Row
这个是电子表格行的高级表示。它是POI库中行的所有类的超级接口
2.8 XSSFRow
它实现了Row接口,因此它可以在电子表格中创建行。
类方法
序号方法描述1createCell(int columnIndex)在行内创建新单元格并将其返回2setHeight(short height)设置行高度
2.9 Cell
它是代表电子表格行中单元格的所有类的超级接口。单元格可以采用各种属性,例如空白,数字,日期,错误等。在添加到行之前,端元个应该有自己的数字(从0开始)。
2.10 XSSFCell
它实现了Cell接口。他是电子表格行中单元格的高级表示。
序号方法描述1setCellStyle(CellStyle style)设置单元格的样式。2setCellType(int cellType)设置单元格的类型(数字,公式或字符串)3setCellValue(boolean value)为单元格设置一个布尔值4setCellValue(Calendar value)设置单元格的日期值5setCellValue(double value)设置单元格个的数值6setCellValue(String str)为单元格设置一个字符串值7setHyperlink(Hyperlink hyperlink)分配一个超链接到这个单元格
2.11 XSSFCellStyle
它将提供有关电子表格中内容格式的可能星系。它提供了用于修改该格式的选项。它实现了CellStyle接口。
类构造函数
序号构造函数 描述1XSSFCellStyle(int cellXfId, int cellStyleXfId, StylesTable styleSource, ThemesTable theme)从提供的部件创建单元格样式。2XSSFCellStyle(StylesTable stylesSource)创建一个空的单元格样式
类方法
序号方法描述1setAlignment(short align)设置单元格的水平对齐类型2setBorderBottom(short border)设置单元格个底部边框类型3setBorderColor(BorderSide side, XSSFColor color)设置选定边框的颜色4setBorderLeft(short border)设置单元格左边框的边框格式5setBorderRight(short border)设置单元格有边框的边框格式6setBorderTop(short border)设置单元格上边框的边框格式7setFillBackgroundColor(XSSFColor color)设置表示为XSSFColor值得背景填充颜色8setFillForegroundColor(XSSFColor color)设置表示为XSSFColor值得前景填充颜色9setFillPattern(short fp)指定图案和纯色单元格填充得单元格填充信息10setFont(Font font)设置此样式得字体11setRotation(short rotation)设置单元格中文得旋转度数12setVerticalAlignment(short align)设置单元格得垂直对齐格式
2.12 XSSFont
它实现了Font接口,因此它可以处理工作薄中得不同字体。
类构造函数
序号构造函数描述1XSSFFont()创建一个字体对象
方法
序号方法描述1setBold(boolean bold)设置字体是否为粗体2setColor(short color)设置字体的索引颜色3setColor(XSSFColor color)以标准RGB颜色设置字体颜色4setFontHeight(short height)以磅为单位设置字体高度5setFontName(String name)设置字体的名称6setItalic(boolean italic)设置紫铜是否为斜体
3. POI工作薄
3.1 创建空白工作簿
import java.io.*;
import org.apache.poi.xssf.usermodel.*;
public class CreateWorkBook {
public static void main(String[] args)throws Exception {
//创建一个空的工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
//创建一个的文件名称
FileOutputStream out = new FileOutputStream(new File("createworkbook.xlsx"));
//使用文件输出对象写入操作工作簿
workbook.write(out);
out.close();
System.out.println("createworkbook.xlsx written successfully");
}
}
3.2 打开现有的工作薄
import java.io.*;
import org.apache.poi.xssf.usermodel.*;
public class OpenWorkBook {
public static void main(String args[])throws Exception {
try {
File file = new File("openworkbook.xlsx");
FileInputStream fIP = new FileInputStream(file);
//获取XLSX文件的工作簿实例
XSSFWorkbook workbook = new XSSFWorkbook(fIP);
if(file.isFile() && file.exists()) {
System.out.println("openworkbook.xlsx file open successfully.");
} else {
System.out.println("Error to open openworkbook.xlsx file.");
}
} catch(Exception e) {
System.out.println("Error to open openworkbook.xlsx file." + e.getMessage());
}
}
}
4. POI电子表格
创建电子表格,先创建一个workbook,然后我们就可以继续创建sheet了。
以下是创建电子表格的代码段
//创建一个空的工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
//创建一个空的sheet
XSSFSheet spreadsheet = workbook.createSheet("Sheet Name");
4.1 写入电子表格
考虑一个员工数据的例子,
Emp IdEmp NameDesignationTp01GopalTechnical ManagerTP02ManishaProof ReaderTp03MasthanTechnical WriterTp04SatishTechnical WriterTp05KrishnaTechnical Writer
代码片段
import java.io.File;
import java.io.FileOutputStream;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Writesheet {
public static void main(String[] args) throws Exception {
//创建一个新的工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
//创建一个新的sheet
XSSFSheet spreadsheet = workbook.createSheet(" Employee Info ");
//创建一行
XSSFRow row;
//定义要输出的数据
Map < String, Object[] > empinfo = new TreeMap < String, Object[] >();
empinfo.put( "1", new Object[] { "EMP ID", "EMP NAME", "DESIGNATION" });
empinfo.put( "2", new Object[] { "tp01", "Gopal", "Technical Manager" });
empinfo.put( "3", new Object[] { "tp02", "Manisha", "Proof Reader" });
empinfo.put( "4", new Object[] { "tp03", "Masthan", "Technical Writer" });
empinfo.put( "5", new Object[] { "tp04", "Satish", "Technical Writer" });
empinfo.put( "6", new Object[] { "tp05", "Krishna", "Technical Writer" });
Set < String > keyid = empinfo.keySet();
int rowid = 0;
for (String key : keyid) {
row = spreadsheet.createRow(rowid++);
Object [] objectArr = empinfo.get(key);
int cellid = 0;
for (Object obj : objectArr) {
Cell cell = row.createCell(cellid++);
cell.setCellValue((String)obj);
}
}
FileOutputStream out = new FileOutputStream(new File("Writesheet.xlsx"));
workbook.write(out);
out.close();
System.out.println("Writesheet.xlsx written successfully");
}
}
4.2 从电子表格中读取数据
import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Readsheet {
static XSSFRow row;
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream(new File("WriteSheet.xlsx"));
XSSFWorkbook workbook = new XSSFWorkbook(fis);
XSSFSheet spreadsheet = workbook.getSheetAt(0);
Iterator < Row > rowIterator = spreadsheet.iterator();
while (rowIterator.hasNext()) {
row = (XSSFRow) rowIterator.next();
Iterator < Cell > cellIterator = row.cellIterator();
while ( cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case NUMERIC:
System.out.print(cell.getNumericCellValue() + " \t\t ");
break;
case STRING:
System.out.print(
cell.getStringCellValue() + " \t\t ");
break;
}
}
System.out.println();
}
fis.close();
}
}
5. POI单元格
5.1 创建一个单元格
//create new workbook
XSSFWorkbook workbook = new XSSFWorkbook();
//create spreadsheet with a name
XSSFSheet spreadsheet = workbook.createSheet("new sheet");
//create first row on a created spreadsheet
XSSFRow row = spreadsheet.createRow(0);
//create first cell on created row
XSSFCell cell = row.createCell(0);
5.2 单元格类型
单元格类型指定单元格是否可以包含字符串、数值或公式。 字符串单元格不能保存数值,数字单元格不能保存字符串。
以下代码用于在电子表格中创建不同类型的单元格。
import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class TypesofCells {
public static void main(String[] args)throws Exception {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet spreadsheet = workbook.createSheet("cell types");
XSSFRow row = spreadsheet.createRow((short) 2);
row.createCell(0).setCellValue("Type of Cell");
row.createCell(1).setCellValue("cell value");
row = spreadsheet.createRow((short) 3);
row.createCell(0).setCellValue("set cell type BLANK");
row.createCell(1);
row = spreadsheet.createRow((short) 4);
row.createCell(0).setCellValue("set cell type BOOLEAN");
row.createCell(1).setCellValue(true);
row = spreadsheet.createRow((short) 5);
row.createCell(0).setCellValue("set cell type date");
row.createCell(1).setCellValue(new Date());
row = spreadsheet.createRow((short) 6);
row.createCell(0).setCellValue("set cell type numeric");
row.createCell(1).setCellValue(20 );
row = spreadsheet.createRow((short) 7);
row.createCell(0).setCellValue("set cell type string");
row.createCell(1).setCellValue("A String");
FileOutputStream out = new FileOutputStream(new File("typesofcells.xlsx"));
workbook.write(out);
out.close();
System.out.println("typesofcells.xlsx written successfully");
}
}
5.3 单元格样式
您可以在这里学习如何设置单元格格式并应用不同的样式,例如合并相邻单元格、添加边框、设置单元格对齐方式和填充颜色。
以下代码用于使用 Java 编程将不同的样式应用于单元格。
import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.Color;
import org.apache.poi.ss.usermodel.FillPatternType;
public class CellStyle {
public static void main(String[] args)throws Exception {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet spreadsheet = workbook.createSheet("cellstyle");
XSSFRow row = spreadsheet.createRow((short) 1);
row.setHeight((short) 800);
XSSFCell cell = (XSSFCell) row.createCell((short) 1);
cell.setCellValue("test of merging");
//MEARGING CELLS
//this statement for merging cells
spreadsheet.addMergedRegion(
new CellRangeAddress(
1, //first row (0-based)
1, //last row (0-based)
1, //first column (0-based)
4 //last column (0-based)
)
);
//CELL Alignment
row = spreadsheet.createRow(5);
cell = (XSSFCell) row.createCell(0);
row.setHeight((short) 800);
// Top Left alignment
XSSFCellStyle style1 = workbook.createCellStyle();
spreadsheet.setColumnWidth(0, 8000);
style1.setAlignment(HorizontalAlignment.LEFT);
style1.setVerticalAlignment(VerticalAlignment.TOP);
cell.setCellValue("Top Left");
cell.setCellStyle(style1);
row = spreadsheet.createRow(6);
cell = (XSSFCell) row.createCell(1);
row.setHeight((short) 800);
// Center Align Cell Contents
XSSFCellStyle style2 = workbook.createCellStyle();
style2.setAlignment(HorizontalAlignment.CENTER);
style2.setVerticalAlignment(VerticalAlignment.CENTER);
cell.setCellValue("Center Aligned");
cell.setCellStyle(style2);
row = spreadsheet.createRow(7);
cell = (XSSFCell) row.createCell(2);
row.setHeight((short) 800);
// Bottom Right alignment
XSSFCellStyle style3 = workbook.createCellStyle();
style3.setAlignment(HorizontalAlignment.RIGHT);
style3.setVerticalAlignment(VerticalAlignment.BOTTOM);
cell.setCellValue("Bottom Right");
cell.setCellStyle(style3);
row = spreadsheet.createRow(8);
cell = (XSSFCell) row.createCell(3);
// Justified Alignment
XSSFCellStyle style4 = workbook.createCellStyle();
style4.setAlignment(HorizontalAlignment.JUSTIFY);
style4.setVerticalAlignment(VerticalAlignment.JUSTIFY);
cell.setCellValue("Contents are Justified in Alignment");
cell.setCellStyle(style4);
//CELL BORDER
row = spreadsheet.createRow((short) 10);
row.setHeight((short) 800);
cell = (XSSFCell) row.createCell((short) 1);
cell.setCellValue("BORDER");
XSSFCellStyle style5 = workbook.createCellStyle();
style5.setBorderBottom(BorderStyle.THICK);
style5.setBottomBorderColor(IndexedColors.BLUE.getIndex());
style5.setBorderLeft(BorderStyle.DOUBLE);
style5.setLeftBorderColor(IndexedColors.GREEN.getIndex());
style5.setBorderRight(BorderStyle.HAIR);
style5.setRightBorderColor(IndexedColors.RED.getIndex());
style5.setBorderTop(BorderStyle.DOTTED);
style5.setTopBorderColor(IndexedColors.CORAL.getIndex());
cell.setCellStyle(style5);
//Fill Colors
//background color
row = spreadsheet.createRow((short) 10 );
cell = (XSSFCell) row.createCell((short) 1);
XSSFCellStyle style6 = workbook.createCellStyle();
style6.setFillBackgroundColor(IndexedColors.LIME.index);
style6.setFillPattern(FillPatternType.LESS_DOTS);
style6.setAlignment(HorizontalAlignment.FILL);
spreadsheet.setColumnWidth(1,8000);
cell.setCellValue("FILL BACKGROUNG/FILL PATTERN");
cell.setCellStyle(style6);
//Foreground color
row = spreadsheet.createRow((short) 12);
cell = (XSSFCell) row.createCell((short) 1);
XSSFCellStyle style7 = workbook.createCellStyle();
style7.setFillForegroundColor(IndexedColors.BLUE.index);
style7.setFillPattern( FillPatternType.LESS_DOTS);
style7.setAlignment(HorizontalAlignment.FILL);
cell.setCellValue("FILL FOREGROUND/FILL PATTERN");
cell.setCellStyle(style7);
FileOutputStream out = new FileOutputStream(new File("cellstyle.xlsx"));
workbook.write(out);
out.close();
System.out.println("cellstyle.xlsx written successfully");
}
}
精彩链接
发表评论