使用poi导出Excel

很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告。有时,一个应用程序甚至希望将Excel文件作为输入数据。

常见的java Excel  API

Java Aspose Cells
Java Aspose Cells 是一种纯粹的Java授权的Excel API,开发和供应商Aspose发布。这个API的最新版本是8.1.2,发布于2014年7月,是一个丰富而厚重的API(普通Java类和AWT类的组合)设计,可以读、写和操纵电子表格Excel的组件。此API常见用途如下:
Excel报表,建立动态Excel报表
高保真的Excel渲染和打印
从Excel电子表格中导入和导出数据
生成,编辑,转换和电子表格


JXL
JXL是一款专为Selenium第三方框架,支持基于Web浏览器(数据是Web浏览器自动更新)数据驱动的自动化。然而,它也被用来作为JExcel API的一个共同的支持库,因为它的基本功能是可创建,读取和写入电子表格。基本特征如下:
生成Excel文件
从工作簿和电子表格导入数据
获得行和列的总数
注意:JXL只支持xls档案格式,并且不能处理大数据量。


JExcel
JExcel是由Team Dev开发提供纯行货API。利用这一点程序员可以很容易地读取,写入,显示和修改Excel工作簿中的两种格式:.xls和.XLSX。这个API可以很容易地嵌入Java的Swing和AWT。这个API的最新版本是Jexcel-2.6.12,发布于2009年,主要特点如下。
自动化Excel应用程序,工作簿,工作表等
在Java Swing应用程序作为普通的Swing组件嵌入到工作簿
事件侦听器添加到工作簿和电子表格
添加事件处理程序来处理的工作簿和电子表格事件的行为
添加本地对等开发定制功能


Apache POI
Apache POI是Apache软件基金会提供的100%开源库。大多数中小规模的应用程序开发主要依赖于Apache POI(HSSF+ XSSF)。它支持Excel 库的所有基本功能; 然而,呈现和文本提取是它的主要特点。


现在常用的解析excel的API主要有jxl和poi,本文主要研究关于poi的相关知识。

POI简介

Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类和方法对用户输入数据或文件到MS Office文档进行解码。


Apache POI组件
Apache POI包含类和方法,来将MS Office所有OLE 2文档复合。此API组件的列表如下。


POIFS (较差混淆技术实现文件系统) : 此组件是所有其他POI元件的基本因素。它被用来明确地读取不同的文件。


HSSF (电子表格格式) : 它被用来读取和写入MS-Excel文件的xls格式。


XSSF (XML格式) : 它是用于MS-Excel中XLSX文件格式。


HPSF (属性设置格式) : 它用来提取MS-Office文件属性设置。


HWPF (字处理器格式) : 它是用来读取和写入MS-Word的文档扩展名的文件。


XWPF (XML字处理器格式) : 它是用来读取和写入MS-Word的docx扩展名的文件。


HSLF (幻灯片版式格式) : 它是用于读取,创建和编辑PowerPoint演示文稿。


HDGF (图表格式) : 它包含类和方法为MS-Visio的二进制文件。


HPBF (出版商格式) : 它被用来读取和写入MS-Publisher文件。

HSSF概况

            HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。
POI EXCEL文档结构类
            HSSFWorkbook excel文档对象
            HSSFSheet excel的sheet HSSFRow excel的行
            HSSFCell excel的单元格 HSSFFont excel字体
            HSSFName 名称 HSSFDataFormat 日期格式
            HSSFHeader sheet头
            HSSFFooter sheet尾
            HSSFCellStyle cell样式
            HSSFDateUtil 日期
            HSSFPrintSetup 打印
            HSSFErrorConstants 错误信息表

知识体系

使用poi导出Excel_第1张图片

 EXCEL常用操作方法

  1、 得到Excel常用对象           

POIFSFileSystem fs=newPOIFSFileSystem(new FileInputStream("d:/test.xls"));   
//得到Excel工作簿对象    
HSSFWorkbook wb = new HSSFWorkbook(fs);  
//得到Excel工作表对象    
HSSFSheet sheet = wb.getSheetAt(0);   
//得到Excel工作表的行    
HSSFRow row = sheet.getRow(i);  
//得到Excel工作表指定行的单元格    
HSSFCell cell = row.getCell((short) j);  
cellStyle = cell.getCellStyle();//得到单元格样式  


 2、建立Excel常用对象

HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象   
HSSFSheet sheet = wb.createSheet("new sheet");//创建Excel工作表对象     
HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行   
cellStyle = wb.createCellStyle();//创建单元格样式   
row.createCell((short)0).setCellStyle(cellStyle); //创建Excel工作表指定行的单元格   
row.createCell((short)0).setCellValue(1); //设置Excel工作表的值  

3、设置列宽、行高
 
[
sheet.setColumnWidth((short)column,(short)width);      
row.setHeight((short)height); 

4、保存Excel文件
 

FileOutputStream fileOut = new FileOutputStream(path);   
wb.write(fileOut); 


5、常用单元格边框格式
 

HSSFCellStyle style = wb.createCellStyle();      
style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下边框        
style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框        
style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框        
style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框


6.设置不显示excel网格线 
  sheet.setDisplayGridlines(false);其中sheet是Sheet对象 
7.设置excel单元格中的内容换行 
  cellStyle.setWrapText(true);其中cellStyle是WorkBook创建的CellStyle对象,然后将cellStyle设置到要换行的Cell对象,最后在要换行的对象(一般为字符串)加入"/r/n"。如 
topTile.append("/r/n" +"cellContent"); 


8.单元格的合并 
  sheet.addMergedRegion(new CellRangeAddress(0, 4, 0, 2));本示例为合并4行2列 


示例代码

使用poi需要导入poi相关的jar,本例使用的是poi-3.10-FINAL-20140208.jar,现在最新版本为poi-3.15.jar

package com.company.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;

public class MergedCells
{
  public static void main(String[] args)
    throws IOException
  {
	//创建工作簿
    HSSFWorkbook wb = new HSSFWorkbook();
    //创建工作表
    HSSFSheet sheet = wb.createSheet("new sheet");
    for(int i=0;i<3;i++){
    	//设置列宽
    	sheet.setColumnWidth(i, 3000);
    }
    //创建行 
    HSSFRow row = sheet.createRow(0);
    row.setHeightInPoints(30);//设置行高
    //创建单元格
    HSSFCell cell = row.createCell(0);
    cell.setCellValue("用户信息表");
    //标题样式
    // 创建单元格样式
    HSSFCellStyle cellStyle = wb.createCellStyle();
    // 设置单元格的背景颜色为淡蓝色
    cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
    cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    // 设置单元格居中对齐
    cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    // 设置单元格垂直居中对齐
    cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    // 创建单元格内容显示不下时自动换行
    cellStyle.setWrapText(true);
    // 设置单元格字体样式
    HSSFFont font = wb.createFont();
    // 设置字体加粗
    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    font.setFontName("宋体");
    font.setFontHeight((short) 200);
    cellStyle.setFont(font);
    // 设置单元格边框为细线条
    cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
    cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
    //设置单元格样式
    cell.setCellStyle(cellStyle);
    //合并单元格
    sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));
    
    HSSFRow row1 = sheet.createRow(1);
    //标题信息
  	String[] titles = {"ID","用户名","密码"};
  	for(int i=0;i<3;i++){
  		HSSFCell cell1 = row1.createCell(i);
  		cell1.setCellValue(titles[i]);
  		//设置单元格样式
  	    cell1.setCellStyle(cellStyle);
  	}

  	//模拟数据,实际情况下String[]多为实体bean
  	List list = new ArrayList();
  	list.add(new String[]{"1","zhangsan","111"});
  	list.add(new String[]{"2","lisi","222"});
  	list.add(new String[]{"3","wangwu","333"});

  	///内容样式
  	// 创建单元格样式
  	HSSFCellStyle cellStyle2 = wb.createCellStyle();
    // 设置单元格居中对齐
    cellStyle2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    // 设置单元格垂直居中对齐
    cellStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
    // 创建单元格内容显示不下时自动换行
    cellStyle2.setWrapText(true);
    // 设置单元格字体样式
    HSSFFont font2 = wb.createFont();
    // 设置字体加粗
    font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    font2.setFontName("宋体");
    font2.setFontHeight((short) 200);
    cellStyle2.setFont(font2);
    // 设置单元格边框为细线条
    cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
    cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
  	//循环赋值
  	for(int i=0;i

运行结果

使用poi导出Excel_第2张图片

本文简单介绍了poi的相关知识,并主要研究了使用poi导出excel的相关知识,关于使用poi读取excel以及使用poi操作其他office文件,比如doc的相关知识,留待以后研究。

你可能感兴趣的:(java)