我的实际业务上使用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(); } }
总的来说
还是要前后端都会一点,明白了
传来什么 处理什么 返回什么
以及他们其中的
是什么 为什么 怎么做
才好独自应付过来一个项目,不然是寸步难行。
一知半解呢,又有点”由果推因“的意思了,更像是歪打正着。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!