天天看点

apache poi使用简介

apache poi支持java对许多格式的文件进行导入、操作、生成,而poi的几个jar包有各自支持的文件格式,可以选择性导入需要的jar包。具体如下:

Component Application type Maven artifactId Notes
POIFS OLE2 Filesystem poi Required to work with OLE2 / POIFS based files
HPSF OLE2 Property Sets poi
HSSF Excel XLS poi For HSSF only, if common SS is needed see below
HSLF PowerPoint PPT poi-scratchpad
HWPF Word DOC poi-scratchpad
HDGF Visio VSD poi-scratchpad
HPBF Publisher PUB poi-scratchpad
HSMF Outlook MSG poi-scratchpad
OpenXML4J OOXML

poi-ooxml plus one of

poi-ooxml-schemas, ooxml-schemas

Only one schemas jar is needed, see below for differences
XSSF Excel XLSX poi-ooxml
XSLF PowerPoint PPTX poi-ooxml
XWPF Word DOCX poi-ooxml
Common SS Excel XLS and XLSX poi-ooxml WorkbookFactory and friends all require poi-ooxml, not just core poi

详情可以到官网http://poi.apache.org/components/上查看。

使用poi生成excel文件

java使用poi的api生成excel时,有清晰的逻辑过程,每一行代码的操作可以准确对应到在excel文件上的每一个操作。 下面的例子没有解释那么详细,因为很多方法作用熟悉excel的人一眼就看出来了

//创建Workbook 对应一个excel文件
                HSSFWorkbook workbook = new HSSFWorkbook();
//创建sheet 对应excel文件中的sheet
		HSSFSheet sheet = workbook.createSheet("handleKnot");
	//设置列宽 256代表一个字符宽度 10*256代表10个字符宽度
		sheet.setColumnWidth(0, 10*256);
	//生成行	
		Row row_1 = sheet.createRow(0)
	        Row row_2 = sheet.createRow(1)
      //设置行高
                row_1.setHeightInPoints(80);
		row_2.setHeightInPoints(170);
    //生成单元格
		Cell cell_1_1 = row_1.createCell(0);
		Cell cell_2_1 = row_2.createCell(0);
		Cell cell_2_2 = row_2.createCell(1);
  // 配置字体样式
		Font font = workbook.createFont();
		font.setBoldweight(Font.BOLDWEIGHT_BOLD);
		font.setFontHeightInPoints((short)18);
		font.setFontName("黑体");
  // 配置单元格样式
		CellStyle style = workbook.createCellStyle();
		style.setWrapText(true);
		style.setAlignment(CellStyle.ALIGN_CENTER);
		style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
		style.setBorderBottom(CellStyle.BORDER_THIN);
		style.setBorderLeft(CellStyle.BORDER_THIN);
		style.setBorderRight(CellStyle.BORDER_THIN);
		style.setBorderTop(CellStyle.BORDER_THIN);
                style.setFont(font);
	//为单元格配置样式
	        cell_1_1.setCellStyle(style);
		cell_2_1.setCellStyle(style);
		cell_2_2.setCellStyle(style);
// 设置单元格值
                cell_1_1.setCellValue("清远医保医疗智能审核平台(事后)业务办结表");
         	cell_2_1.setCellValue("需处理的业务事项");
//位单元格输入特殊格式值 比如单元格值换行就要如下这样写
                String teString = "mao \r\n kk \r\n justin";
		HSSFRichTextString richTextString = new HSSFRichTextString(teString);
		cell_2_2.setCellValue(richTextString);
// 合并单元格参数时起始行 、终止行、起始列、终止列   	
		CellRangeAddress address1 = new CellRangeAddress(0,0,0,3);
		sheet.addMergedRegion(address1);
//  设置合并单元格的边框 这里要注意被合并的单元格要先生成 在合并 不然这个边框设置不生效
		RegionUtil.setBorderBottom(CellStyle.BORDER_THIN, address1, sheet, workbook);
		RegionUtil.setBorderLeft(CellStyle.BORDER_THIN, address1, sheet, workbook);
		RegionUtil.setBorderRight(CellStyle.BORDER_THIN, address1, sheet, workbook);
		RegionUtil.setBorderTop(CellStyle.BORDER_THIN, address1, sheet, workbook);
// 设置打印页面 		
		PrintSetup printSetup = sheet.getPrintSetup();
		printSetup.setPaperSize(PrintSetup.A4_PAPERSIZE);
           

应用

在生产环境中,大多数的excel都是以一行标题+多行值得形式呈现的,这样再每个单元格设置是相当低效的。

比如要将数据库中查询的数据存到excel中并导出,可以将标题与对应内容在库中查询时的key存在一个list中,再将库中取出的数据key值与list中的key值比对,再存到对应位置。我说的相当粗略,对于每个单元格格式内容的生成都可以包装