csv导出

controller

@PostMapping(value = "/exportCsv")
public ResponseEntity<byte[]> exportCsv() {    
	HttpHeaders headers = new HttpHeaders();
	headers.add("Content-Disposition", "attachment;filename=fileName.csv");
	headers.setContentType(MediaType.valueOf("application/csv;charset=GBK"));
	return new ResponseEntity<>(service.exportCsv(), headers, HttpStatus.OK);
}

service

public byte[] exportCsv() { 
	// 准备数据 
	return doExport(colNames, dataList, fields).toByteArray(); 
}

//Constants.COMMA =",”;
private doExport(String[] colNames, List<JSONObject> dataList, List<String> fields) {
    StringBuilder buf = new StringBuilder();    
    // 列名 
	for (String colName : colNames) {
		buf.append(colName).append(Constants.COMMA);  
	}    
	buf.append("\r\n");    
	// 数据    
	if (null != fundList) {
		for (JSONObject data : dataList) {
			for (String field : fields) {
				buf.append(data.get(field, "")).append(Constants.COMMA);  
			} 
		}
		buf.append("\r\n");
		}    
	}    
	// 响应    
	try (ByteArrayOutputStream os = new ByteArrayOutputStream()) {
		os.write(buf.toString().getBytes("GBK"));       
		os.flush();       
		return os;    
	} catch (Exception e) {        
		log.error("doExport错误...", e);       
		e.printStackTrace();    
	}   
	return new ByteArrayOutputStream();
}

附:
1.csv分隔符【,】,xls分隔符【tab】
2.用Excel默认方式打开UTF-8编码的csv乱码,所以采用GBK编码

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值