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("查询成功");
	}

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

相关推荐
毕设小屋vx ylw2824261 分钟前
Java开发、Java Web应用、前端技术及Vue项目
java·前端·vue.js
冴羽1 小时前
今日苹果 App Store 前端源码泄露,赶紧 fork 一份看看
前端·javascript·typescript
蒜香拿铁1 小时前
Angular【router路由】
前端·javascript·angular.js
时间的情敌1 小时前
Vite 大型项目优化方案
vue.js
brzhang1 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构
西洼工作室2 小时前
高效管理搜索历史:Vue持久化实践
前端·javascript·vue.js
lang201509282 小时前
Spring Boot日志配置完全指南
java·spring boot·单元测试
广州华水科技2 小时前
北斗形变监测传感器在水库安全中的应用及技术优势分析
前端
开发者如是说2 小时前
Compose 开发桌面程序的一些问题
前端·架构
故事不长丨2 小时前
【Java SpringBoot+Vue 实现视频文件上传与存储】
java·javascript·spring boot·vscode·后端·vue·intellij-idea