POI操作Excel实现导出

POI

仅作为个人学习使用,仅供参考,请勿拿做商用,否则本人有权追责。

1. 概述

POI是Apache推出的操作office格式的工具包,主要用于操作excel的读与写。

excel分为03版和07版,他们的区别是:

  • 03 版的excel只能存储65536行
  • 07版的无限制,因此占用内存也较大。

poi是一次读取数据到文件中,因此若数据量过大,可能导致内存溢出。

2. 入门

2.1 Excel中的对象

excel中的对象有四个:

  • 工作簿,也就是单个excel的文件对象,对应于poi中即为Workbook对象,他有三个实现类:

    • 在这里插入图片描述

    • HSSFWorkbook:03版工作簿

    • XSSFWorkbook:07版工作簿

    • SXSSFWorkbook:07版工作簿增强版

  • 工作表:也就是excel左下角的sheet,对应于POI中也就是Sheet对象。

  • 行,对应于POI中也就是Row对象

  • 单元格,对应于POI中也就是Cell对象

2.2 入门操作

操作excel导出的步骤具体分为四步:1. 创建一个工作簿;2. 创建一个工作表Sheet;3. 创建行;4 创建列

代码演示如下:

public class ExcelWriteTest{
    @Test
    public void testExcelWriteByPoi() throw IOException {
        // 1. 创建一个工作簿
        Workbook workbook = new HSSFWorkwork();
        // 2. 创建工作表
        Sheet sheet = workbook.createSheet();
        // 3. 创建一行
        Row row = sheet.createRow(0);// 第1行
        // 4. 创建一列
        Cell cell = row.createCell(0);// 第一行第一个单元格
        cell.setCellValue("统计表");
        //5. 生成文件
        FileOutputStream fileOutputStream = new FileOutputStream("a"+".xls");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
    }
}

2.3 其他辅助操作(边框、字体、颜色、加粗、居中、换行、合并单元格)

2.3.1 合并单元格

public CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)方法

各个参数的含义为:

firstRow:需要合并的开始行

lastRow:需要合并的结束行

firstCol:需要合并的第一个单元格。

lastCol:需要合并的最后一个单元格。

代码演示:

// 1. 创建一个工作簿
Workbook workbook = new HSSFWorkwork();
// 2. 创建工作表
Sheet sheet = workbook.createSheet();
CellRangeAddress region = new CellRangeAddress(0, 0, 1, 3);// 合并第一行的第2-4个单元格
sheet.addMergedRegion(region);

PS:合并单元格之后,往单元格中存储数据的索引并不会改变。即合并单元格不会导致单元格消失。

2.3.2 单元格格式

需要生成一个单元格样式对象,即CellStyle;

代码演示如下:

// 1. 生成一个单元格样式对象
CellStyle style = workbook.createCellStyle();
// 设置水平对齐属性:HorizontalAlignment(GENERAL:常规对齐;LEFT:左对齐;CENTER:居中对齐;RIGHT:右对齐)
style.setAlignment();
// 设置垂直对齐属性:VerticalAlignment(TOP:顶部对齐;CENTER:居中对齐;BOTTOM:底端对齐)
style.setVerticalAlignment(VerticalAlignment.CENTER);
// 设定边框
style.setBorderTop(BorderStyle.THIN);// 上边框
style.setBorderBottom(BorderStyle.THIN);// 下边框
style.setBorderLeft(BorderStyle.THIN);// 左边框
style.setBorderRight(BorderStyle.THIN);// 右边框
// 设置边框颜色
style.setLeftBorderColor();
style.setRightBorderColor();
style.setTopBorderColor();
style.setBottomBorderColor();
// 设置自动换行
style.setWrapText(true);
//设定填充样式
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//设定背景颜色
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
// 设置字体样式
style.setFont(font);
2.3.3 字体样式

代码演示:

Font font = workbook.createFont();
font.setFontName("黑体");
font.setFontHeightInPoints((short) 16);//设置字体大小
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
2.3.4 列宽

代码演示:

sheet.setDefaultColumnWidth(20);

本文只提供简单的一个入门,具体方法的构造函数什么的需要自己去读源码,源码都有说明。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值