java poi 操作EXCEl

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <!-- apache POI for xlsx -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>3.17</version>
        </dependency>
import com.excel.pojo.User;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
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.junit.Test;

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

public class ExcelTest {


    //导出Excel(xls)
    @Test
    public void importExcel() throws IOException {
        //创建新工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();
        //新建工作表
        HSSFSheet sheet = workbook.createSheet("sheet1");
        //创建行,行号作为参数传递给createRow()方法,第一行从0开始计算
        HSSFRow row = sheet.createRow(0);
        //创建单元格,row已经确定了行号,列号作为参数传递给createCell(),第一列从0开始计算
        HSSFCell cell = row.createCell(2);
        //设置单元格的值,即C1的值(第一行,第三列)
        cell.setCellValue("hello sheet");
        //输出到磁盘中
        FileOutputStream fos = new FileOutputStream(new File("D:\\exportTest.xls"));
        workbook.write(fos);
        workbook.close();
        fos.close();
    }


    //读取Excel(xls)
    @Test
    public void importExcel1() throws IOException {
        //创建输入流
        FileInputStream fis = new FileInputStream(new File("D:\\user.xls"));
        //通过构造函数传参
        HSSFWorkbook workbook = new HSSFWorkbook(fis);
        //获取工作表
        HSSFSheet sheet = workbook.getSheetAt(0);
        //获取行,行号作为参数传递给getRow方法,第一行从0开始计算
        HSSFRow row = sheet.getRow(0);
        //获取单元格,row已经确定了行号,列号作为参数传递给getCell,第一列从0开始计算
        HSSFCell cell = row.getCell(2);
        //获取单元格的值,即C1的值(第一行,第三列)
        String cellValue = cell.getStringCellValue();
        System.out.println("第一行第三列的值是"+cellValue);
        workbook.close();
        fis.close();
    }


    //导出Excel(xlsx)
    @Test
    public void exportExcel() throws IOException {
        //创建工作簿
        XSSFWorkbook workbook = new XSSFWorkbook();
        //新建工作表
        XSSFSheet sheet = workbook.createSheet("sheet1");
        //创建行,0表示第一行
        XSSFRow row = sheet.createRow(0);
        //创建单元格行号由row确定,列号作为参数传递给createCell;第一列从0开始计算
        XSSFCell cell = row.createCell(2);
        //给单元格赋值
        cell.setCellValue("hello sheet in Xlsx");
        //创建输出流
        FileOutputStream fos = new FileOutputStream(new File("D:\\user.xlsx"));
        workbook.write(fos);
        workbook.close();
        fos.close();
    }


    //读取Excel(xlsx)
    @Test
    public void importXlsx() throws IOException {
        //创建输入流
        FileInputStream fis = new FileInputStream(new File("D:\\user.xlsx"));
        //由输入流得到工作簿
        XSSFWorkbook workbook = new XSSFWorkbook(fis);
        //得到工作表
        XSSFSheet sheet = workbook.getSheet("sheet1");
        //得到行,0表示第一行
        XSSFRow row = sheet.getRow(0);
        //创建单元格行号由row确定,列号作为参数传递给createCell;第一列从0开始计算
        XSSFCell cell = row.getCell(2);
        //给单元格赋值
        String cellValue = cell.getStringCellValue();
        System.out.println("第一行第三列的值是"+cellValue);
        workbook.close();
        fis.close();
    }


    //通用方法处理xls和xlsx

    @Test
    public void importXlsOrXlsx() throws IOException{
        String filePath = "D://user.xlsx";
        if(filePath.matches("^.+\\.(?i)((xls)|(xlsx))$"))
        {
            FileInputStream fis = new FileInputStream(filePath);
            boolean is03Excell = filePath.matches("^.+\\.(?i)(xls)$")?true:false;
            Workbook workbook = is03Excell ? new HSSFWorkbook(fis):new XSSFWorkbook(fis);
            Sheet sheet = workbook.getSheetAt(0);
            Row row = sheet.getRow(0);
            Cell cell = row.getCell(2);
            System.out.println("第一行第一列的数据是:"+cell.getStringCellValue());
            workbook.close();
            fis.close();
        }
    }



    public List<User> userImport(String filePath) {
        List<User> userList = new ArrayList<User>();

        try {
            FileInputStream fio = new FileInputStream(filePath);
            HSSFWorkbook workbook = new HSSFWorkbook(fio);
            HSSFSheet sheet = workbook.getSheetAt(0);

            for (Row row : sheet) {
                if (row.getRowNum() == 0) {// 首行表头不读取
                    continue;
                }
                User user = new User();
                user.setId(Integer.parseInt( row.getCell(0).getStringCellValue()));
                user.setUsername(row.getCell(1).getStringCellValue());
                user.setAge(row.getCell(2).getStringCellValue());
                userList.add(user);
            }

            workbook.close();
            fio.close();

        } catch (IOException e) {
            e.printStackTrace();
        }

        return userList;
    }

    @Test
    public void userImport(){
        List<User> userList = new ExcelTest().userImport("D://user.xls");
        for (User user : userList) {
            System.out.println("用户信息为:"+user.getId()+";"+user.getUsername()+";"+user.getAge()+";");
        }
    }

    public void userExport(String filePath, List<User> userList){
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet();

        HSSFRow titleRow = sheet.createRow(0);
        titleRow.createCell(0).setCellValue("id");
        titleRow.createCell(1).setCellValue("username");
        titleRow.createCell(2).setCellValue("age");

        for (User user : userList) {
            int lastRowNum = sheet.getLastRowNum();//获取最后一行行号

            HSSFRow row = sheet.createRow(lastRowNum+1);
            row.createCell(0).setCellValue(user.getId());
            row.createCell(1).setCellValue(user.getUsername());
            row.createCell(2).setCellValue(user.getAge());
        }

        try {
            FileOutputStream fos = new FileOutputStream(filePath);
            workbook.write(fos);
            workbook.close();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void userExport(){
        List<User> userList = new ArrayList<User>();
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setId(i);
            user.setUsername("ll"+1);
            user.setAge("2"+i);
            userList.add(user);
        }

        new ExcelTest().userExport("D://userList.xls", userList);
    }


}


        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.6</version>
        </dependency>
package com.excel.controller;

import com.alibaba.fastjson.JSON;
import com.excel.pojo.User;
import org.apache.poi.hssf.usermodel.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


@Controller
@ResponseBody
public class excelController {

    @RequestMapping("/hello")
    public String test(){
        return "hello";
    }

    public HSSFWorkbook getHSSFWorkbook(String sheetName, String[] title, String[][] values, HSSFWorkbook workbook) {
        // 创建一个HSSFWorkbook,对应一个Excel文件
        if (workbook == null) {
            workbook = new HSSFWorkbook();
        }
        // 在workbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = workbook.createSheet(sheetName);
        // 在sheet中添加表头第0行
        HSSFRow row = sheet.createRow(0);
        // 创建单元格,并设置值表头 设置表头居中
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        // 声明列对象
        HSSFCell cell = null;
        // 创建标题
        for (int i = 0; i < title.length; i++) {
            cell = row.createCell(i);
            cell.setCellValue(title[i]);
            cell.setCellStyle(cellStyle);
        }
        // 创建内容
        for (int i = 0; i < values.length; i++) {
            row = sheet.createRow(i + 1);
            for (int j = 0; j < values[i].length; j++) {
                // 将内容按顺序赋给对应的列对象
                row.createCell(j).setCellValue(values[i][j]);
            }
        }
        return workbook;

    }

    public void setResponseHeader(HttpServletResponse response, String fileName) {
        try {
            fileName = new String(fileName.getBytes(), "ISO8859-1");
            response.setContentType("application/octet-stream;charset=ISO8859-1");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            response.addHeader("Pargam", "no-cache");
            response.addHeader("Cache-Control", "no-cache");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @GetMapping("/excel")
    public void exportExcel(HttpServletResponse response, User user) {
        String s1 = user.toString();
        System.out.println(s1);
        String s = JSON.toJSONString(user);
        System.out.println(s);

        List<User> monthReportModels = new ArrayList<>();

        monthReportModels.add(user);
        monthReportModels.add(new User(1,"asd","111"));

        Map map = JSON.parseObject(JSON.toJSONString(user), Map.class);
        System.out.println(map);
        // Excel标题
        String[] title = {"id", "username", "age"};
        // Excel文件名
        String fileName =  "user.xls";
        // sheet名
        String sheetName = "user";
        // 将数据放到数组中
        String[][] content = new String[monthReportModels.size()][title.length];
        for (int i = 0; i < monthReportModels.size(); i++) {
            User monthReportModel = monthReportModels.get(i);
            content[i][0] = String.valueOf(monthReportModel.getId());
            content[i][1] = monthReportModel.getUsername();
            content[i][2] = monthReportModel.getAge();
        }
        // 导出Excel
        try {
            HSSFWorkbook hssfWorkbook = getHSSFWorkbook(sheetName, title, content, null);
            setResponseHeader(response, fileName);
            OutputStream outputStream = response.getOutputStream();
            hssfWorkbook.write(outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

操作excel,Workbook->Sheet->Row->Cell,得到对应对象通常都是get方法,建立对应对象通常是create方法
设置sheet名称

HSSFSheet sheet = workbook.createSheet("测试名称");

//OR

workbook.setSheetName(0, "testname");

//设置单元格内容
cell.setCellValue("单元格内容");

//获取sheet数目
workbook.getNumberOfSheets()

//根据index取得sheet对象
HSSFSheet sheet = wb.getSheetAt(0);

//取得有效的行数
int rowCount = sheet.getLastRowNum();

//取得一行的有效单元格个数
row.getLastCellNum();

//设置单元格格式
cell.setCellType(HSSFCell.CELL_TYPE_STRING);

//读取数值类型的单元格内容
cell.getNumericCellValue();

//设置列宽、行高
sheet.setColumnWidth((short)column,(short)width); 
row.setHeight((short)height);

//添加区域,合并单元格
CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, 3);
sheet.addMergedRegion(cellRangeAddress);
HSSFRow mergedRow = sheet.createRow(0);
HSSFCell mergedCell = mergedRow.createCell(0);
mergedCell.setCellValue("表格标题行");

//根据单元格不同属性返回字符串数值
public String getCellStringValue(HSSFCell cell) { 
  String cellValue = ""; 
  switch (cell.getCellType()) { 
    case HSSFCell.CELL_TYPE_STRING://字符串类型 
        cellValue = cell.getStringCellValue(); 
        if(cellValue.trim().equals("")||cellValue.trim().length()<=0) 
          cellValue=" "; 
        break; 
    case HSSFCell.CELL_TYPE_NUMERIC: //数值类型 
        cellValue = String.valueOf(cell.getNumericCellValue()); 
        break; 
    case HSSFCell.CELL_TYPE_FORMULA: //公式 
        cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC); 
        cellValue = String.valueOf(cell.getNumericCellValue()); 
        break; 
    case HSSFCell.CELL_TYPE_BLANK: 
        cellValue=" "; 
        break; 
    case HSSFCell.CELL_TYPE_BOOLEAN: 
        break; 
    case HSSFCell.CELL_TYPE_ERROR: 
        break; 
    default: 
        break; 
  } 
  return cellValue; 
}

设置样式

HSSFCellStyle style = wb.createCellStyle(); 
style.set*

设置字体样式的对象有HSSFCellStyle, HSSFFont, HSSFDataFormat等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值