1.创建导入 导出工具类,写入其导入和导出方法

导出成外部文件:

public static ResponseEntity<byte[]> emp2Excel(List<Emp> list) {
    //1. 创建一个 Excel 文档
   
HSSFWorkbook workbook = new HSSFWorkbook();
    //2. 创建文档摘要
   
workbook.createInformationProperties();
    //3. 获取并配置文档信息
    
DocumentSummaryInformation docInfo = workbook.getDocumentSummaryInformation();
    //文档类别
   
docInfo.setCategory("员工信息");
    //文档管理员
   
docInfo.setManager("javaboy");
    //设置公司信息
   
docInfo.setCompany("www.javaboy.org");
    //4. 获取文档摘要信息
   
SummaryInformation summInfo = workbook.getSummaryInformation();
    //文档标题
   
summInfo.setTitle("员工信息表");
    //文档作者
   
summInfo.setAuthor("javaboy");
    // 文档备注
   
summInfo.setComments("本文档由 javaboy 提供");
    //5. 创建样式
   
//创建标题行的样式
   
HSSFCellStyle headerStyle = workbook.createCellStyle();
    headerStyle.setFillForegroundColor(IndexedColors.YELLOW.index);
    headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    HSSFCellStyle dateCellStyle = workbook.createCellStyle();
    dateCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
    HSSFSheet sheet = workbook.createSheet("员工信息表");
    //设置列的宽度
 
sheet.setColumnWidth(0, 5 * 256);
    sheet.setColumnWidth(1, 12 * 256);
    sheet.setColumnWidth(2, 10 * 256);
    sheet.setColumnWidth(3, 5 * 256);

//6. 创建标题行
   
HSSFRow r0 = sheet.createRow(0);
    HSSFCell c0 = r0.createCell(0);
    c0.setCellValue("编号");
    c0.setCellStyle(headerStyle);
    HSSFCell c1 = r0.createCell(1);
    c1.setCellStyle(headerStyle);
    c1.setCellValue("姓名");
    HSSFCell c2 = r0.createCell(2);
    c2.setCellStyle(headerStyle);
    c2.setCellValue("性别");
    HSSFCell c3 = r0.createCell(3);
    c3.setCellStyle(headerStyle);
    c3.setCellValue("薪水");

for (int i = 0; i < list.size(); i++) {
        Emp emp = list.get(i);
        HSSFRow row = sheet.createRow(i + 1);
        row.createCell(0).setCellValue(emp.getEid());
        row.createCell(1).setCellValue(emp.getEname());
        row.createCell(2).setCellValue(emp.getSex());
        row.createCell(3).setCellValue(emp.getSalary());
    }

ByteArrayOutputStream baos = new ByteArrayOutputStream();
    HttpHeaders headers = new HttpHeaders();
    try {
        headers.setContentDispositionFormData("attachment", new String("员工表2.xls".getBytes("UTF-8"), "ISO-8859-1"));
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        workbook.write(baos);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return new ResponseEntity<byte[]>(baos.toByteArray(), headers, HttpStatus.CREATED);
}

外部文件导入:
public static List<Emp> excel2Emp(MultipartFile file, List<Nation> allNations, List<Politicsstatus> allPoliticsstatus, List<Department> allDepartments, List<Position> allPositions, List<JobLevel> allJobLevels) {
    List<Emp> list = new ArrayList<>();
    Emp emp = null;
    try {
        //1. 创建一个 workbook 对象
       
HSSFWorkbook workbook = new HSSFWorkbook(file.getInputStream());
        //2. 获取 workbook 中表单的数量
       
int numberOfSheets = workbook.getNumberOfSheets();
        for (int i = 0; i < numberOfSheets; i++) {
            //3. 获取表单
           
HSSFSheet sheet = workbook.getSheetAt(i);
            //4. 获取表单中的行数
           
int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
            for (int j = 0; j < physicalNumberOfRows; j++) {
                //5. 跳过标题行
               
if (j == 0) {
                    continue;//跳过标题行
                
}
                //6. 获取行
               
HSSFRow row = sheet.getRow(j);
                if (row == null) {
                    continue;//防止数据中间有空行
               
}
                //7. 获取列数
               
int physicalNumberOfCells = row.getPhysicalNumberOfCells();
                emp = new Emp();
                for (int k = 0; k < physicalNumberOfCells; k++) {
                    HSSFCell cell = row.getCell(k);
                    switch (cell.getCellType()) {
                        case STRING:
                            String cellValue = cell.getStringCellValue();
                            switch (k) {
                                case 0:
                                    emp.setEid(Integer.valueOf(cellValue));
                                    break;
                                case 1:
                                    emp.setEname(cellValue);
                                    break;
                                case 2:
                                    emp.setSex(cellValue);
                                    break;
                                case 3:
                                    emp.setSalary(Double.valueOf(cellValue));
                                    break;
                            }
                            break;
                        default:
                            break;
                    }
                }
                list.add(emp);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return list;
}

注意导出时,row.createCell(0).setCellValue();中只能为字符串,否则报空指针异常,加一个 +"" 就行,注意从数据库中查找的列要和表中的对应,不能少于表中的数据,不然表中数据为Null

注意:其中导入数据时,遇到整形或者日期Date类型的时候需要注意参数的类型设置,如下:

switch (cell.getCellType()) {
    case STRING:
        String cellValue = cell.getStringCellValue();
        switch (k) {
            case 0:
                employeeec.setId(Integer.valueOf(cellValue));
                break;
            case 2:
                employeeec.setEname(cellValue);
                break;
            case 3:
                employeeec.setDepname(cellValue);
                break;
            case 4:
                employeeec.setPosname(cellValue);
                break;
            case 6:
                employeeec.setEcreason(cellValue);
                break;
            case 9:
                employeeec.setRemark(cellValue);
                break;
        }
        break;
    default:
        switch (k) {
            case 1:
                cell.setCellType(CellType.STRING);
                employeeec.setEid(Integer.parseInt(cell.getStringCellValue()));
                break;
            case 7:
                cell.setCellType(CellType.STRING);
                employeeec.setEcpoint(Integer.parseInt(cell.getStringCellValue()));
                break;
            case 8:

//整形,先把表格类型转成String,然后在设置
                cell.setCellType(CellType.STRING);

employeeec.setEctype(Integer.parseInt(cell.getStringCellValue()));
                break;
            case 5:

//日期
                employeeec.setEcdate(cell.getDateCellValue());
                break;
        }
        break;
}

注意值为 "null" 的情况

switch (cell.getCellType()) {
    case STRING:
        String cellValue = cell.getStringCellValue();
        switch (k) {
            case 0:
                emp.setEid(Integer.valueOf(cellValue));
                break;
            case 1:
                emp.setEname(cellValue);
                break;
            case 2:
                emp.setSex(cellValue);
                break;
            case 3:
                cell.setCellType(CellType.STRING);
                if (cell.getStringCellValue().equals("null")){
                    emp.setSalary(0.0);
                    break;
                }
                emp.setSalary(Double.parseDouble(cell.getStringCellValue()));
                break;
        }
        break;
    default:
        break;
}

下面直接看运行效果 :

导入

Java 实现数据库数据 导入 导出成Excel文档的功能相关推荐

  1. JAVA实现数据库数据导入/导出到Excel(POI)

    原文地址为: JAVA实现数据库数据导入/导出到Excel(POI) 准备工作: 1.导入POI包:POI下载地址http://mirrors.tuna.tsinghua.edu.cn/apache/ ...

  2. java基于easypoi实现对导出的excel文档加密

    **项目背景 随着项目日新月异的变化,对数据的安全性也越来越高,特别是政府类型的项目,数据安全往往是非常重要的,最近项目中导出的文件被要求需要密码才能打开,所以写下这篇文章,特此记录一下. 文章目录 ...

  3. Java案例:数据表转换成XML文档

    将数据表查询内容转换成XML文件,便于在网络上进行传输,具有一定的实用价值.   1.数据表(student) 2.数据库连接管理类 /*** 功能:获得数据库连接* 作者:华卫* 日期:2010年4 ...

  4. 蓝的成长记——追逐DBA(3):古董上操作,数据导入导出成了问题

    蓝的成长记--追逐DBA(3):古董上操作,数据导入导出成了问题 ***************************************声明************************** ...

  5. oracle数据库数据导入导出步骤(入门)

    oracle数据库数据导入导出步骤(入门) 说明:  1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL  2.如果熟悉命令,建议用exp/i ...

  6. cmd imp导入dmp文件_这是一篇长篇入门级数据库讲解:oracle数据库数据导入导出步骤...

    正如标题一样,本文内容主要介绍了浅谈入门级oracle数据库数据导入导出步骤,文章通过步骤解析介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧!!! ...

  7. oracle临时表经常被锁_这是一篇长篇入门级数据库讲解:oracle数据库数据导入导出步骤

    正如标题一样,本文内容主要介绍了浅谈入门级oracle数据库数据导入导出步骤,文章通过步骤解析介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧!!! ...

  8. oracle数据库数据导入导出步骤

    oracle数据库数据导入导出步骤(基础) 前言: Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系数据库管理系统.它是在数据库领域一直处于领先 ...

  9. oracle 加载数据戽_oracle数据库数据导入导出步骤(入门)

    oracle数据库数据导入导出步骤(入门) 说明: 1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/imp ...

最新文章

  1. Java实现网页截屏功能(基于phantomJs)
  2. 视频+课件| 室内动态变化场景中的相机重定位(CVPR2021)
  3. 如何把一个程序中 Edit 中的文本赋给另一个程序的 Edit ? - 回复 Disk_ 的问题
  4. 加强linux操作系统DNS服务安全
  5. 无法删除当前已连接的用户处理办法
  6. syslog 向内存中缓存_漫谈缓存(Cache)、大规模芯片系统的存储层次结构优化以及开源仿真工具ZSim...
  7. ajax跨域解决方案
  8. c调用易语言串口,易语言串口API源码
  9. Android StateFlow详解
  10. Mysql8.0可以使用解压版 这个比较快 好像现在都是解压版了
  11. vue-cli-service不是内部或外部命令,也不是可运行的程序
  12. MyBatis的CURD
  13. 计算机辅助数控编程交互图形,第六章 计算机辅助数控编程.ppt
  14. 删除Docker出现: device or resource busy错误
  15. 数仓知识03:“自上而下“建设数仓和“自下而上“建设数仓的差异
  16. BZOJ 1582: [Usaco2009 Hol]Holiday Painting 节日画画
  17. 微信小程序拼团功能页面展示
  18. 梦幻西游手游经验任务链计算机,梦幻西游手游跑环任务详解 刷经验利器
  19. 一维搜索方法/黄金分割法(附matlab代码)
  20. 【MySQL高可用】MySQL高可用之MGR部署

热门文章

  1. 深度解析Java游戏服务器开发
  2. 教你一步解决大部分wallpaper engine使用时卡顿、鼠标延迟的问题
  3. 转屏动画 - 安卓R
  4. $().each() 与 $.each()区别
  5. 也跟风玩一玩CH552
  6. 视频剪辑工具,批量给视频添加上下图片
  7. Linux C报错: /usr/bin/ld: cannot find -ldb
  8. 产品三维模型在线展示
  9. matlab不是内部或外部命令_如何解决Telnet不是内部或外部命令(电脑提示telnet不是内部或外部命令...
  10. gke下载_我们如何在GKE上升级Kubernetes