我的实际业务上使用Apache poi Excel操作遇到的一些问题

我的实际业务上使用Apache poi Excel操作遇到的一些问题

  1. 很多博客的都是HSSFCellStyle设置居中格式,但是XSSFCellStyle的居中没有提到

    XSSFWorkbook workbook=new XSSFWorkbook();
    XSSFCellStyle CellStyle=workbook.createCellStyle();
    CellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
    CellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
    
  2. 设置字体

    XSSFWorkbook创造XSSFCellStyle和XSSFFont

    XSSFFont要被style设置才会生效

                XSSFFont firstFont=workbook.createFont();
                firstFont.setBold(true);
                firstFont.setFontHeightInPoints((short)20);
                firstFont.setFontName("宋体");
                firstCellStyle.setFont(firstFont);
    
  3. 注意: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);
        }
    }
    
  4. 导出

    以我接手的这个项目的导出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();
            }
        }
    

    总的来说

    还是要前后端都会一点,明白了

    • 传来什么
    • 处理什么
    • 返回什么

    以及他们其中的

    • 是什么
    • 为什么
    • 怎么做

    才好独自应付过来一个项目,不然是寸步难行。

    一知半解呢,又有点”由果推因“的意思了,更像是歪打正着。

posted @   YuChun_9293  阅读(813)  评论(5编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示