美文网首页程序员
poi 的使用与整理

poi 的使用与整理

作者: 58bc06151329 | 来源:发表于2017-04-20 08:21 被阅读697次

    文前说明

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

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

    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

    相关文章

      网友评论

        本文标题:poi 的使用与整理

        本文链接:https://www.haomeiwen.com/subject/frukzttx.html