springboot+vue使用poi,生成excel并且使用输出流发送到前端浏览器

导入的包

复制代码
       <dependency>
	   	<groupId>org.apache.poi</groupId>
	   	<artifactId>poi</artifactId>
	   	<version>4.1.1</version>
	   </dependency>
	   <dependency>
	   	<groupId>org.apache.poi</groupId>
	   	<artifactId>poi-scratchpad</artifactId>
	   	<version>4.1.1</version>
	   </dependency>
	   <dependency>
	   	<groupId>org.apache.poi</groupId>
	   	<artifactId>poi-ooxml</artifactId>
	   	<version>4.1.1</version>
	   </dependency>
	   <dependency>
	   	<groupId>org.apache.poi</groupId>
	   	<artifactId>poi-ooxml-schemas</artifactId>
	   	<version>4.1.1</version>
	   </dependency>
	   <dependency>
	   	<groupId>org.apache.poi</groupId>
	   	<artifactId>ooxml-schemas</artifactId>
	   	<version>1.4</version>
	   </dependency>
	   <dependency>
	   	<groupId>org.apache.poi</groupId>
	   	<artifactId>ooxml-security</artifactId>
	   	<version>1.1</version>
	   </dependency>

前端代码

复制代码
axios({
        method: 'post',
        url: '/CheckStore/DOWNLOADA',
        data: param,
        responseType: 'blob' // 告诉 axios 期望一个 blob 响应
      })
        .then((response) => {
          const url = window.URL.createObjectURL(new Blob([response.data]))
          const link = document.createElement('a')
          link.href = url
          link.setAttribute('download', 'example.xlsx')
          document.body.appendChild(link)
          link.click()
          // 释放 URL 对象
          window.URL.revokeObjectURL(url)
        })

其中 responseType: 'blob' 是核心告诉后端返回的数据类型

复制代码
	@PostMapping(value = "/DOWNLOADA")  
//	public Object exportExcel( @RequestParam("SYS") String SYS) { 
public void exportExcel( @RequestParam("SYS") String SYS,HttpServletResponse response) throws IOException { 
		System.out.println(SYS);
		RespondResultPojo respondResultPojo=new RespondResultPojo();
//	     创建Excel工作簿和工作表  
//	    Workbook workbook = new XSSFWorkbook();  
//	    Sheet sheet = workbook.createSheet("Sheet1");  
//		System.out.println("ZEB0G0PpojojsonArray.toString()");
//	    // 填充数据(这里只是示例)  
//	    Row row = sheet.createRow(0);  
//	    Cell cell = row.createCell(0);  
//	    cell.setCellValue("Hello, Excel!");  
	     设置响应头  
//	    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");  
//	    response.setHeader("Content-Disposition", "attachment; filename=example.xlsx");  
//	    // 写入输出流  
//	    ServletOutputStream outputStream = response.getOutputStream();  
//	    workbook.write(outputStream);  
//     
//	    
//	    // 刷新并关闭流  
//	    outputStream.flush();  
//	    outputStream.close();  
//	      
//	    // 关闭工作簿  
//	    workbook.close();  
    	JSONArray jsonArray = new JSONArray();
        for (int i = 0; i < 4; i++) {
            JSONObject jsonObject = new JSONObject();  
            jsonObject.put("BGPLAC", "C1");  
            jsonObject.put("BGDIVI", "9A");
            jsonObject.put("BGOPEC", "68");
            jsonObject.put("BGITNO", "P3110KL04W30L12");
            jsonObject.put("BGCQTY", "100");
            jsonArray.add(jsonObject);
		}
        if(jsonArray == null || jsonArray.size() == 0){
            System.out.println("数据对象为空或无可操作数据.");
            return; // 跳出方法
        }
		// 创建工作簿
        Workbook workbook = new XSSFWorkbook();
        // 创建表
        Sheet sheet = workbook.createSheet("sheet 1");
        List<String> list = new ArrayList<>();  
        
        // 向列表中添加元素  
        list.add("部门1");  
        list.add("部门2");  
        list.add("部门2");  
        list.add("型号");
        list.add("数量"); 
        // 创建行
//        for(int i=0; i<=object.size(); i++){
        for (int i = 0; i < jsonArray.size()+1; i++) {  

            Row row = sheet.createRow(i); // 创建行
            
            // 设置标题列
            if(i==0){

                Font font = workbook.createFont(); // 创建字体样式
                font.setBold(true);
                font.setFontHeightInPoints((short) 12);
                CellStyle cellStyle = workbook.createCellStyle(); // 创建表格样式
                cellStyle.setFont(font);
                cellStyle.setAlignment(HorizontalAlignment.CENTER);
//                tempMap = mapList.get(0);
//                Iterator<String> keyIterator = tempMap.keySet().iterator();
                for(int j=0;j<5;j++) {
                	Cell cell = row.createCell(j); // 创建列
                    cell.setCellStyle(cellStyle);
                    cell.setCellValue(list.get(j));
                }
            }else{// 设置值列
            Object jsonObject=jsonArray.getJSONObject(i-1);
//				  for (int i = 0; i < JSONArrayList.size(); i++) {  
//				        Object obj2 = JSONArrayList.get(i);
            JSONObject jsonObject2 = JSON.parseObject(jsonObject.toString());  
			 String bgitno = jsonObject2.getString("BGITNO");//型号  
			 String bgplac = jsonObject2.getString("BGPLAC");
			 String bgdivi = jsonObject2.getString("BGDIVI");//型号
			 String bgopec = jsonObject2.getString("BGOPEC");//型号 
			 String bgcqty = jsonObject2.getString("BGCQTY");//型号 
			 Cell cell = row.createCell(0);  
			 cell.setCellValue( bgplac);
			 Cell cell1 = row.createCell(1);  
			 cell1.setCellValue( bgdivi);
			 Cell cell2 = row.createCell(2);  
			 cell2.setCellValue( bgopec);
			 Cell cell3 = row.createCell(3);  
			 cell3.setCellValue( bgitno);
			 Cell cell4 = row.createCell(4);  
			 cell4.setCellValue( bgcqty);	      
            }
         }
       ServletOutputStream outputStream = response.getOutputStream();  
	   workbook.write(outputStream);     
	    
	    // 刷新并关闭流  
	    outputStream.flush();  
	    outputStream.close();  
//		return respondResultPojo.success("查询成功");
	}

这是没有加数据库查询的相应类型

相关推荐
IT_陈寒18 分钟前
JavaScript性能飞跃:5个V8引擎优化技巧让你的代码提速300%
前端·人工智能·后端
艾小码29 分钟前
这份超全JavaScript函数指南让你从小白变大神
前端·javascript
reembarkation38 分钟前
vue 右键菜单的实现
前端·javascript·vue.js
00后程序员张3 小时前
Fiddler抓包工具使用教程,代理设置与调试方法实战解析(含配置技巧)
前端·测试工具·ios·小程序·fiddler·uni-app·webview
.格子衫.6 小时前
Spring Boot 原理篇
java·spring boot·后端
多云几多7 小时前
Yudao单体项目 springboot Admin安全验证开启
java·spring boot·spring·springbootadmin
摇滚侠8 小时前
Spring Boot 3零基础教程,Spring Intializer,笔记05
spring boot·笔记·spring
2301_768350238 小时前
Vue第二期:组件及组件化和组件的生命周期
前端·javascript·vue.js
小周同学:9 小时前
Vue项目中将界面转换为PDF并导出的实现方案
javascript·vue.js·pdf
Jabes.yang9 小时前
Java求职面试实战:从Spring Boot到微服务架构的技术探讨
java·数据库·spring boot·微服务·面试·消息队列·互联网大厂