使用Apach的PIO

通过网上查到Apach PIO提供了以下几种方法:

HSSF - 读写XLS格式档案(Excel2003)。
XSSF - 读写OOXML XLSX格式档案(Excel2007+)。
HWPF - 读写Word-DOC97格式档案。
XWPF - 读写Word-DOC2003格式档案。
HSLF - 读写PowerPoint格式档案。
HDGF - 读visio格式档案。
HPBF - 读ublisher格式档案。
HSMF - 读Ooutlook格式档案

先来看看xlsx格式的文档导出导入(Excel2007+)

pom依赖导入阿里巴巴的easyexcel即可

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.7</version>
</dependency>

1、导入Excel

Controller代码

@RequestMapping("uploadExcel")
public String uploadExcel(MultipartFile file) {try {List<JSONObject> contentList = ExcelUtil.readExcelContent(file, 1, 0);return "ok";} catch (Exception e) {e.printStackTrace();return e.getMessage();}
}

工具类ExcelUtil

 /*** 导入excel模块* headerLineCount:标题的行数* sheetAt:读取几第个sheet(从0开始)*/
public static List<JSONObject> readExcelContent(MultipartFile file, Integer headerLineCount, Integer sheetAt) throws Exception {List<JSONObject> content = Lists.newArrayList();// 上传文件名Workbook wb = ExcelUtil.getWb(file);if (wb == null) {throw new Exception("导入模板不合法,请排查!!");}Sheet sheet = wb.getSheetAt(sheetAt);// 得到总行数int rowNum = sheet.getLastRowNum();Row row;// 正文内容应该从第headerLine行开始for (int i = headerLineCount; i <= rowNum; i++) {row = sheet.getRow(i);JSONObject map = new JSONObject();boolean hasData = false;//得到第row行的列数int colNum = row.getPhysicalNumberOfCells();for (int j = 0; j < colNum; j++) {Cell cell = row.getCell(j);//下面两行不可少,需要重新设置类型和值CellType cellType = cell.getCellTypeEnum();String val= ExcelUtil.getCellContent(cell);//日期默认是数字类型,判断是否为数字类型if (cellType.equals(CellType.NUMERIC)) {cell.setCellType(CellType.NUMERIC);cell.setCellValue(Double.parseDouble(val));//判断是否是日期类型if (DateUtil.isCellDateFormatted(cell)) {Date tempValue = cell.getDateCellValue();SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");val= simpleFormat.format(tempValue);} else {val= String.valueOf(cell.getNumericCellValue());}} else {cell.setCellType(CellType.STRING);val= cell.getStringCellValue();}if (StringUtils.isNotEmpty(val)) {hasData = true;}}if (hasData) {content.add(map);}}return content;}

2、导出Excel

Controller

@RequestMapping("downloadExcel")
public void downloadExcel(HttpServletResponse response) {try {String jsonStr="[" +"    {" +"        \"field1\":\"姓名\"," +"        \"field2\":\"性别\"," +"        \"field3\":\"年龄\"" +"    }," +"    {" +"        \"name\":\"小明\"," +"        \"sex\":\"男\"," +"        \"age\":\"18\"" +"    }," +"    {" +"        \"name\":\"小红\"," +"        \"sex\":\"女\"," +"        \"age\":\"20\"" +"    }" +"]";JSONArray dataArray = JSONArray.parseArray(jsonStr);List<List<String>> rowList = new ArrayList<>();for(int i=0;i<dataArray.size();i++){//字段名List<String> cellList = new ArrayList<>();JSONObject cellJSON=dataArray.getJSONObject(i);for (Map.Entry<String, Object> entry: cellJSON.entrySet()) {String val = entry.getValue()+"";cellList.add(val);}rowList.add(cellList);}ExcelUtil.exportExcel(response, rowList, "数据模板", "数据模板", 15);} catch (Exception e) {e.printStackTrace();}
}

工具类ExcelUtil

/*** Excel表格导出** @param response    HttpServletResponse对象* @param excelData   Excel表格的数据,封装为List<List<String>>* @param sheetName   sheet的名字* @param fileName    导出Excel的文件名* @param columnWidth Excel表格的宽度,建议为15* @throws IOException 抛IO异常*/
public static void exportExcel(HttpServletResponse response,List<List<String>> excelData,String sheetName,String fileName,int columnWidth) throws IOException {fileName+=".xlsx";//生成excelXSSFWorkbook workbook=manage(excelData,sheetName,columnWidth);//准备将Excel的输出流通过response输出到页面下载//八进制输出流response.setContentType("application/octet-stream");//设置导出Excel的名称response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")+";"+"filename*=utf-8''"+URLEncoder.encode(fileName, "UTF-8"));//刷新缓冲response.flushBuffer();//workbook将Excel写入到response的输出流中,供页面下载该Excel文件workbook.write(response.getOutputStream());//关闭workbookworkbook.close();
}/*** 根据输入的信息生成excel* @param excelData* @param sheetName* @param columnWidth* @return*/
private static XSSFWorkbook manage(List<List<String>> excelData, String sheetName, int columnWidth){//声明一个工作簿XSSFWorkbook workbook = new XSSFWorkbook();//生成一个表格,设置表格名称XSSFSheet sheet = workbook.createSheet(sheetName);//设置表格列宽度sheet.setDefaultColumnWidth(columnWidth);//写入List<List<String>>中的数据int rowIndex = 0;for (List<String> data : excelData) {//创建一个row行,然后自增1XSSFRow row = sheet.createRow(rowIndex++);//遍历添加本行数据for (int i = 0; i < data.size(); i++) {//创建一个单元格XSSFCell cell = row.createCell(i);cell.setCellType(CellType.STRING);//创建一个内容对象XSSFRichTextString text = new XSSFRichTextString(data.get(i));//将内容对象的文字内容写入到单元格中cell.setCellValue(text);}}return  workbook;
}

Java导出导入Excel方法相关推荐

  1. php 利用 PHPExcel 导出 导入 Excel 方法介绍(功能介绍)

    第一步 phpexcel官网上http://phpexcel.codeplex.com 下载最新的phpexcel类,下载解压缩后有一个classes文件夹,里面包含了PHPExcel.php和PHP ...

  2. springmvc使用easypoi导出导入Excel表(1):导出Excel表

    编译工具:eclipse 项目:maven+ssm springmvc使用easypoi导出导入Excel表(2):导入Excel表 在pom.xml引入easypoi的依赖包: <!--eas ...

  3. java导出 elsx 文件,如何获取java导出的excel文件,发送请求导出excle文件

    如何获取java导出的excel文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 request.setCharacterEncoding("utf-8"); ...

  4. php导入excel源码,利用PHPExcel类库,实现PHP导出导入Excel表格Excel文件!

    [温馨提示]源码包解压密码:www.youhutong.com 利用PHPExcel类库,实现PHP导出导入Excel文件!(案例教程源码) 需要注意的地方就是: 1.导出文件时,如果你的字段过多,可 ...

  5. Android SQLite数据库导出/导入Excel

    Android SQLite数据库导出/导入Excel 前言 框架 使用方法 添加依赖 声明权限 导出数据库到Excel 声明实例 配置导出内容 导出监听 导入Excel到数据库 声明实例 导入监听 ...

  6. 不同版本的SQL Server之间数据导出导入的方法及性能比较

    原文:不同版本的SQL Server之间数据导出导入的方法及性能比较 工作中有段时间常常涉及到不同版本的数据库间导出导入数据的问题,索性整理一下,并简单比较下性能,有所遗漏的方法也欢迎讨论.补充. 0 ...

  7. 前端表格导出为excel方法合集

    前端表格导出为excel方法合集 近来遇到了前端表格保存为excel的需求,通过查阅多方资料,总结了3种方法,下面一一进行展示,有不正确的地方,望指正.主要包括两种导出方法--纯前端导出和前端接收后端 ...

  8. phpmyadmin批量导出导入的方法步骤

    描述:phpmyadmin批量导出导入的方法步骤 步骤: phpmyadmin选择相应的表,点击导出,格式选择csv 打开导出的csv格式,按照格式输入需要批量导入的数据 phpmyadmin选择相应 ...

  9. java导出复杂excel

    Java 导出复杂excel,多表格中有合并以及描述 实体类 package com.hs.report.entity.week; import lombok.Builder; import lomb ...

  10. impdp 并行_EXPDP和IMPDP数据泵进行导出导入的方法

    EXPDP和IMPDP数据泵进行导出导入的方法 使用expdp和impdp时应该注重的事项: 1.exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. 2.expdp和impd ...

最新文章

  1. 【查询】—Entity Framework实例详解
  2. Linux中文件系统简介
  3. SQlite-数据库的访问实例(转)
  4. 连接关键词用什么符号
  5. 数据结构与算法之猫狗队列
  6. 网络带宽由什么决定_你的二手奢侈品价格到底由什么决定,奢侈品回收标准是什么...
  7. Android之在在EditText的xml里面配置了相关属性依然没有显示光标问题
  8. c++用一级运算比较大小_16.初中数学:怎么比较a、b、c、d的大小?幂的运算,基础常见考题...
  9. Bootstrap下拉菜单相关
  10. 阿里云容器Kubernetes监控(五) - 离线存储与归档Kubernetes事件
  11. MATLAB--基本绘图函数
  12. 天正坐标标注怎么不显示_[CAD标注坐标如何显示XY]cad坐标标注不显示
  13. 另一种blast2go的思路
  14. oracle character set mismatch,EntityFramework查询oracle数据库时报ora-12704: character set mismatch...
  15. 荧光法焦磷酸检测试剂盒的制备和准备工作方案
  16. Linux主备网卡检测脚本,检测linux eth0网卡带宽的脚本
  17. 2019牛客暑期多校训练营(第三场) - D - Big Integer - 数论
  18. CUDA out of memory. Tried to allocate 16.00 MiB (GPU 0; 6.00 GiB total capacity;总结(1)
  19. 什么是java方法的重载?
  20. 【转】Android 设置Wifi热点、打开与关闭的监听

热门文章

  1. JS动态加载JSON文件并读取数据
  2. vi编辑器的常用命令
  3. GMSSL双证书认证C/S(Linux版)
  4. Hbuilder:实现阴影透明背景特效
  5. sha256 oracle,node如何使用sha256算法?
  6. 微信小程序商城毕业设计毕设作品(6)任务书
  7. docker镜像存储在哪里
  8. Android自定义输入车牌号键盘、车牌简称,数字 ,字母键盘
  9. sqlserver数据库置疑处理
  10. Java中的<>@造型专家_day_16_20210412