java操作Excel(POI)

java操作Excel(POI)

1.读取Excel

static void read() throws IOException, InvalidFormatException {
        //声明读取的文件
        File file = new File("D:\\hello.xlsx");
        //创建工作簿对象
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        //获取第一个工作表
        XSSFSheet sheetAt = workbook.getSheetAt(0);
        //遍历行
        for (Row cells : sheetAt) {
            //遍历列
            for (Cell cell : cells) {
                //设置列属性 String
                cell.setCellType(CellType.STRING);
                //以字符串方式但因
                System.out.print(cell.getStringCellValue()+"\t");
            }
            System.out.println();
        }
        workbook.close();//关闭
    }

2.写出Excle

public static void witer() throws IOException {
        //设置写入的文件位置
        File file = new File("D:/xx.xlsx");
        //创建工作簿
        XSSFWorkbook sheets = new XSSFWorkbook();
        //创建工作表
        XSSFSheet sheet = sheets.createSheet("测试java");
        //创建行
        XSSFRow row = sheet.createRow(0);
        //创建列并且设置值
        row.createCell(0).setCellValue("哈哈哈");
        row.createCell(1).setCellValue("嘻嘻嘻");
        row.createCell(2).setCellValue("嘿嘿嘿");

        XSSFRow row1 = sheet.createRow(1);
        row1.createCell(0).setCellValue("哈哈哈");
        row1.createCell(1).setCellValue("嘻嘻嘻");
        row1.createCell(2).setCellValue("嘿嘿嘿");
        //创建输出流对象
        FileOutputStream out = new FileOutputStream(file);
        //写入
        sheets.write(out);
        out.flush();

        sheets.close();
        out.close();
        System.out.println("写完收工");
    }

3.合并单元格

1.给工作表添加合并规则
 //创建工作表
        XSSFSheet sheet = sheets.createSheet("测试java");
        //指定合并开始行、合并结束行 合并开始列、合并结束列
        CellRangeAddress rangeAddress = new CellRangeAddress(0, 0, 0, 2);
        //添加要合并地址到表格
        sheet.addMergedRegion(rangeAddress);
        //创建行
        XSSFRow row = sheet.createRow(0);
        //创建列并且设置值
        row.createCell(0).setCellValue("哈哈哈");
        row.createCell(1).setCellValue("嘻嘻嘻");
        row.createCell(2).setCellValue("嘿嘿嘿");
        sheet.addMergedRegion(new CellRangeAddress(0,0,3,5));
        XSSFCell cell = row.createCell(3);
        cell.setCellStyle(cellStyle);
        cell.setCellValue("sss");
        //指定合并开始行、合并结束行 合并开始列、合并结束列
        CellRangeAddress rangeAddress1 = new CellRangeAddress(1, 1, 0, 2);
        //添加要合并地址到表格
        sheet.addMergedRegion(rangeAddress1);
        XSSFRow row1 = sheet.createRow(1);
        row1.createCell(0).setCellValue("哈哈哈");
        row1.createCell(3).setCellValue("嘻嘻嘻");
        row1.createCell(4).setCellValue("嘿嘿嘿");
以上代码效果

在这里插入图片描述

黄色背景的样式如下
//创建单元格样式
        XSSFCellStyle cellStyle = sheets.createCellStyle();
        cellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //设置样式对齐方式:水平\垂直居中
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
2.进阶合并单元格(代码里的3 :就是3个格子3个格子划分传入)写几就几个格式划分
  for (int i = 0; i <15 ; i++) {
            sheet.addMergedRegion(new CellRangeAddress(0,0,i*3,i*3+3-1));

            ExcleUtils.createCell(row,i*3,"2010-2-1",null);
            System.out.println("写入成功"+i*3);
        }

例如:

在这里插入图片描述

4.列的类型说明

	CellType.STRING  	字符串
	CellType._NONE  	未知类型,仅限内部使用
	CellType.BLANK		空单元格-没值,但有单元格样式
    CellType.BOOLEAN	布尔值
    CellType.ERROR		错误单元格
    CellType.FORMULA	公式
    CellType.NUMERIC	数值类型,整数,小数,日期

5.Excle工具类

package com.zyd.util;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.StringUtils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * excle工具类
 * 作者:page
 * version:1.0
 */
public class ExcleUtils {

    /**
     *获取带样式的工作表对象
     * @param workbook   工作簿对象
     * @param sheetName  工作表名称
     * @param cellRangeAddress 合并单元格的规则对象 不使用传Null即可
     * @return  返回工作表对象
     */
    public static Sheet getSheet(XSSFWorkbook workbook, String sheetName, CellRangeAddress cellRangeAddress){
        XSSFSheet sheet = workbook.createSheet(sheetName);
        if(null != cellRangeAddress)
            sheet.addMergedRegion(cellRangeAddress);
        return sheet;
    }
    /**
     *获取工作表对象
     * @param workbook   工作簿对象
     * @param sheetName  工作表名称
     *
     * @return  返回工作表对象
     */
    public static XSSFSheet getSheet(XSSFWorkbook workbook,String sheetName){
        XSSFSheet sheet = workbook.createSheet(sheetName);
        return sheet;
    }

    /**
     * 创建列并值
     * @param row  指定那一行要创建列与值
     * @param cellIndex  创建列的下标
     * @param cellValue  创建列下标的值
     * @param cellType   创建列的类型默认字符串 CellType.STRING
     */
    public static void createCell(XSSFRow row, int cellIndex, String cellValue, CellType cellType){
        XSSFCell cell = row.createCell(cellIndex);
        if(null != cellType){
            cell.setCellType(cellType);
        }else
            cell.setCellType(CellType.STRING);

        cell.setCellValue(cellValue);

    }

    /**
     * 关闭XSSFWorkbook
     * @param workbook 工作簿对象
     */
    public static void excleClose(XSSFWorkbook workbook){
        File file = new File("D:/zz.xlsx");
        FileOutputStream out = null;
        try{
            out = new FileOutputStream(file);
            workbook.write(out);
            out.flush();
            //关闭流
            out.close();
            workbook.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    /**
     * 创建一个工作簿
     * @param path
     * @return
     */
    public static XSSFWorkbook createXSSFWorkbook(String path){
        File file = new File(path);
        XSSFWorkbook workbook = null;
        try {
            if(StringUtils.isEmpty(path))
                workbook=new XSSFWorkbook();
            else
                workbook= new XSSFWorkbook(file);
        }catch (IOException | InvalidFormatException e){
            e.printStackTrace();
        }
        return workbook;
    }

}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值