用poi把数据导出excel(java导出excel之使用poi)
用poi把数据导出excel(java导出excel之使用poi)HPSF (属性设置格式) : 它用来提取MS-Office文件属性设置。XSSF (XML格式) : 它是用于MS-Excel中XLSX文件格式。Apache POI包含类和方法,来将MS Office所有OLE 2文档复合。此API组件的列表如下。POIFS (较差混淆技术实现文件系统) : 此组件是所有其他POI元件的基本因素。它被用来明确地读取不同的文件。HSSF (电子表格格式) : 它被用来读取和写入MS-Excel文件的xls格式。
很多时候,一个软件应用程序需要生成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扩展名的文件。
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列
示例代码
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的相关知识,留待以后研究。