Java利用POI实现导入导出Excel表格

本文实例为大家分享了Java利用POI实现导入导出Excel表格的具体代码,供大家参考,具体内容如下

一、Java利用POI实现导入导出Excel表格demo

1.引入依赖

<dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
       <version>4.1.2</version>
</dependency>

2.导入demo

2.1 controller层

/**
     * Excel导入 
     */
    @PostMapping("/import")
    public Result userImport2(@RequestParam("file") MultipartFile file) throws Exception{
        Result result=userService.userImportExcel(file);
        return result;
    }

2.2 service实现类层

public Result userImportExcel(MultipartFile file){
    try {
        InputStream inputStream = file.getInputStream();
        XSSFWorkbook sheets = new XSSFWorkbook(inputStream);
        //获取表单sheet 第一个
        XSSFSheet sheetAt = sheets.getSheetAt(0);
        //获取第一行
        int firstRowNum = sheetAt.getFirstRowNum();
        //最后一行
        int lastRowNum = sheetAt.getLastRowNum();
        //存入数据集合
        List<User> users=new ArrayList<>();
        //遍历数据
        for(int i=firstRowNum+1;i<lastRowNum+1;i++){
            XSSFRow row = sheetAt.getRow(i);
            if(row!=null){
               /* //获取第一行的第一列
                int firstCellNum = row.getFirstCellNum();
                //获取第一行的最后列
                short lastCellNum = row.getLastCellNum();
                for (int j=firstCellNum;j<lastCellNum+1;j++){
                    //放入集合中需要可以用这种方法
                    String cellValue = getValue(row.getCell(firstCellNum));
                }*/
                //这里我就直接赋值
                User user = new User();
                user.setUname(row.getCell(0).getStringCellValue());
                user.setUpassword(row.getCell(1).getStringCellValue());
                user.setUsex(row.getCell(2).getStringCellValue());
                user.setRole(row.getCell(3).getStringCellValue());
                user.setUlove((int) row.getCell(4).getNumericCellValue());
                user.setUphoto(row.getCell(5).getStringCellValue());
                user.setUaddress(row.getCell(6).getStringCellValue());
                users.add(user);
            }
        }
        //保存数据
        saveBatch(users);
        return Result.success();
    }catch (Exception e){
        e.printStackTrace();
        log.info("error:{}",e);
    }

    return Result.error("300","导入失败");
}

/**
 * 判断值的类型
 */
public String getValue(HSSFCell cell) {

    if(cell==null){
        return "";
    }
    String cellValue= "";
    try {
        DecimalFormat df=new DecimalFormat("0.00");
        if(cell.getCellType()== CellType.NUMERIC){
            //日期时间转换
            if(HSSFDateUtil.isCellDateFormatted(cell)){
                cellValue=DateFormatUtils.format(cell.getDateCellValue(),"yyyy-MM-dd");
            }else{
                NumberFormat instance = NumberFormat.getInstance();
                cellValue=instance.format(cell.getNumericCellValue()).replace(",","");
            }

        }else if(cell.getCellType() == CellType.STRING){
            //字符串
            cellValue=cell.getStringCellValue();
        }else if(cell.getCellType() == CellType.BOOLEAN){
            //Boolean
            cellValue= String.valueOf(cell.getBooleanCellValue());
        }else if(cell.getCellType() == CellType.ERROR){
            //错误
        }else if(cell.getCellType() == CellType.FORMULA){
            //转换公式 保留两位
            cellValue=df.format(cell.getNumericCellValue());
        }else{
            cellValue=null;
        }

    } catch (Exception e) {
        e.printStackTrace();
        cellValue="-1";
    }

    return cellValue;
}

3.导出demo

3.1 controller层

/**
 * 导出 
 * @param response
 * @return
 * @throws Exception
 */
@GetMapping("/export")
public Result userExport2(HttpServletResponse response) throws Exception{
    Result result=userService.userExportExcel(response);
    return result;
}

3.2 service实现类

public Result userExportExcel(HttpServletResponse response) {
    try {
        //创建excel
        XSSFWorkbook sheets = new XSSFWorkbook();
        //创建行
        XSSFSheet sheet = sheets.createSheet("用户信息");
        //格式设置
        XSSFCellStyle cellStyle = sheets.createCellStyle();
        //横向居中
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        //创建单元格第一列
        XSSFRow row = sheet.createRow(0);
        //表头
        this.titleExcel(row,cellStyle);
        //查询全部的用户数据  mybatis-plus
        List<User> list = list();
        //遍历设置值
        for(int i=0;i<list.size();i++){
            XSSFRow rows = sheet.createRow(i+1);
            User user=list.get(i);
            //表格里赋值
            this.titleExcelValue(user,rows,cellStyle);
        }
        //设置浏览器响应格式
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        String filName= URLEncoder.encode("用户信息","UTF-8");
        response.setHeader("Content-Disposition","attachment;filename="+filName+".xls");

        ServletOutputStream outputStream=response.getOutputStream();
        sheets.write(outputStream);
        outputStream.close();
        sheets.close();
        return Result.success();

    }catch (Exception e){
        e.printStackTrace();
        log.info("error:{}",e);
    }

    return Result.error("300","导出失败");
}

/**
*表格里赋值
**/
public void titleExcelValue(User user, XSSFRow row,XSSFCellStyle cellStyle) {
    XSSFCell cellId = row.createCell(0);
    cellId.setCellValue(user.getUid());
    cellId.setCellStyle(cellStyle);

    XSSFCell cellUserName = row.createCell(1);
    cellUserName.setCellValue(user.getUname());
    cellUserName.setCellStyle(cellStyle);

    XSSFCell cellPassword = row.createCell(2);
    cellPassword.setCellValue(user.getUpassword());
    cellPassword.setCellStyle(cellStyle);

    XSSFCell cellSex = row.createCell(3);
    cellSex.setCellValue(user.getUsex());
    cellSex.setCellStyle(cellStyle);

    XSSFCell cellRole = row.createCell(4);
    cellRole.setCellValue(user.getRole());
    cellRole.setCellStyle(cellStyle);

    XSSFCell cellLoveValue = row.createCell(5);
    cellLoveValue.setCellValue(user.getRole());
    cellLoveValue.setCellStyle(cellStyle);

    XSSFCell cellPhone = row.createCell(6);
    cellPhone.setCellValue(user.getUphoto());
    cellPhone.setCellStyle(cellStyle);

    XSSFCell cellAddress = row.createCell(7);
    cellAddress.setCellValue(user.getUaddress());
    cellAddress.setCellStyle(cellStyle);

}
/**
    表头
**/
public void titleExcel(XSSFRow row,XSSFCellStyle cellStyle){

    XSSFCell cellId = row.createCell(0);
    cellId.setCellValue("用户ID");
    cellId.setCellStyle(cellStyle);

    XSSFCell cellUserName = row.createCell(1);
    cellUserName.setCellValue("用户名");
    cellUserName.setCellStyle(cellStyle);

    XSSFCell cellPassword = row.createCell(2);
    cellPassword.setCellValue("密码");
    cellPassword.setCellStyle(cellStyle);

    XSSFCell cellSex = row.createCell(3);
    cellSex.setCellValue("性别");
    cellSex.setCellStyle(cellStyle);

    XSSFCell cellRole = row.createCell(4);
    cellRole.setCellValue("角色");
    cellRole.setCellStyle(cellStyle);

    XSSFCell cellLoveValue = row.createCell(5);
    cellLoveValue.setCellValue("爱心值");
    cellLoveValue.setCellStyle(cellStyle);

    XSSFCell cellPhone = row.createCell(6);
    cellPhone.setCellValue("电话号码");
    cellPhone.setCellStyle(cellStyle);

    XSSFCell cellAddress = row.createCell(7);
    cellAddress.setCellValue("地址");
    cellAddress.setCellStyle(cellStyle);

}

二、Hutool工具类封装方法导出导入Excel

1.引入依赖

把poi封装到工具类方法里面

<!-- hutool  -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.20</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
</dependency>

2.导入demo

/**
     * Excel导入 
*/
@PostMapping("/import")
public Result userImport(@RequestParam("file") MultipartFile file) throws Exception{
        System.out.println(file.toString());
        //InputStream inputStream = multipartFile.getInputStream();
        InputStream inputStream = file.getInputStream();
        ExcelReader reader = ExcelUtil.getReader(inputStream);
        //读取表的内容
        List<List<Object>> list = reader.read(1);
        List<User> users = new ArrayList<>();
        for(List<Object> row : list){
            User user = new User();
            user.setUname(row.get(0).toString());
            user.setUpassword(row.get(1).toString());
            user.setUsex(row.get(2).toString());
            user.setRole(row.get(3).toString());
            user.setUlove(Integer.valueOf(row.get(4).toString()));
            user.setUphoto(row.get(5).toString());
            user.setUaddress(row.get(6).toString());
            users.add(user);
        }
        //批量插入用户信息 mybatis-plus
        userService.saveBatch(users);
        return Result.success();
    }

3.导出demo

 /**
     * Excel导出 方法一
     */
    @GetMapping("/export")
    public Result userExport(HttpServletResponse response) throws Exception{
        //查询全部的用户数据
        List<User> list = userService.list();
        //在内存里做操作,保存到浏览器
        ExcelWriter writer = ExcelUtil.getWriter(true);
        //自定义标题别名
        writer.addHeaderAlias("uname","用户名");
        writer.addHeaderAlias("upassword","密码");
        writer.addHeaderAlias("usex","性别");
        writer.addHeaderAlias("role","角色");
        writer.addHeaderAlias("ulove","爱心值");
        writer.addHeaderAlias("uphoto","电话号码");
        writer.addHeaderAlias("uaddress","地址");
        //一次性写出list内的对象的Excel,使用默认样式,强制输出标题
        writer.write(list,true);
        //设置浏览器响应格式
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        String filName= URLEncoder.encode("用户信息","UTF-8");
        response.setHeader("Content-Disposition","attachment;filename="+filName+".xls");

        ServletOutputStream outputStream=response.getOutputStream();
        writer.flush(outputStream,true);
        outputStream.close();
        writer.close();
        return Result.success();
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java使用EasyExcel导入导出excel

    一.准备工作 1.导包 <!-- poi 相关--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.apache.poi</groupId

  • Java利用POI实现导入导出Excel表格示例代码

    介绍 Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟.官方主页http://poi.apache.org/index.html,API文档http://poi.apache.org/apidocs/index.html 实现 已经在代码中加入了完整的注释. import java.io.FileInputSt

  • Java实现导入导出Excel文件的方法(poi,jxl)

    目前,比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel直接上代码: 一,POI POI是apache的项目,可对微软的Word,Excel,Ppt进行操作,包括office2003和2007,Excl2003和2007.poi现在一直有更新.所以现在主流使用POI. xls: pom: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi

  • Java中Easypoi实现excel多sheet表导入导出功能

    Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 <!-- 导出文件工具 EasyPoi实现Excel读写管理测试用例 --> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-spring-boot-starter</artifactId> <version>4.

  • Java实现Excel导入导出数据库的方法示例

    本文实例讲述了Java实现Excel导入导出数据库的方法.分享给大家供大家参考,具体如下: 由于公司需求,想通过Excel导入数据添加到数据库中,而导入的Excel的字段是不固定的,使用得通过动态创建数据表,每个Excel对应一张数据表,怎么动态创建数据表,可以参考前面一篇<java使用JDBC动态创建数据表及SQL预处理的方法>. 下面主要讲讲怎么将Excel导入到数据库中,直接上代码:干货走起~~ ExcellToObjectUtil 类 主要功能是讲Excel中的数据导入到数据库中,有几

  • java实现Excel的导入导出

    本文实例为大家分享了java实现Excel导入导出的具体代码,供大家参考,具体内容如下 一.Excel读写技术 区别: 二.jxl读写基础代码 1.从数据库将数据导出到excel表格 public class JxlExcel { public static void main(String[] args) { //创建Excel文件 String[] title= {"姓名","课程名","分数"}; File file=new File(&q

  • Java实现Excel导入导出操作详解

    目录 前言 1. 功能测试 1.1 测试准备 1.2 数据导入 1.2.1 导入解析为JSON 1.2.2 导入解析为对象(基础) 1.2.3 导入解析为对象(字段自动映射) 1.2.4 导入解析为对象(获取行号) 1.2.5 导入解析为对象(获取原始数据) 1.2.6 导入解析为对象(获取错误提示) 1.2.7 导入解析为对象(限制字段长度) 1.2.8 导入解析为对象(必填字段验证) 1.2.9 导入解析为对象(数据唯一性验证) 1.3 数据导出 1.3.1 动态导出(基础) 1.3.2 动

  • Java+EasyExcel实现文件的导入导出

    目录 引言 效果图 项目结构 核心源码 核心实体类 核心监听器类 EasyExcel导入文件 EasyExcel导出文件 引言 项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息,导出员工信息,手动输入比较繁琐,所以本篇博文教大家如何在Java中导入Excel文件与导出Excel文件 技术栈 Excel工具:EasyExcel 选用框架:Spring.Spring MVC.MyBatis(SSM) 项目构建管理工具:Maven 需求: 1.要求利用excel工具实现员工信息

  • Java用POI导入导出Excel实例分析

    1.异常java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException 解决方法: 使用的poi的相关jar包一定版本一定要相同!!!!! 2.maven所使用jar包,没有使用maven的话,就用poi-3.9.jar和poi-ooxml-3.9.jar(这个主要是用于Excel2007以后的版本)两个jar包就行() <dependency> <groupId>org.apache.po

  • Java利用POI实现导入导出Excel表格

    本文实例为大家分享了Java利用POI实现导入导出Excel表格的具体代码,供大家参考,具体内容如下 一.Java利用POI实现导入导出Excel表格demo 1.引入依赖 <dependency>       <groupId>org.apache.poi</groupId>       <artifactId>poi-ooxml</artifactId>        <version>4.1.2</version>

  • Java中利用POI优雅的导出Excel文件详解

    前言 故事是这样开始的: 公司给排了几天的工期,让完成 2 个功能模块的开发.其中有一个场景是这样的,从 Excel 导入数据,要求数据不能重复.用户可以下载导入失败的 Excel 文件. 这样就有 2 种实现 将失败数据存储数据库,需要下载时生成 Excel 下载即可 将失败数据生成 Excel 文件存储文件服务器,然后返回下载链接. 老大要求按方案二进行.好吧,导出 Excel 是再常见不过的功能了,然而总是觉得以前写的不够优雅,所以决定进行简单的封装,以适应简单场景的 Excel 导出.

  • Java利用POI读取、写入Excel的方法指南

    前言 Apache POI [1] 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.POI为"Poor Obfuscation Implementation"的首字母缩写,意为"简洁版的模糊实现". 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里

  • js导出Excel表格超出26位英文字符的解决方法ES6

    这个需要对Excel表格的表头编码规则有所了解,目前示例代码只扩展到52个字段 /** *json数据导入导出Excel表格示例代码 * / var array_utils = require('./utils-array') var XLSX = require("xlsx"); module.exports = { writeExcel : function (headers,data,file,callback) { if(data.length ==0){ var obj =

  • Java利用Easyexcel导出excel表格的示例代码

    目录 1.导入 EasyExcel Maven包 2.配置 3.输出Excel到前端 1.导入 EasyExcel Maven包 <!--easyexcel 导出excel依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.7</version> </depend

  • JAVA导出EXCEL表格的实例教学

    小伙伴们,最近比较忙,没什么时间写,今天给大家分享的是JAVA如何导出EXCEL表格,因为最近有做这样一个功能,所以分享出来,如有不对之处,敬请指正. 在许多企业办公系统中,经常会有用户要求,需要对数据进行统计并且可以直接下载Excel文件,这样子的话,既然客户提出了要求,我们就应该去满足吖,毕竟客户是上帝嘛,那么我们如何去实现呢?且看我为你一一道来. POI简介:Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组件组成,其中有用于操作Excel

  • ASP.Net MVC利用NPOI导入导出Excel的示例代码

    什么是NPOI 该项目是位于http://poi.apache.org/的POI Java项目的.NET版本.POI是一个开源项目,可以帮助您读取/写入xls,doc,ppt文件.它有着广泛的应用.本文给大家介绍ASP.Net MVC利用NPOI导入导出Excel的问题. 因近期项目遇到所以记录一下: 首先导出Excel: 首先引用NPOI包 (Action一定要用FileResult) /// <summary> /// 批量导出本校第一批派位学生 /// </summary>

随机推荐