栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java POI Excel

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java POI Excel

目录

1.什么是POI

2.Excel版本区别

3.类介绍

XSSFWorkbook

 Sheet

 XSSFRow

XSSFCell

4.使用

 4.1 创建Excel表格

4.1.1 简单使用

4.1.2 创建合并单元格的列

4.1.3 ​​​​​​​带标题的表格

4.1.4 填充数据

4.2 读取数据

5.其它介绍

6.推荐链接​​​​​​​

1.什么是POI

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

2.Excel版本区别

        用JavaPOI导出Excel时,我们会考虑到Excel版本及数据量的问题。针对不同的Excel版本,要采用不同的工具类。

        HSSFWorkbook

                是操作Excel2003以前(包括2003)的版本,扩展名是.xls;

        XSSFWorkbook
                是操作Excel2007的版本,扩展名是.xlsx;

                对于不同版本的EXCEL文档要使用不同的工具类,如果使用错了,会提示如下错误信息。

3.类介绍

XSSFWorkbook

读写Microsoft Excel表格的类

 方法

 Sheet

表示工作表

 XSSFRow

表示行

XSSFCell

表示单元格

 

 

4.使用

POI支持Maven和jar方式导入,如下

Maven坐标


    org.apache.poi
    poi-ooxml
    4.0.1

Jar包方式

 4.1 创建Excel表格

​​​​​​​4.1.1 简单使用
@Test
    public void write1() throws IOException {
        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 新建工作表
        XSSFSheet sheet = workbook.createSheet("user");

        // 文件名是时间格式
        SimpleDateFormat format = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
        String date = format.format(new Date());
        String fileName = date + ".xlsx";
        FileOutputStream fos = new FileOutputStream(new File(fileName));
        // 输出文件
        workbook.write(fos);
        workbook.close();
        fos.close();
    }

4.1.2 创建合并单元格的列
@Test
    public void write2() throws Exception {
        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 新建工作表
        XSSFSheet sheet = workbook.createSheet("user");
        //自动列大小
        sheet.autoSizeColumn(1, true);
        //创建行,0表示第一行
        XSSFRow row = sheet.createRow(0);
        //合并单元格  参数说明:1:开始行 2:结束行  3:开始列 4:结束列
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 8));
        //获取列【标题列】
        XSSFCell title = row.createCell(0);
        //创建列的样式
        XSSFCellStyle titleStyle = workbook.createCellStyle();
        //垂直和水平居中
        titleStyle.setAlignment(HorizontalAlignment.CENTER);
        titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        //设置文本
        title.setCellValue("user信息表");
        //背景颜色
        titleStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex());
        titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //设置样式
        title.setCellStyle(titleStyle);
        //设置行高度
        row.setHeight((short) 800);
        // 文件名是时间格式
        SimpleDateFormat format = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
        String date = format.format(new Date());
        String fileName = date + ".xlsx";
        FileOutputStream fos = new FileOutputStream(new File(fileName));
        // 输出文件
        workbook.write(fos);
        workbook.close();
        fos.close();
    }

运行结果:

 

4.1.3 ​​​​​​​带标题的表格
@Test
    public void write3() throws Exception {
        //表头
        String[] titles = new String[]{"id","username","password","email"};

        // 创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 新建工作表
        XSSFSheet sheet = workbook.createSheet("user");
        //自动列大小
        sheet.autoSizeColumn(1,true);
        //创建行,0表示第一行
        XSSFRow row = sheet.createRow(0);
        //合并单元格  参数说明:1:开始行 2:结束行  3:开始列 4:结束列
        sheet.addMergedRegion(new CellRangeAddress(0,0,0,3));
        //获取列【标题列】
        XSSFCell title = row.createCell(0);
        //创建列的样式
        XSSFCellStyle titleStyle = workbook.createCellStyle();
        //垂直和水平居中
        titleStyle.setAlignment(HorizontalAlignment.CENTER);
        titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        //设置文本
        title.setCellValue("user");
        //背景颜色
        titleStyle.setFillForegroundColor(IndexedColors.BLUE_GREY.getIndex());
        titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //设置样式
        title.setCellStyle(titleStyle);
        //设置行高度
        row.setHeight((short) 800);

        //创建一行,第2行
        row = sheet.createRow(1);
        for (int i = 0; i < titles.length; i++) {
            XSSFCell cell = row.createCell(i);
//            if (i == 0) {
//                //设置第一列宽度
//                sheet.setColumnWidth(i, 800*10);
//            }
            cell.setCellValue(titles[i]);
        }

        // 文件名是时间格式
        SimpleDateFormat format = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
        String date = format.format(new Date());
        String fileName = date + ".xlsx";
        FileOutputStream fos = new FileOutputStream(new File(fileName));
        // 输出文件
        workbook.write(fos);
        workbook.close();
        fos.close();
    }

运行结果:

 

4.1.4 填充数据

运行结果:

 

4.2 读取数据

读取template.xlsx的数据

 

import com.monitorjbl.xlsx.StreamingReader;
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.junit.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Demo {
    @Test
    public void reader() throws IOException {
        Scanner sc = new Scanner(System.in);
        String path = "template.xlsx";

        //读取Excel表格
        File file = new File(path);
        FileInputStream fis = new FileInputStream(file);
        Workbook wk = StreamingReader.builder()
                //缓冲到内存中的行数
                .rowCacheSize(10000)
                //内存大小
                .bufferSize(4096 * 2).open(fis);

        // 获取工作表
        Sheet sheet = wk.getSheetAt(0);
        //合法表头
        String[] titles = {"name", "author", "price"};
        //存储多行(所有)数据
        List> list = new ArrayList<>();
        //遍历行
        for (Row row : sheet) {
            //存储一行数据
            List rowList = new ArrayList<>();
            //遍历列
            for (Cell cell : row) {
                rowList.add(cell.getStringCellValue());
            }
            list.add(rowList);
        }
        //遍历数据
        for (List strings : list) {
            System.out.println(strings);
        }

    }
}

运行结果:

 

5.其它介绍

设置背景颜色

titleStyle.setFillForegroundColor((short) 13);// 设置背景色
titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

设置字体

XSSFFont font = workbook.createFont();
font.setFontName("仿宋_GB2312");
font.setFontHeightInPoints((short) 50);
titleStyle.setFont(font);

6.推荐链接

POI 教程

POI核心类

POI-----POI核心类_hekewangzi的博客-CSDN博客_poi核心类

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号