用POI实现 报表读取

来源:互联网 发布:java list转json字符串 编辑:程序博客网 时间:2024/05/20 14:17
package com.bjnlmf.nerc.operation.web.controller.picture;import com.bjnlmf.nerc.common.api.enumeration.ImageType;import com.bjnlmf.nerc.common.api.util.ResponseJson;import com.bjnlmf.nerc.configration.api.enumeration.ServiceType;import com.bjnlmf.nerc.configration.api.pojo.Area;import com.bjnlmf.nerc.configration.api.pojo.AreaQuery;import com.bjnlmf.nerc.configration.api.pojo.News;import com.bjnlmf.nerc.configration.api.service.AreaService;import com.bjnlmf.nerc.configration.api.service.NewsService;import com.bjnlmf.nerc.configration.api.service.UploadService;import com.bjnlmf.nerc.operation.web.shiro.ShiroUtils;import org.apache.commons.jexl2.UnifiedJEXL;import org.apache.poi.hssf.usermodel.HSSFDateUtil;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import java.io.*;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import java.util.Map;@Controller@RequestMapping("/upload")public class UploadController {    @Autowired    UploadService uploadService;    @Autowired    NewsService newsService;    @Autowired    AreaService areaService;    private Logger logger = LoggerFactory.getLogger(UploadController.class);    /**     * 上传图片和缩略图     */    @RequestMapping(value = "image", method = RequestMethod.POST)    @ResponseBody    public ResponseJson<Map<String,String>> imageUpload(ImageType imageType, MultipartFile image) throws IOException{        String prefix=getPrefix(image);//获得文件后缀        return ResponseJson.ok(uploadService.upload(image.getBytes(),prefix,imageType));    }    /**     * 上传文件     */    @RequestMapping(value = "file", method = RequestMethod.POST)    @ResponseBody    public ResponseJson<String> fileUpload(MultipartFile  file) throws IOException {        String prefix=getPrefix(file);//获得文件后缀        return ResponseJson.ok(uploadService.upload(file.getBytes(),prefix));    }    //获得文件后缀    private String getPrefix(MultipartFile file){        String fileName = file.getOriginalFilename();        return fileName.substring(fileName.lastIndexOf(".")+1);    }    /**     * 读取excel文件     */    @RequestMapping(value = "excel", method = RequestMethod.POST)    @ResponseBody    public ResponseJson<String> excelUpload(MultipartFile  file) throws IOException {            // 检查            // this.preReadCheck(filePath);            // 获取workbook对象            Workbook workbook = null;            try {                ByteArrayInputStream  is = new ByteArrayInputStream(file.getBytes());                String prefix=getPrefix(file);                if (prefix.equals("xls")) {                workbook = new HSSFWorkbook(is);                } else if (prefix.equals("xlsx")) {                    workbook = new XSSFWorkbook(is);                }            // 读文件 一个sheet一个sheet地读取            for (int numSheet = 0; numSheet < 1; numSheet++) {                Sheet sheet = workbook.getSheetAt(numSheet);                if (sheet == null) {                    continue;                }                int firstRowIndex = sheet.getFirstRowNum();                int lastRowIndex = sheet.getLastRowNum();                // 读取首行 即,表头                Row firstRow = sheet.getRow(firstRowIndex);                if(!this.getCellValue(firstRow.getCell(0), true).equals("标题")){                    return  ResponseJson.ok("excel文件字段不对应");                }                if(!this.getCellValue(firstRow.getCell(1), true).equals("来源")){                    return  ResponseJson.ok("excel文件字段不对应");                }                if(!this.getCellValue(firstRow.getCell(2), true).equals("政策发布时间")){                    return  ResponseJson.ok("excel文件字段不对应");                }                if(!this.getCellValue(firstRow.getCell(3), true).equals("内容")){                    return  ResponseJson.ok("excel文件字段不对应");                }                if(!this.getCellValue(firstRow.getCell(4), true).equals("所属省份")){                    return  ResponseJson.ok("excel文件字段不对应");                }                if(!this.getCellValue(firstRow.getCell(5), true).equals("市名")){                    return  ResponseJson.ok("excel文件字段不对应");                }                // 读取数据行                for (int rowIndex = firstRowIndex + 1; rowIndex <= lastRowIndex; rowIndex++) {                    Row currentRow = sheet.getRow(rowIndex);// 当前行                    News news = new News();                    String title = this.getCellValue(currentRow.getCell(0), true);                    if (title.equals("") || title == null) {                        break;                    }                    news.setTitle(title);                    String resource = this.getCellValue(currentRow.getCell(1), true);                    if(resource!="" && resource !=null){                        news.setSource(resource);                    }                    String time = this.getCellValue(currentRow.getCell(2), true);                    if(time!=""&&time!=null){                        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");                        Date date = sf.parse(time);                        news.setReleaseTime(date);                    }else{                        news.setReleaseTime(new Date());                    }                    news.setContent(this.getCellValue(currentRow.getCell(3), true));                    //news.setServiceType(this.getCellValue(currentRow.getCell(4), true));                    String province = this.getCellValue(currentRow.getCell(4), true);                    String city = this.getCellValue(currentRow.getCell(5), true);                    List<Area> province1s= areaService.queryListProvince();                    for (Area province1:province1s) {                            if(province1.getAreaName().equals(province)){                                if(city == null || city == ""){                                    news.setTerritory(province1.getAreaCode());                                    break;                                }else{                                    AreaQuery query = new AreaQuery();                                    query.setParentId(province1.getId());                                    List<Area> citys = areaService.queryList(query);                                    for (Area ct:citys) {                                        if(ct.getAreaName().equals((city))){                                            news.setTerritory(ct.getAreaCode());                                            break;                                        }                                    }                                    break;                                }                            }                    }                    String userToken = ShiroUtils.getCurrentUserToken();                    news.setUserToken(userToken);                    news.setServiceState("1");                    newsService.save(news);                }            }        } catch (Exception e) {            e.printStackTrace();        } finally {            if (workbook != null) {                try {                    workbook.cloneSheet(1);                } catch (UnifiedJEXL.Exception e) {                    e.printStackTrace();                }            }        }        return  ResponseJson.ok("导入成功");    }        /**         * 取单元格的值         * @param cell 单元格对象         * @param treatAsStr 为true时,当做文本来取值 (取到的是文本,不会把“1”取成“1.0”)         * @return         */        private String getCellValue(Cell cell ,boolean treatAsStr) {            if (cell == null) {                return "";            }            if (treatAsStr) {                // 虽然excel中设置的都是文本,但是数字文本还被读错,如“1”取成“1.0”                // 加上下面这句,临时把它当做文本来读取                cell.setCellType(Cell.CELL_TYPE_STRING);            }            if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {                return String.valueOf(cell.getBooleanCellValue());            } else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {                return String.valueOf(cell.getNumericCellValue());            } else {                return String.valueOf(cell.getStringCellValue());            }        }}

0 0
原创粉丝点击