Poi的基本使用

本文介绍了使用Apache的POI进行Excel的创建和导出等操作。包括非Maven和Maven项目的jar包导入方法,还涉及创建工作表、单元格,处理时间格式、对齐方式、边框、填充色等,以及遍历、读取、重写工作簿等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用apache的poi来进行excel的创建和导出等操作

  • jar包导入
  1. 非maven项目:直接去maven中央仓库搜索poi下载jar包,然后添加到项目资源文件即可
  2. maven项目:在pom文件中导入以下坐标:

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>

  • 创建excel工作表
    public static void main(String[] args) throws Exception{
        //定义工作簿对象
        Workbook wb = new HSSFWorkbook();
        //使用文件输出流来创建工作簿  指定文件名字时不能缺少后缀名
        FileOutputStream fos = new FileOutputStream("E://poiDoc//first.xls");
        //创建
        wb.write(fos);
        //关闭输出流
        fos.close();
    }
  • 创建sheet页(分表)
    public static void main(String[] args) throws Exception{
        //获取工作簿对象
        Workbook wb = new HSSFWorkbook();
        //创建sheet页
        wb.createSheet("第一个sheet页");
        wb.createSheet("第二个sheet页");
        //获取文件输出流
        FileOutputStream fos = new FileOutputStream("E://poiDoc//带有sheet页的工作簿.xls");
        //创建文件
        wb.write(fos);
        //关闭文件输出流
        fos.close();
    }
  • 创建单元格
    public static void main(String[] args) throws Exception{
        //获取工作簿对象
        Workbook wb = new HSSFWorkbook();
        //创建sheet页
        Sheet sheet = wb.createSheet("第一个单元格");
        //sheet页创建第一行
        Row row = sheet.createRow(0);
        //第一行行创建第一个单元格
        Cell cell = row.createCell(0);
        //第一行第一个单元格设置值为  "我是值"  字符串
        cell.setCellValue("我是值");
        //精简写法
        row.createCell(1).setCellValue(1.2);//第一行创建第二个单元格设置值为1.2
        row.createCell(2).setCellValue(false);//第一行创建第三个单元格设置值为false
        row.createCell(3).setCellValue(new Date());//第一行创建第四个单元格设置值为日期
        //获取文件输出流
        FileOutputStream fos = new FileOutputStream("E://poiDoc//带有单元格的工作簿.xls");
        //创建文件
        wb.write(fos);
        //关闭文件输出流
        fos.close();
    }

  

  • 创建带有时间格式(必须做格式化处理,否则日期格式会乱掉)的单元格
    public static void main(String[] args) throws Exception{
        //获取工作簿对象
        Workbook wb = new HSSFWorkbook();
        //创建单元格创建帮助对象
        CreationHelper creationHelper = wb.getCreationHelper();
        //创建单元格格式对象
        CellStyle cellStyle = wb.createCellStyle();
        //设置单元格日期格式
        cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-mm-dd  hh:MM:ss"));
        //创建sheet页
        Sheet sheet = wb.createSheet("第一个单元格");
        //sheet页创建第一行
        Row row = sheet.createRow(0);
        //创建时间格式单元格  不做格式处理的话  格式会乱掉  导致看不懂数据
        row.createCell(0).setCellValue(new Date());//第一行创建第一个单元格设置值为日期
        //创建格式化后的日期单元格
        Cell cell = row.createCell(1);
        cell.setCellValue(new Date());//第一行创建第二个单元格设置值为日期并格式化
        cell.setCellStyle(cellStyle);
        //获取文件输出流
        FileOutputStream fos = new FileOutputStream("E://poiDoc//带有时间格式单元格(格式化)的工作簿.xls");
        //创建文件
        wb.write(fos);
        //关闭文件输出流
        fos.close();
    }

  

  • 遍历已存在excel的行和列获取值
    public static void main(String[] args) throws Exception{
        //获取输入流
        InputStream is = new FileInputStream("E://poiDoc//员工信息.xls");
        //获取POI文件系统
        POIFSFileSystem fs = new POIFSFileSystem(is);
        //获取已存在的工作簿对象  此处为子类   是为了以防有的方法在子类中有而在父类中没有
        HSSFWorkbook wb = new HSSFWorkbook(fs);
        //获取sheet表一
        HSSFSheet sheet = wb.getSheetAt(0);
        //遍历  使用for循环来进行遍历
        int rowNum,cellNum;
        //遍历行
        for(rowNum = 0;rowNum<=sheet.getLastRowNum();rowNum++){
            //获取每一行的行对象
            HSSFRow row = sheet.getRow(rowNum);
            //若行不存在则跳过
            if(null == row){
                //中间有空行则打印换行并进到下一行
                System.out.println();
                continue;
            }
            //遍历列
            for(cellNum = 0;cellNum<=row.getLastCellNum();cellNum++){
                //获取每一行的对应的列对象
                HSSFCell cell = row.getCell(cellNum);
                //如果为空则表示该单元格不存在   要与存在但是值为空区别开
                if(null == cell){
                    continue;
                }
                //输出每一个cell对应的值后添加一个空格
                System.out.print(getCellVales(cell) + " ");
            }
            //每一行结束后添加换行
            System.out.println();
        }
        //关闭输入流
        is.close();
    }
    private static String getCellVales(HSSFCell cell){
        //使用switch来判断cell的类型 从而选择使用哪个获取值的api  再转换为String返回
        switch (cell.getCellTypeEnum()){
            case NUMERIC:
                //数值型
                return String.valueOf(cell.getNumericCellValue());
            case STRING:
                //字符串型
                return String.valueOf(cell.getStringCellValue());
            case BLANK:
                //使用 ## 表示空格
                return "##";
            case BOOLEAN:
                //布尔值型
                return String.valueOf(cell.getBooleanCellValue());
            case ERROR:
                //错误型
                return String.valueOf(cell.getErrorCellValue());
            /*case FORMULA:
                //公式型
                return String.valueOf(cell.getFor);
                break;*/
            default:
                return String.valueOf(cell.getStringCellValue());
        }
    }
  • 文本提取(只抽取文本,没有格式之类的限制)
    public static void main(String[] args) throws Exception{
        //获取输入流
        InputStream is = new FileInputStream("E://poiDoc//员工信息.xls");
        //获取POI文件系统
        POIFSFileSystem fs = new POIFSFileSystem(is);
        //获取已存在的工作簿对象  此处为子类   是为了以防有的方法在子类中有而在父类中没有
        HSSFWorkbook wb = new HSSFWorkbook(fs);
        //获取工作簿抽取对象
        ExcelExtractor ex = new ExcelExtractor(wb);
        //取消显示sheet的名字
        ex.setIncludeSheetNames(false);
        //输出文件抽取结果
        System.out.println(ex.getText());
        //关闭输入流
        is.close();
    }
  • 单元格对齐方式
    public static void main(String[] args) throws Exception{
        //获取工作簿对象
        Workbook wb = new HSSFWorkbook();
        //获取单元格样式对象
        CellStyle cellStyle = wb.createCellStyle();
        //创建sheet页
        Sheet sheet = wb.createSheet("第一个单元格");
        //sheet页创建第三行
        Row row = sheet.createRow(2);
        //设置行高
        row.setHeightInPoints(30);
        //创建单元格并指定值
        Cell cell = row.createCell(0);
        cell.setCellValue("对齐方式");
        //设置水平对齐方式
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        //设置垂直对齐方式
        cellStyle.setVerticalAlignment(VerticalAlignment.BOTTOM);
        //给单元格指定单元格样式
        cell.setCellStyle(cellStyle);
        //获取文件输出流
        FileOutputStream fos = new FileOutputStream("E://poiDoc//带有单元格对齐方式的工作簿.xls");
        //创建文件
        wb.write(fos);
        //关闭文件输出流
        fos.close();
    }
  • 单元格边框处理
    public static void main(String[] args) throws Exception{
        //获取工作簿对象
        Workbook wb = new HSSFWorkbook();
        //获取单元格样式对象
        CellStyle cellStyle = wb.createCellStyle();
        //创建sheet页
        Sheet sheet = wb.createSheet("第一个单元格");
        //sheet页创建第三行
        Row row = sheet.createRow(2);
        //创建第二个单元格
        Cell cell = row.createCell(1);
        //设置值
        cell.setCellValue("边框");

        //设置顶部边框样式
        cellStyle.setBorderTop(BorderStyle.MEDIUM_DASHED);
        cellStyle.setTopBorderColor(IndexedColors.YELLOW.getIndex());

        //设置底部边框样式
        cellStyle.setBorderBottom(BorderStyle.THIN);
        cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());

        //设置右边边框样式
        cellStyle.setBorderRight(BorderStyle.THIN);
        cellStyle.setRightBorderColor(IndexedColors.GREEN.getIndex());

        //设置左边边框样式
        cellStyle.setBorderLeft(BorderStyle.THIN);
        cellStyle.setLeftBorderColor(IndexedColors.BLUE.getIndex());

        //给单元格设置样式
        cell.setCellStyle(cellStyle);

        //获取文件输出流
        FileOutputStream fos = new FileOutputStream("E://poiDoc//带有单元格边框的工作簿.xls");
        //创建文件
        wb.write(fos);
        //关闭文件输出流
        fos.close();
    }
  • 单元格填充色和颜色操作
    public static void main(String[] args) throws Exception{
        //获取工作簿对象
        Workbook wb = new HSSFWorkbook();
        //获取单元格样式对象
        CellStyle cellStyle = wb.createCellStyle();
        //创建sheet页
        Sheet sheet = wb.createSheet("第一个单元格");
        //sheet页创建第三行
        Row row = sheet.createRow(2);
        //设置行高
        row.setHeightInPoints(30);
        //创建第二个单元格
        Cell cell = row.createCell(1);
        //设置值
        cell.setCellValue("背景色");
        //设置背景填充
        cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
        //设置效果
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //给单元格设置样式
        cell.setCellStyle(cellStyle);
        //获取文件输出流
        FileOutputStream fos = new FileOutputStream("E://poiDoc//带有单元格背景色的工作簿.xls");
        //创建文件
        wb.write(fos);
        //关闭文件输出流
        fos.close();
    }
  • 单元格合并
    public static void main(String[] args) throws Exception{
        //获取工作簿对象
        Workbook wb = new HSSFWorkbook();
        //获取单元格样式对象
        CellStyle cellStyle = wb.createCellStyle();
        //创建sheet页
        Sheet sheet = wb.createSheet("第一个单元格");
        //sheet页创建第三行
        Row row = sheet.createRow(2);
        //设置行高
        row.setHeightInPoints(30);
        //定义单元格
        Cell cell = row.createCell(1);
        cell.setCellValue("合并单元格");
        //合并单元格
        sheet.addMergedRegion(new CellRangeAddress(
                2//起始行
                ,2//结束行
                ,1//起始列
                ,4//结束列
        ));
        //获取文件输出流
        FileOutputStream fos = new FileOutputStream("E://poiDoc//合并单元格的工作簿.xls");
        //创建文件
        wb.write(fos);
        //关闭文件输出流
        fos.close();
    }
  • 字体处理
  • 读取和重写工作簿
  • 单元格中使用换行
  • 创建用户自定义数据格式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值