一、简介:
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
二、常用类(基本功能):
HSSF - 提供读写 Excel 格式文档的功能。
XSSF - 提供读写 Excel OOXML 格式文档的功能。
HWPF - 提供读写 Word 格式文档的功能。
HSLF - 提供读写 PowerPoint 格式档案的功能。
HDGF - 提供读写 Visio 格式档案的功能。
由于我们开发中经常用到的是对Excel的处理,因此以本篇文章只提供HSSF这个类的常用方法的说明和简单的代码示例。
三、HSSF 常用类和方法:
HSSFWorkbook :工作簿类,代表一个Excel文档
HSSFWorkbook(); // 创建一个新的工作簿
HSSFWorkbook(InputStream inputStream); // 创建一个带有输入流的工作簿,可以将一个excel文件封装成工作簿
createSheet(String sheetname); // 创建一个新的Excel Sheet
getSheet(String sheetName); // 通过sheet名字来获取Sheet
getSheetAt(int index); // 通过索引获取Sheet
createCellStyle(); // 创建单元格样式
getNumberOfSheets(); //获取整个Excel表中sheet的个数
setActiveSheet(int index); //设置默认选中的sheet
write();
write(File newFile);
write(OutputStream stream);
HSSFSheet:工作表,代表Excel中的Shee
createRow(int rownum); // 创建新行,需要指定行号,行号从0开始
getRow(int index); // 根据索引获取指定的行
addMergedRegion(CellRangeAddress region); // 合并单元格
CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol); // 单元格范围, 用于合并单元格
autoSizeColumn(int column); // 自动调整列的宽度来适应内容
getLastRowNum(); // 获取最后的行的索引,没有行或者只有一行的时候返回0
setColumnWidth(int columnIndex, int width); // 设置某一列的宽度,width=字符个数 * 256
HSSFRow :行
createCell(int column); // 创建新的单元格
setCell(shot index);
getCell(shot index);
setRowStyle(HSSFCellStyle style); // 设置行样式
short getLastCellNum(); // 获取最后的单元格号
setHeightInPoints(float height); // 设置行的高度
HSSFCell:单元格
setCellValue(String value); //设置单元格的值
setCellType(); //设置单元格类型,如 字符串、数字、布尔等
setCellStyle(); //设置单元格样式
getStringCellValue(); //获取单元格中的字符串值
setCellStyle(HSSFCellStyle style); //设置单元格样式,例如字体、加粗、格式化
setCellFormula(String formula); //设置计算公式,计算的结果作为单元格的值
HSSFCellStyle :单元格样式
setFont(Font font); //为单元格设置字体样式
setAlignment(HorizontalAlignment align); //设置水平对齐方式
setVerticalAlignment(VerticalAlignment align); //设置垂直对齐方式
setFillPattern(FillPatternType fp);
setFillForegroundColor(short bg); //设置前景色
setFillBackgroundColor(short bg); //设置背景颜色
HSSFFont:字体
setColor(short color); // 设置字体颜色
setBold(boolean bold); // 设置是否粗体
setItalic(boolean italic); // 设置倾斜
setUnderline(byte underline); // 设置下划线
HSSFName: //名称
HSSFDataFormat : //日期格式化
HSSFHeader : //Sheet的头部
HSSFFooter : //Sheet的尾部
HSSFDateUtil : //日期工具
HSSFPrintSetup : //打印设置
HSSFErrorConstants: //错误信息表
四、代码示例:
/**
* 此代码为Groovy代码
*/
class PoiExcelTools {
/** Config your folder path here*/
public static final targetFolderPath = "D:\\POIDemo\\"
public static void main(String[] args) {
PoiExcelTools tools = new PoiExcelTools()
//准备测试数据
Map<String,String> excelContentMap = ["key1":"value1","key2":"value2"]
//创建Excel表格
tools.createExcel(excelContentMap)
}
/**
* 创建Excel
* @param excelContentMapList
* @return
*/
private void createExcel(Map excelContentMap){
String excelFileName = targetFolderPath + "ExcelTest_" + new Date().getTime() +".xls"
String sheetName = "ExcelContentSheet"
//创建Excel工作簿
HSSFWorkbook hssfWorkbook = new HSSFWorkbook()
HSSFSheet excelSheet = hssfWorkbook.createSheet(sheetName)
//设置默认列宽
excelSheet.setDefaultColumnWidth(50)
//行
HSSFRow hssfRow = null
//列
HSSFCell hssfCell = null
//创建表头 , 此处以测试数据中的key作为表头
if (excelContentMap?.size() > 0){
def excelHeader = excelContentMap?.keySet()
hssfRow = excelSheet?.createRow(0)
excelHeader?.eachWithIndex {currentKey ,currentIndex->
hssfCell = hssfRow?.createCell(currentIndex)
hssfCell.setCellValue((String)currentKey)
setHeaderCellStyle(hssfWorkbook,hssfCell)
}
}
//创建表格内容,此处以测试数据的Value作为表格内容
excelContentMap?.eachWithIndex{ currentCell, currentCellIndex ->
hssfRow = excelSheet?.createRow(1)
hssfCell = hssfRow.createCell(currentCellIndex)
hssfCell.setCellValue((String)currentCell.value)
}
FileOutputStream fileOutputStream = new FileOutputStream(excelFileName)
hssfWorkbook.write(fileOutputStream)
}
/**
* 设置表头单元格样式
* @param hssfWorkbook
* @param hssfCell
*/
private void setHeaderCellStyle(HSSFWorkbook hssfWorkbook,HSSFCell hssfCell) {
HSSFCellStyle hssfCellStyle = hssfWorkbook.createCellStyle()
hssfCellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND)
hssfCellStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex())
hssfCellStyle.setWrapText(true)
HSSFFont hssfFont = hssfWorkbook.createFont()
hssfFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD)
hssfCellStyle.setFont(hssfFont)
hssfCell.setCellStyle(hssfCellStyle)
}
}
五、官方文档:
更多用法,可以参考官方文档:http://poi.apache.org/apidocs/index.html
Thank All !