您的位置 首页 java

java导出excel之使用poi

很多时候,一个软件应用程序需要生成Microsoft Excel文件格式的报告。有时,一个应用程序甚至希望将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的单元格 HSSF font excel字体

HSSFName 名称 HSSFDataFormat 日期格式

HSSFHeader sheet

HSSFFooter sheet尾

HSSFCellStyle cell样式

HSSFDateUtil 日期

HSSFPrintSetup 打印

HSSFErrorConstants 错误信息表

知识体系

EXCEL常用操作方法

1、 得到Excel常用对象

POIFSFileSystem fs=newPOIFSFileSystem(new file InputStream(“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列

示例代码

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<String[]> list = new ArrayList<String[]>();

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<list.size();i++){

HSSFRow row2 = sheet.createRow(i+2);

for(int j=0;j<3;j++){

HSSFCell cell1 = row2.createCell(j);

cell1.setCellValue(list.get(i)[j]);

//设置单元格样式

cell1.setCellStyle(cellStyle2);

}

}

File file = new File(“D://a.xls”);

if(!file.exists()){

file.createNewFile();

}

FileOutputStream fileOut = new FileOutputStream(file);

wb.write(fileOut);

fileOut.close();

}

}

运行结果

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

文章来源:智云一二三科技

文章标题:java导出excel之使用poi

文章地址:https://www.zhihuclub.com/184530.shtml

关于作者: 智云科技

热门文章

网站地图