我的实际业务上使用Apache poi Excel操作遇到的一些问题
我的实际业务上使用Apache poi Excel操作遇到的一些问题
- 很多博客的都是HSSFCellStyle设置居中格式,但是XSSFCellStyle的居中没有提到 - XSSFWorkbook workbook=new XSSFWorkbook();
 XSSFCellStyle CellStyle=workbook.createCellStyle();
 CellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
 CellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
- 设置字体 - XSSFWorkbook创造XSSFCellStyle和XSSFFont - XSSFFont要被style设置才会生效 - XSSFFont firstFont=workbook.createFont();
 firstFont.setBold(true);
 firstFont.setFontHeightInPoints((short)20);
 firstFont.setFontName("宋体");
 firstCellStyle.setFont(firstFont);
- 注意:row.setRowStyle(CellStyle)失效 - 设置导出的Excel的格式还是老老实实一个一个cell设置 - 没有找到封装好的获取sheet的尺寸的方法,只能自己想办法获取 - row.setRowStyle(titleCellStyle);//使用不了,主要推测是row划分成了cell导致设置好的row格式被cell(默认格式)覆盖了
 for(int i=1;i<goodsList.size()+2;i++){//两层循环遍历
 XSSFRow row=xssfSheet.getRow(i);
 for(int j=0;j<19;j++){
 row.getCell(j).setCellStyle(allCellStyle);
 }
 }
- 导出 - 以我接手的这个项目的导出Excel为例,它是前端调用/export这个接口,前端会在HttpServletResponse里设置好文件名之类的参数,这里涉及到前后端的交互,很多别人的博客不讲这个,导致我一开始上手有点搞不明白了。 - 还是要多跟老大和前端沟通一下(主要没有文档给我看 ,小项目都只能自己摸索) - 前后端交互的是后端实时写文件给前端。 - @PostMapping("/export")
 /**
 * @param response 前端设置了文件名等参数
 * @param requestBody 发送来的请求,处理成json类
 * @throws IOException
 */
 public void export(HttpServletResponse response, @RequestBody String requestBody) throws IOException {
 
 //输出
 OutputStream os = response.getOutputStream();
 workbook.write(os);
 os.flush();
 os.close();
 }- 后面要求做一个移动端的Excel导出,又是后台写好存在磁盘的,两者在输出上有一定差别(具体原理上我没有仔细研究,只是秉承着能用就行的务实主义) - 移动端会传来一个RequestBody,里面是json,再处理转化为Java里的list(传来的数据显然是要按照格式的) - 这里是类似于这种:{data:[code1,code2,code3]} - 后面是本地文件的输出,用的FileOutputStream,文件要设置路径 - /**
 * 重写移动端导出盘整记录方法
 * @author yu_chun
 * @since 2021/7/26
 * @param request 发来请求 主要就是token验证
 * @parm requestBody 移动端传来一堆String的list
 */
 @PostMapping("/createStatistic")
 public Json create(@RequestBody String requestBody, HttpServletRequest request) {
 try {
 JSONObject jsonObject = JSONObject.parseObject(requestBody);
 User user = AuthUtil.getUser(request.getHeader("Token"));
 //移动端传RFID列表过来
 List<String> statistics = jsonObject.getJSONArray("data").toJavaList(String.class);
 
 //输出
 String fileName="/home/output/storeStatistic/"+df.format(new Date())+".xlsx";
 File file =new File(fileName);
 FileOutputStream fileOutputStream=new FileOutputStream(file);
 workbook.write(fileOutputStream);
 fileOutputStream.close();
 }
 }- 总的来说- 还是要前后端都会一点,明白了 - 传来什么 
- 处理什么 
- 返回什么 
 - 以及他们其中的 - 是什么 
- 为什么 
- 怎么做 
 - 才好独自应付过来一个项目,不然是寸步难行。 - 一知半解呢,又有点”由果推因“的意思了,更像是歪打正着。 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号