使用poi导入Excel并下载
@RestController
@RequestMapping({"/export"})
public class ExportExcelController {
public final static String PATH = "D:\\Export.xlsx";
@RequestMapping(value = "/doExportExcel", method = RequestMethod.POST)
//将数据传给前端
@ApiOperation("将文件转成流传给前端")
public ResponseEntity<byte[]> doExportExcel
(HttpServletRequest request) throws IOException {
//获取前端传来的result的json数据
String str = request.getParameter("result");
//调用函数
ArrayList<HashMap<String, Object>> arrayList = catchData(str);
//创建一个工作处
SXSSFWorkbook workbook = new SXSSFWorkbook();
//创建一个sheet页
SXSSFSheet sheet = workbook.createSheet();
sheet.setRandomAccessWindowSize(-1);
//定义当前行的初始值
int currentRow = 0;
int cnt;
Cell cell;
for (int i = 0; i < arrayList.size(); i++) {
cnt = 0;
Row row = sheet.createRow(currentRow);
HashMap<String, Object> map = arrayList.get(i);
System.out.println("i" + i);
//遍历集合中的数据
//注意:在处理字段名的时候第一行要注意不要只处理了字段名而忽略了第一行的值
if (currentRow == 0) {
//将key放进去
for (String key : map.keySet()) {
System.out.println("====================================");
System.out.println("key=" + key);
System.out.println("value=" + map.get(key));
System.out.println("====================================");
cell = row.createCell(cnt);
cnt++;
cell.setCellValue(key);
}
currentRow++;
//将值放进去
Row row1 = sheet.createRow(currentRow);
cnt = 0;
for (Object value : map.values()) {
if (value == null || value.toString().equals("")) {
cell = row1.createCell(cnt);
cnt++;
cell.setCellValue(" ");
} else {
cell = row1.createCell(cnt);
cnt++;
cell.setCellValue(value.toString());
}
}
} else {
for (Object value : map.values()) {
System.out.println("000000000000000000000000000000000");
System.out.println(value);
System.out.println("000000000000000000000000000000000");
if (value == null) {
System.out.println("111111111111111111111111111111111");
cnt++;
cell = row.createCell(cnt);
cell.setCellValue(" ");
} else {
cell = row.createCell(cnt);
cnt++;
cell.setCellValue(value.toString());
}
}
}
currentRow++;
}
File file = new File(PATH);
String filename = getFilename(request, "Export.xlsx");
//设置响应头
HttpHeaders headers = new HttpHeaders();
//通知浏览器以下载的方式打开文件
headers.setContentDispositionFormData("attachment", filename);
//定义以流的形式下载返回文件数据
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
System.out.println("导出成功");
//使用springmvc框架的ResponseEntity对象封装返回数据
return new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
}
/**
* 根据浏览器的不同进行编码设置
*
* @param request 请求对象
* @param filename 需要转码的文件名
* @return 返回编码后的文件名
* @throws IOException
*/
public String getFilename(HttpServletRequest request, String filename) throws IOException {
//IE不同版本User-Agent中出现的关键词
String[] IEBrowserKeyWords = {"MSIE", "Trident", "Edge"};
//获取请求头代理信息
String userAgent = request.getHeader("User-Agent");
for (String keyWord : IEBrowserKeyWords) {
if (userAgent.contains(keyWord)) {
//IE内核浏览器,统一为utf-8编码显示
return URLEncoder.encode(filename, "UTF-8");
}
}
//火狐等其他浏览器统一为ISO-8859-1编码显示
return new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
}
public ArrayList catchData(String str) throws IOException {
ArrayList<HashMap<String, Object>> arrayList = new ArrayList<>();
try {
System.out.println("_______________________");
System.out.println(str);
System.out.println("_______________________");
//将str转为JsonObject对象
JSONObject json = JSONObject.parseObject(str, Feature.OrderedField, Feature.IgnoreNotMatch);
for (String s : json.keySet()) {
if (s.equals("root")) {
//拿出root标签下的value
Object obj = json.get(s);
String value = JSONObject.toJSONString(obj, SerializerFeature.WriteMapNullValue);
//由于value是字符串型的数组如下所示,所以还得二次取值
//将value转为json数组
JSONArray array = JSONArray.parseArray(value);
//循环json数组
for (int i = 0; i < array.size(); i++) {
//将每一个数组的元素转换为JsonObject,目的是为了将key和value处理
String oo = JSONObject.toJSONString(array.get(i), SerializerFeature.WriteMapNullValue);
JSONObject ob = JSONObject.parseObject(oo);
HashMap hashMap = new HashMap();
for (String keyArr : ob.keySet()) {
hashMap.put(keyArr, ob.get(keyArr));
}
arrayList.add(hashMap);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return arrayList;
}
}
使用poi导入Excel并下载相关推荐
- Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件 ...
- POI导入模板,下载表格接口
POI导入模板,下载表格接口 package com.lg.ticket.utils;import cn.hutool.poi.excel.RowUtil; import com.baomidou.m ...
- poi导出excel写入公式_【java poi 写入Excel后读取公式值问题】poi导入excel
java poi 写入Excel后读取公式值问题 不用改公式,只需要用cell.getNumericCellValue()获取,读出来就是正确的值了,如果你读出来的还有问题,说明你其他的地方写的还有问 ...
- web端实现表单提交poi导入excel文件
<!--虎牌导入会员数据--> <a class="btn btn-primary btn-sm search-btn btn-wide btn-scroll btn-sc ...
- 如何优雅的用POI导入Excel文件
在企业级项目开发中,要经常涉及excel文件和程序之间导入导出的业务要求,那么今天来讲一讲excel文件导入的实现.java实现对excel的操作有很多种方式,例如EasyExcel等,今天我们使用的 ...
- springboot整合poi基于excel模板下载的功能实现
现在网上有很多基于poi的excel导入导出功能实现的代码,大家都写的很好,但好像关于静态资源excel模板导出的却很少.我整理了一下项目中遇到的excel导出的功能代码,展示如下,希望有所帮助,如有 ...
- poi导入excel数据思路
1.实现思路 (1) 准备excel模板,减少用户非法输入,减少报错率. (2) 导入excel,返回错误Map,key是行数,value是对应的报错. (3) 把错误列表 ...
- 纳税服务系统【用户模块之使用POI导入excel、导出excel】
前言 再次回到我们的用户模块上,我们发现还有两个功能没有完成: 对于将网页中的数据导入或导出到excel文件中,我们是完全没有学习过的.但是呢,在Java中操作excel是相对常用的,因此也有组件供我 ...
- Poi导入excel(合并单元格)
1.引入pom文件 <!-- 操作以 .xls 为后缀的 Excel --><dependency><groupId>org.apache.poi</grou ...
最新文章
- 收藏 | 卷积神经网络 C++ 从零开始实现
- 早上醒来收获一个Surprise,成为CSDN博客专家了
- Asp.net 三层架构搭建示例一
- 初识Linux——菜鸟篇
- @configurationproperties注解给属性赋值
- 百安俱乐部关于“BotNet专题讨论”资料
- 0ctf2017-babyheap调试记录fastbin-attack
- 抽象函数和虚函数有什么区别?
- 【BZOJ3916】friends(hash+分情况讨论)
- win10 电脑触摸板不能滑动_win10系统笔记本触摸板只能移动鼠标不能点击使用的处理办法...
- 武汉大学计算机学院期末考试安排,【通知】关于2019-2020学年第一学期期末考试工作安排的通知...
- LVS linux virtual server 章文嵩
- vivado布线congestion拥塞
- 有道翻译 翻译功能的功能实现
- Web 2.3.2 OpenVAS使用初探 / GVM使用入门教程(超详细)
- matlab加停顿,求高手解释下这段程序,实在是搞不懂了,要死的节奏了。。。。...
- Android学习笔记之Android平台架构和特性
- BS工作原理—BS总结
- 全国计算机等级考试一级练习题,全国计算机等级考试一级练习题
- 公共基础知识:笔的演变
热门文章
- Jupyter介绍及使用技巧
- 启航独家资料-考研英语长难句基本句型分析(2)
- 新版巨量广告投放技巧分析
- 空间三维三角形的内切圆和外接圆绘制
- qt+zint实现打印一维条形码
- .NET 7 RC 2 发布,倒计时一个月发布正式版
- java获取美元实时行情_获取股票实时交易数据的方法
- 【ES从入门到实战】二十四、全文检索-ElasticSearch-整合-SpringBoot整合high-level-client
- c语言sigsegv,(转载)如何避免 SIGSEGV
- 一种对不同类型齐格勒-尼科尔斯 P-I-D 控制器调谐算法研究(Matlab代码实现)