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");

}

}

精彩链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。