POI(JAVA Excel导出功能)

主要应用技术:
Apache POI 是Apache软件基金会开放源码函式库,POI提供API给JAVA程序对Microsoft Office格式档案读和写的功能。
开发的时候要导入poi的支持包


主要知识点:
1、创建新工作薄,创建新Sheet页,创建单元格
2、创建一个时间格式的单元格、处理不同内容格式的单元格、遍历工作薄的行和列并获取单元格内容、文本提取
3、单元格对齐方式、单元格边框处理、单元格填充色和颜色操作、单元格合并
4、字体处理,读取和重写工作薄


 应用场景:
1、B/S架构中web服务器动态生成excel文档供用户下载 
2、C/S架构中动态生成excel文档报表


重要性:
    该案例主要介绍了Java 通过poi操作excel文档的基础知识,通过该案例可以帮助poi零基础的学员快速入门,也是后期深入学习poi的基础。 


代码1:在d盘下创建一个excel文件
package com.etc.poi.step1;


import java.io.FileOutputStream;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;


public class CreateWorkBook {


public static void main(String[] args) throws Exception {
Workbook wb = new HSSFWorkbook();//定义一个新的工作薄
FileOutputStream fileOut = new FileOutputStream("D:\\workbook1.xls");
wb.write(fileOut);
fileOut.close();
}


}




代码2:在d盘下创建一个excel文件,该excel文件中包含两个sheet页
package com.etc.poi.step1;


import java.io.FileOutputStream;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;


public class CreateSheet {
public static void main(String[] args) throws Exception {
Workbook wb = new HSSFWorkbook();//定义一个新的工作薄
wb.createSheet("第一个Sheet页");
wb.createSheet("第二个Sheet页");
FileOutputStream fileOutputStream = new FileOutputStream("D:\\workbook2.xls");
wb.write(fileOutputStream);
fileOutputStream.close();
}
}


 代码3:在d盘下创建一个excel文件,该excel文件中包含1个sheet页,包含四个单元格,并在单元格内写入内容
package com.etc.poi.step1;


import java.io.FileOutputStream;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;


public class CreateCells {


public static void main(String[] args) throws Exception {
Workbook wb = new HSSFWorkbook();//创建一个工作薄
Sheet sheet = wb.createSheet("第一个Sheet页");//创建第一个Sheet页
Row row = sheet.createRow(0);//创建一个行
Cell cell = row.createCell(0);//创建一个单元格,第一列
cell.setCellValue(1);//给单元格设置值
row.createCell(1).setCellValue(1.2);//创建一个单元格,第二列 值是1.2
row.createCell(2).setCellValue(false);//创建一个单元格,第三列,值是false
row.createCell(3).setCellValue("这是一个字符串");//创建一个单元格,第四列,值是 “这是一个字符串”
FileOutputStream fileOutputStream = new FileOutputStream("D:\\workbook2.xls");
wb.write(fileOutputStream);
fileOutputStream.close();
}


}


 代码4:创建日期格式的单元格 输出结果 第一列不是日期格式 第二列 和 第三列 格式内容一致
package com.etc.poi.step2;


import java.io.FileOutputStream;
import java.util.Calendar;
import java.util.Date;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;


public class CreateDateCells {


public static void main(String[] args) throws Exception {
Workbook wb = new HSSFWorkbook();//创建一个工作薄
Sheet sheet = wb.createSheet("第一个Sheet页");//创建第一个Sheet页
Row row = sheet.createRow(0);//创建一个行
Cell cell = row.createCell(0);//创建一个单元格,第一列
cell.setCellValue(new Date());//给单元格设置值
CreationHelper creationHelper = wb.getCreationHelper();
CellStyle cellStyle = wb.createCellStyle();//单元格样式类
cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-mm-dd hh:mm:ss"));
cell = row.createCell(1);//第二列
cell.setCellValue(new Date());
cell.setCellStyle(cellStyle);
cell = row.createCell(2);//第三列
cell.setCellValue(Calendar.getInstance());
cell.setCellStyle(cellStyle);
FileOutputStream fileOutputStream = new FileOutputStream("D:\\workbook3.xls");
wb.write(fileOutputStream);
fileOutputStream.close();
}


}
 
代码5:读取现有excel文档,在控制台打印出来
package com.etc.poi.step2;


import java.io.FileInputStream;
import java.io.InputStream;


import org.apache.poi.hssf.extractor.ExcelExtractor;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;


public class TextExtraction {
public static void main(String[] args) throws Exception {
InputStream inputStream = new FileInputStream("D:\\workbook2.xls");
POIFSFileSystem fs = new POIFSFileSystem(inputStream);
HSSFWorkbook wb = new HSSFWorkbook(fs);
ExcelExtractor excelExtractor = new ExcelExtractor(wb);
excelExtractor.setIncludeSheetNames(false);//不需要sheet名字
System.out.println(excelExtractor.getText());
inputStream.close();
}
}
 
代码6:读取现有excel文档,在控制台打印出来(通过循环迭代的方法)
package com.etc.poi.step2;


import java.io.FileInputStream;
import java.io.InputStream;


import org.apache.poi.hssf.usermodel.HSSFCell;
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.poifs.filesystem.POIFSFileSystem;


public class GettingCellContents {
public static void main(String[] args) throws Exception {
InputStream is = new FileInputStream("D:\\workbook2.xls");
POIFSFileSystem fs = new POIFSFileSystem(is);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet hssfSheet = wb.getSheetAt(0);
if(hssfSheet==null){
return;
}
//编列行Row
for(int rowNum=0;rowNum<=hssfSheet.getLastRowNum();rowNum++){
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if(hssfRow==null){
continue;
}
//遍历Cell
for(int cellNum=0;cellNum<=hssfRow.getLastCellNum();cellNum++){
HSSFCell hssfCell = hssfRow.getCell(cellNum);
if(hssfCell==null){
continue;
}
System.out.print("  " + getValue(hssfCell));
}
System.out.println();
}
is.close();
}

private static String getValue(HSSFCell hssfCell){
if(hssfCell.getCellType()==HSSFCell.CELL_TYPE_BOOLEAN){//如果是boolean类型,转化成string
return String.valueOf(hssfCell.getBooleanCellValue());
}else if(hssfCell.getCellType()==HSSFCell.CELL_TYPE_NUMERIC){//如果是数字类型,转化成string
return String.valueOf(hssfCell.getNumericCellValue());
}else{
return String.valueOf(hssfCell.getStringCellValue());
}
}
}


代码7:设置单元格对齐方式,水平对齐以及垂直对齐方式
package com.etc.poi.step3;


import java.io.FileNotFoundException;
import java.io.FileOutputStream;


import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;


public class CellAlign {

public static void main(String[] args) throws Exception {
Workbook wb = new HSSFWorkbook(); //创建一个工作薄
Sheet sheet = wb.createSheet("第一个Sheet页"); //创建一个Sheet页
Row row = sheet.createRow(2); //创建第一行
row.setHeightInPoints(30); //尺寸是30个点

//HSSFCellStyle.ALIGN_FILL 和 HSSFCellStyle.ALIGN_LEFT差不多 都是左对齐
createCell(wb, row, (short)0, HSSFCellStyle.ALIGN_CENTER, HSSFCellStyle.VERTICAL_BOTTOM);
createCell(wb, row, (short)1, HSSFCellStyle.ALIGN_FILL, HSSFCellStyle.VERTICAL_CENTER);
createCell(wb, row, (short)2, HSSFCellStyle.ALIGN_LEFT, HSSFCellStyle.VERTICAL_TOP);
createCell(wb, row, (short)3, HSSFCellStyle.ALIGN_RIGHT, HSSFCellStyle.VERTICAL_TOP);

FileOutputStream fileOutputStream = new FileOutputStream("D:\\workbook5.xls");
wb.write(fileOutputStream);
fileOutputStream.close();
}
/**

* @param wb
* @param row
* @param column
* @param halign
* @param valign
*/
private static void createCell(Workbook wb,Row row,short column,short halign,short valign){
Cell cell = row.createCell(column);//创建单元格
cell.setCellValue(new HSSFRichTextString("Align It"));//设置默认值
CellStyle cellStyle = wb.createCellStyle();//创建单元格样式
cellStyle.setAlignment(halign);//设置单元格水平对齐方式
cellStyle.setVerticalAlignment(valign);//设置单元格垂直对齐方式
cell.setCellStyle(cellStyle);//设置单元格样式
}
}
 
代码8:设置excel表格单元格边框线的样式及颜色
package com.etc.poi.step3;


import java.io.FileNotFoundException;
import java.io.FileOutputStream;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;


public class CellBorder {
public static void main(String[] args) throws Exception {
Workbook wb = new HSSFWorkbook();//定义一个工作薄
Sheet sheet = wb.createSheet("第一个Sheet页");//创建一个Sheet页
Row row = sheet.createRow(1);//创建第一行

Cell cell = row.createCell(1);//创建第一个单元格
cell.setCellValue(4);//设置单元格内容

CellStyle cellStyle = wb.createCellStyle();

cellStyle.setBorderBottom(CellStyle.BORDER_THIN);//设置底部边框样式 细实线
cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());//设置底部边框颜色

cellStyle.setBorderLeft(CellStyle.BORDER_THIN);//设置左边框样式 细实线
cellStyle.setLeftBorderColor(IndexedColors.GREEN.getIndex());//设置左边框颜色 绿色

cellStyle.setBorderRight(CellStyle.BORDER_THIN);//设置右边框样式 细实线
cellStyle.setRightBorderColor(IndexedColors.BLUE.getIndex());//设置右边框颜色 蓝色

cellStyle.setBorderTop(CellStyle.BORDER_MEDIUM_DASHED);//上边框设置成虚线
cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());//设置上边框颜色 黑色

cell.setCellStyle(cellStyle);//设置单元格样式
FileOutputStream fileOutputStream = new FileOutputStream("D:\\workbook6.xls");
wb.write(fileOutputStream);
fileOutputStream.close();
}
}
 
代码9:设置单元格填充颜色和填充样式
package com.etc.poi.step3;


import java.io.FileNotFoundException;
import java.io.FileOutputStream;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;


public class CellFileColor {
public static void main(String[] args) throws Exception {
Workbook wb = new HSSFWorkbook();//创建一个工作薄
Sheet sheet = wb.createSheet("第一个Sheet页");//创建一个Sheet页
Row row = sheet.createRow(1);//创建第二行

Cell cell = row.createCell(1);//第二行第二列的单元格
cell.setCellValue("XX");//设置值

CellStyle cellStyle = wb.createCellStyle();//创建一种单元格样式
cellStyle.setFillBackgroundColor(IndexedColors.AQUA.getIndex());//设置背景色
cellStyle.setFillPattern(CellStyle.BIG_SPOTS);//设置单元格填充样式
cell.setCellStyle(cellStyle);//将第二行第二列的单元格赋样式

Cell cell2 = row.createCell(2);//第二行第三列的单元格
cell2.setCellValue("YY");//设置值
CellStyle cellStyle2 = wb.createCellStyle();//创建一种单元格样式
cellStyle2.setFillBackgroundColor(IndexedColors.RED.getIndex());//设置背景色
cellStyle2.setFillPattern(CellStyle.BORDER_DOTTED);//设置单元格填充样式
cell2.setCellStyle(cellStyle2);//将第二行第二列的单元格赋样式

FileOutputStream fileOutputStream = new FileOutputStream("D:\\workbook7.xls");
wb.write(fileOutputStream);
fileOutputStream.close();
}
}


代码10:合并单元格
package com.etc.poi.step3;


import java.io.FileNotFoundException;
import java.io.FileOutputStream;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;


public class CellMerge {
public static void main(String[] args) throws Exception {
Workbook wb = new HSSFWorkbook();//设置工作薄
Sheet sheet = wb.createSheet("第一个Sheet页");//设置一个Sheet页
Row row = sheet.createRow(1);//创建第二行

Cell cell = row.createCell(1);//创建第二行第二列的单元格
cell.setCellValue("单元格合并测试!");//为这个单元格赋值

//合并单元格
sheet.addMergedRegion(new CellRangeAddress(
1, //起始行
3, //结束行
1, //其实列
6 //结束列
));

FileOutputStream fileOutputStream = new FileOutputStream("D:\\workbook8.xls");
wb.write(fileOutputStream);
fileOutputStream.close();
}
}
 
代码11:设置excel单元格字体样式
package com.etc.poi.step4;


import java.io.FileOutputStream;
import java.io.IOException;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;


public class CellFont {


public static void main(String[] args) throws Exception {
Workbook wb = new HSSFWorkbook();//创建工作薄
Sheet sheet = wb.createSheet("第一个Sheet页");//创建第一个Sheet页
Row row = sheet.createRow(1);//创建第二行

//创建一个字体
Font font = wb.createFont();
font.setFontHeightInPoints((short)24);//设置字体高度
font.setFontName("Courier New");//设置字体类型
font.setItalic(true);//设置斜体
font.setStrikeout(true);//设置删除线

CellStyle style = wb.createCellStyle();//设置单元格样式
style.setFont(font);//将设置好的字体赋予单元格样式中

Cell cell = row.createCell(1);//创建第二行第二列的单元格
cell.setCellValue("This is test of fonts");//给单元格赋值
cell.setCellStyle(style);//将样式赋给单元格

FileOutputStream fileOutputStream = new FileOutputStream("D:\\workbook9.xls");
wb.write(fileOutputStream);
fileOutputStream.close();

}


}
 
 代码12:修改已有excel表格数据
package com.etc.poi.step4;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;


import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;


public class WirteWorkBook {
public static void main(String[] args) throws Exception {
InputStream input = new FileInputStream("D:\\workbook3.xls");
POIFSFileSystem fs = new POIFSFileSystem(input);//将写入流赋予POIFS对象
Workbook wb = new HSSFWorkbook(fs);//通过POIFS对象创建工作薄
Sheet sheet = wb.getSheetAt(0);//获取第一个Sheet页
Row row = sheet.getRow(0);//获取第一行
Cell cell = row.getCell(0);//获取第一个单元格内容
if(cell==null){//如果第一行第一个单元格为null就创建一个单元格
cell = row.createCell(0);
}
cell.setCellType(Cell.CELL_TYPE_STRING);//设置单元格数据类型
cell.setCellValue("测试单元格");//设置单元格内容(原始单元格内容为42771.9398061111 是数字类型)

FileOutputStream fileOutputStream = new FileOutputStream("D:\\workbook3.xls");
wb.write(fileOutputStream);
fileOutputStream.close();
}

}

 代码13:项目中使用注意事项

首先进行数据交互时不能用ajax,主要原因是Workbook.write(out)功能与ajax冲突,前途提交数据要用form表单的形式。

后天关键代码

Workbook wb = new HSSFWorkbook();//创建一个工作薄
Sheet sheet = wb.createSheet("项目收费报表");//创建第一个Sheet页
Row row = sheet.createRow(0);

//设置整体的行宽
sheet.setDefaultColumnWidth((short) 20);
row.createCell(0).setCellValue("缴费方式");
row.createCell(1).setCellValue("缴费类型");
row.createCell(2).setCellValue("项目编码");
row.createCell(3).setCellValue("项目名称");
row.createCell(4).setCellValue("缴费金额");
//此处省略for循环为单元格赋值和修改单元格样式功能
response.setContentType("application/vnd.ms-excel");
String filename = skrqS+"_"+skrqE+"项目收入汇总";
   response.addHeader("Content-Disposition", "attachment;filename="+new String(filename.getBytes("gbk"),"iso8859-1")+".xls");
   OutputStream out = response.getOutputStream();
   wb.write(out);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值