Java对Excel表格的读取,处理,下载
Excel的下载:
直接通过流来读取路径下的Excel文件,将输入流(InputStream)转为字节输出流(OutputStream)后,放入HttpResponse中就OK了,前提是要设置好响应头和文件类型编码等设置
具体代码如下:
@GetMapping(/download) public void downloadExcel(HttpServletResponse response){ try{
String fileName = "xxx.xls"
InputStream docfile = getClass().getClassLoader().getResourceAsStream(fileName);
//设置响应的各种信息
response.setCharacterEncoding("UTF-8");
response.setHeader("content-type","applaction/octet-stream;charset=UTF-8");
response.setContentType("application/octet-stream;charset=UTF-8");
response.setHeader("Content-Disposition","attachment;filename="+java.net.URLEncoder.encode(fileName));
//把输出流存入response
ServletOutputStream outStream = response.getOutputStream();
//把文件写入outputstream 固定操作
byte[] buffer = new byte[10 * 1024];
int n = 0;
while((n = docfile.read(buffer)) != -1){
outStream.write(buffer,0,n);
}
outStream.flush();
outStream.close();
docfile.close();
}catch(Exception e){
e.pringtStackTrace();
}
}
Excel的上传,内容处理:
后台通过file接受前台传的Excel文件,然后用Workbook读取
//Controller层 @PostMapping("excelImport") public boolean excelImport(@Request("file")MultiparFile file)){ boolean boo = true;
try{
boo =excelService.importToMysql(file.getOriginalFilename,file);
}catch(Exception){
e.printStackTrace();
}
return boo; }
//Service层 public boolean importToMysql(String fileName,MultipartFile file){ InputStream is = file.getInputStream();
boolean notNull = false;
ArrayList<Map> list = new ArrayList<>();
//判断文件结尾类型
if(!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$") ){
throw new Exception("文件格式有误");
}
boolean isExcel2003 = true;
if (fileName.matches("^.+\\.(?i)(xlsx)$")) {
isExcel2003 = false;
}
//创建文档对象
Workbook wb = null;
if (isExcel2003) {
wb = new HSSFWorkbook(is);
} else {
wb = new XSSFWorkbook(is);
}
//创建表单
Sheet sheet = wb.getSheet(0);
if(sheet!=null){
notNull = false;
}
//总行数
int rowLength = sheet.getLastRowNum()-1;
//获取第2行的内容(根据excel内容而定,想要那行做map集合的key都行)
}
浙公网安备 33010602011771号