我的实际业务上使用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();
}
}总的来说
还是要前后端都会一点,明白了
传来什么 处理什么 返回什么
以及他们其中的
是什么 为什么 怎么做
才好独自应付过来一个项目,不然是寸步难行。
一知半解呢,又有点”由果推因“的意思了,更像是歪打正着。