程序员

poi 的使用与整理

2017-04-20  本文已影响697人  58bc06151329

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

POI 简介

Apache POIApache 软件基金会的开放源码函式库,POI 提供 APIJava 程序对 Microsoft Office 格式档案读和写的功能。

POI Excel文档结构类

类名 描述
HSSFWorkbook Excel 文档对象
HSSFSheet Excel 的工作表
HSSFRow Excel 的行
HSSFCell Excel 的单元格
HSSFFont Excel 字体
HSSFName 名称
HSSFDataFormat 日期格式
HSSFHeader 工作表头
HSSFFooter 工作表尾
HSSFCellStyle 单元格样式
HSSFDateUtil 日期工具
HSSFPrintSetup 打印
HSSFErrorConstants 错误信息表

Excel 常用操作方法

获取 Excel 常用对象

  1. 得到 Excel 工作簿对象
HSSFWorkbook wb = new HSSFWorkbook(fs); 
  1. 得到 Excel 工作表对象
HSSFSheet sheet = wb.getSheetAt(0); 
  1. 得到 Excel 工作表的行
HSSFRow row = sheet.getRow(i); 
  1. 得到 Excel 工作表指定行的单元格
HSSFCell cell = row.getCell((short) j);
  1. 得到单元格样式
CellStyle cellStyle = cell.getCellStyle();

创建 Excel 常用对象

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

Excel 常用操作

  1. 设置工作表名称
wb.setSheetName(1, "第一张工作表",HSSFCell.ENCODING_UTF_16);
  1. 取得工作表的数目
wb.getNumberOfSheets();
  1. 取得一行的有效单元格个数
row.getLastCellNum();
  1. 单元格值类型读写
// 设置单元格为STRING类型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// 读取为数值类型的单元格内容
cell.getNumericCellValue();
  1. 设置列宽、行高
// 设置列宽
sheet.setColumnWidth((short)column,(short)width);
// 调整单元格宽度
sheet.setAutobreaks(true);
// 自动根据长度调整单元格长度
sheet.autoSizeColumn((short) i); 
// 设置行高
row.setHeight((short)height);
  1. 添加区域,合并单元格
// 合并从第 rowFrom 行 columnFrom 列到 rowTo 行 columnTo 列的区域
Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo,(short)columnTo);
sheet.addMergedRegion(region);
// 得到所有区域
sheet.getNumMergedRegions();
// 合并 4 行 2 列
sheet.addMergedRegion(newCellRangeAddress(0, 4, 0, 2));
  1. 保存 Excel 文件
FileOutputStream fileOut = new FileOutputStream(path);
wb.write(fileOut); 
  1. 设置单元格边框格式
HSSFCellStyle style = wb.createCellStyle();      
style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);// 下边框        
style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);// 左边框        
style.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框        
style.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框 
  1. 设置字体和内容位置
HSSFFont f  = wb.createFont();      
f.setFontHeightInPoints((short) 11);// 设置字号       
f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);// 加粗       
style.setFont(f);      
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中       
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
style.setRotation(short rotation);// 单元格内容的旋转的角度
HSSFDataFormat df = wb.createDataFormat();      
style1.setDataFormat(df.getFormat("0.00%"));// 设置单元格数据格式       
cell.setCellFormula(string);// 给单元格设公式
  1. 插入图片
// 先把读进来的图片放到一个 ByteArrayOutputStream 中,以便产生 ByteArray       
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();    
BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"));      
ImageIO.write(bufferImg,"jpg",byteArrayOut);
// 读进一个 Excel 模版       
FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");       
fs = new POIFSFileSystem(fos);
// 创建一个工作薄       
HSSFWorkbook wb = new HSSFWorkbook(fs);      
HSSFSheet sheet = wb.getSheetAt(0);      
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();      
HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short) 0,0,(short)10,10);           
patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));
  1. 调整工作表位置
HSSFWorkbook wb = new HSSFWorkbook();     
HSSFSheet sheet = wb.createSheet("format sheet");     
HSSFPrintSetup ps = sheet.getPrintSetup();     
sheet.setAutobreaks(true);     
ps.setFitHeight((short)1);     
ps.setFitWidth((short)1);
  1. 设置打印区域
HSSFSheet sheet = wb.createSheet("Sheet1");     
wb.setPrintArea(0, "$A$1:$C$2");
  1. 设置脚注
HSSFSheet sheet = wb.createSheet("format sheet");     
HSSFFooter footer = sheet.getFooter()     
footer.setRight( "Page " + HSSFFooter.page() + " of " + HSSFFooter.numPages() );
  1. 选中指定的工作表
HSSFSheet sheet = wb.createSheet("row sheet");     
heet.setSelected(true);
  1. 工作表的放大缩小
HSSFSheet sheet1 = wb.createSheet("new sheet");     
sheet1.setZoom(1,2);   // 50% 这里是个分数,例如:sheet.setZoom(3,4); 为 75%
  1. 设置头注
HSSFSheet sheet = wb.createSheet("new sheet");     
HSSFHeader header = sheet.getHeader();     
header.setCenter("Center Header");     
header.setLeft("Left Header"); 
header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") + 
HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal Italic font and size 16");
  1. 自定义字体颜色和背景颜色
HSSFCellStyle style = wb.createCellStyle();     
style.setFillForegroundColor(HSSFColor.LIME.index);     
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);     
HSSFFont font = wb.createFont();     
font.setColor(HSSFColor.RED.index);     
style.setFont(font);     
cell.setCellStyle(style);
  1. 设置不显示 Excel 网格线
sheet.setDisplayGridlines(false);
  1. 设置 Excel 单元格中的内容换行
// 设置单元格内容强制换行
cellStyle.setWrapText(true);
// 内容换行,加上 \r\n
  1. 设置打印
HSSFPrintSetupprint = (HSSFPrintSetup) sheet.getPrintSetup();
print.setLandscape(true);// 设置横向打印
print.setScale((short)70);// 设置打印缩放70%
print.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);// 设置为A4纸张
print.setLeftToRight(true);// 設置打印顺序先行后列,默认为先列行
print.setFitHeight((short)10);// 设置缩放调整为10页高
print.setFitWidth((short)10);// 设置缩放调整为宽高
sheet.setAutobreaks(false);
if (i != 0&& i % 30 == 0)
sheet.setRowBreak(i);// 設置每 30 行分頁打印
  1. 设置批注
HSSFSheet sheet =workBook.getSheetAt(0);
HSSFPatriarch patr = sheet.createDrawingPatriarch();
// 定义注释的大小和位置,详见文档
HSSFComment comment = patr.createComment(new HSSFClientAnchor(0,0,0,0, (short)4, 2 ,(short) 6, 5));
// 设置注释内容
comment.setString(new HSSFRichTextString("添加注释!"));

HSSFColor 颜色类型

颜色 效果
HSSFColor.GREY_80_PERCENT #333333
HSSFColor.INDIGO #333399
HSSFColor.PLUM #993366
HSSFColor.BROWN #993300
HSSFColor.OLIVE_GREEN #333300
HSSFColor.DARK_GREEN #003300
HSSFColor.SEA_GREEN #339966
HSSFColor.DARK_TEAL #003366
HSSFColor.GREY_40_PERCENT #969696
HSSFColor.BLUE_GREY #666699
HSSFColor.ORANGE #FF6600
HSSFColor.LIGHT_ORANGE #FF9900
HSSFColor.GOLD #FFCC00
HSSFColor.LIME #99CC00
HSSFColor.AQUA #33CCCC
HSSFColor.LIGHT_BLUE #3366FF
HSSFColor.TAN #FFCC99
HSSFColor.LAVENDER #CC99FF
HSSFColor.ROSE #FF99CC
HSSFColor.PALE_BLUE #99CCFF
HSSFColor.LIGHT_YELLOW #FFFF99
HSSFColor.LIGHT_GREEN #CCFFCC
HSSFColor.LIGHT_TURQUOISE #CCFFFF
HSSFColor.SKY_BLUE #00CCFF
HSSFColor.BLUE blue
HSSFColor.TEAL teal
HSSFColor.DARK_RED maroon
HSSFColor.VIOLET purple
HSSFColor.TURQUOISE aqua
HSSFColor.YELLOW yellow
HSSFColor.PINK fuchsia
HSSFColor.DARK_BLUE navy
HSSFColor.LIGHT_CORNFLOWER_BLUE #CCCCFF
HSSFColor.ROYAL_BLUE #0066CC
HSSFColor.CORA #FF8080
HSSFColor.ORCHID #660066
HSSFColor.LIGHT_TURQUOISE #CCFFFF
HSSFColor.LEMON_CHIFFON #FFFFCC
HSSFColor.PLUM #993366
HSSFColor.CORNFLOWER_BLUE #9999FF
HSSFColor.GREY_50_PERCENT gray
HSSFColor.GREY_25_PERCENT silver
HSSFColor.DARK_YELLOW olive
HSSFColor.GREEN green
HSSFColor.BRIGHT_GREEN lime
HSSFColor.RED red
HSSFColor.WHITE white
HSSFColor.BLACK black

Excel 对象限制

Excel97

参数 限制
允许的最大列数 256 (2^8)
允许的最大行 64k (2^16)
允许的公式个数 30
条件格式化单元格的个数 3
样式个数 4000
单元格内容的最大长度 32767

Excel2007

参数 限制
允许的最大列数 16K (2^14)
允许的最大行数 1M (2^20)
允许的公式个数 255
条件格式化单元格的个数 不受限(受限于Excel的可用内存)
样式的个数 64000
单元格内容的最大长度 32767
上一篇下一篇

猜你喜欢

热点阅读