栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java使用poi导入导出Excel备忘录

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java使用poi导入导出Excel备忘录

1.先放入依赖。

  
		
		    org.apache.poi
		    poi-ooxml
		    3.14
	    
	      
        
           org.apache.poi
           poi
           3.14
        

2.创建工具类

public static void exportExcel(HttpServletResponse response, List header, List> dataList) throws Exception {
    exportExcel(response, "主标题", "副标题", header, dataList);
}


public static void exportExcel(HttpServletResponse response, String title, String subheading, List header, List> dataList) throws Exception {
    //获取一个HSSFWorkbook对象
    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFCellStyle style = getHSSFCellStyle(workbook);
    //创建一个sheet
    HSSFSheet sheet = workbook.createSheet("Sheet1");
    //创建一个标题行
    CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, header.size());
    //创建一个副标题行
    CellRangeAddress cellRangeAddress2 = new CellRangeAddress(1, 1, 0, header.size());
    sheet.addMergedRegion(cellRangeAddress);
    sheet.addMergedRegion(cellRangeAddress2);

    //标题,居中
    HSSFRow row0 = sheet.createRow(0);
    HSSFCell cell0 = row0.createCell(0);
    cell0.setCellValue(title);
    cell0.setCellStyle(style);
    // 第一行
    HSSFRow row1 = sheet.createRow(1);
    HSSFCell cell1 = row1.createCell(0);
    //副标题
    cell1.setCellValue(subheading);
    cell1.setCellStyle(style);

    //表头
    HSSFRow row = sheet.createRow(2);

    HSSFCell cell = null;
    for (int i = 0; i < header.size(); i++) {
        cell = row.createCell(i);
        cell.setCellValue(header.get(i));
        cell.setCellStyle(style);
    }

    //数据
    for (int i = 0; i < dataList.size(); i++) {
        row = sheet.createRow(i + 3);
        for (int j = 0; j < dataList.get(i).size(); j++) {
            row.createCell(j).setCellValue(dataList.get(i).get(j));
        }
    }

    OutputStream outputStream = response.getOutputStream();
    //设置页面不缓存
    response.reset();
    String filename = title;
    //设置返回文件名的编码格式
    response.setCharacterEncoding("utf-8");
    filename = URLEncoder.encode(filename, "utf-8");
    response.setHeader("Content-disposition", "attachment;filename=" + filename + ".xls");
    response.setContentType("application/msexcel");
    workbook.write(outputStream);
    outputStream.close();
}


public static List> importExcel(MultipartFile file, int sheetIndex, int headerIndex) throws Exception {
    Workbook workbook = null;
    //返回的data
    List> data = new ArrayList<>();
    workbook = getWorkbook(file);
    //导入某一页
    if (sheetIndex != -1 && sheetIndex > -1) {
        Sheet sheet = workbook.getSheetAt(sheetIndex);
        List> lists = importoneSheet(sheet, headerIndex);
        data.addAll(lists);
    } else {
        //导入全部
        for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
            Sheet sheet = workbook.getSheetAt(i);
            if (sheet == null) {
                continue;
            }
            List> lists = importoneSheet(sheet, headerIndex);
            data.addAll(lists);
        }
    }
    return data;
}


public static List> importExcel(MultipartFile file, int headerIndex) throws Exception {
    return importExcel(file, -1, headerIndex);
}


private static HSSFCellStyle getHSSFCellStyle(HSSFWorkbook workbook) {
    HSSFCellStyle style = workbook.createCellStyle();
    //居中
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    return style;
}



private static List> importoneSheet(Sheet sheet, int headerIndex) throws Exception {
    List> data = new ArrayList<>();
    int row = sheet.getLastRowNum();
    //row = -1 表格中没有数据
    //row = headerIndex 表格中表头以下没有数据(指没有有用数据)
    if (row == -1 || row == headerIndex) {
        throw new Exception("表格中没有有用数据!");
    }
    //通过表头获取共多少列
    int coloumNum = sheet.getRow(headerIndex).getPhysicalNumberOfCells();
    //从表头下一行开始取数据
    for (int i = headerIndex + 1; i <= row; i++) {
        Row row1 = sheet.getRow(i);
        List list = new ArrayList<>();
        if (row1 != null) {
            for (int j = 0; j < coloumNum; j++) {
                list.add(getCellValue(row1.getCell(j)));
            }
        }
        data.add(list);
    }
    return data;
}


private static Workbook getWorkbook(MultipartFile file) throws Exception {
    Workbook workbook = null;
    //获取文件名
    String fileName = file.getOriginalFilename();
    //判断文件格式
    if (fileName.endsWith(XLS)) {
        workbook = new HSSFWorkbook(file.getInputStream());
    } else if (fileName.endsWith(XLSX)) {
        workbook = new XSSFWorkbook(file.getInputStream());
    } else {
        throw new Exception("文件格式有误!");
    }
    return workbook;
}



private static String getCellValue(Cell cell) {
    String cellValue = "";
    DecimalFormat df = new DecimalFormat("#");
    switch (cell.getCellType()) {
        case HSSFCell.CELL_TYPE_STRING:
            cellValue = cell.getRichStringCellValue().getString().trim();
            break;
        case HSSFCell.CELL_TYPE_NUMERIC:
            cellValue = df.format(cell.getNumericCellValue()).toString();
            break;
        case HSSFCell.CELL_TYPE_BOOLEAN:
            cellValue = String.valueOf(cell.getBooleanCellValue()).trim();
            break;
        case HSSFCell.CELL_TYPE_FORMULA:
            cellValue = cell.getCellFormula();
            break;
        default:
            cellValue = "";
    }
    return cellValue.trim();
} 

3.导入Excel

新建controller

@RequestMapping(value = "/import", method = RequestMethod.POST)
@ResponseBody
public Object importExcel(MultipartFile file) {
    List> test = null;
    try {
        test = ExcelUtil.importExcel(file, 0);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return successView("", test);
}

在controller中是用excel工具类,参数file为excel文件,参数0为表头的索引(注意是索引,实际位置-1),工具类中还有一个参数sheetIndex为导入的是excel文件中的哪一个sheet,如果不传则为导入全部的sheet(当然要保证格式一样)

4.导出Excel

service实现

List header = new ArrayList<>();
		    header.add("需要添加表头");
		    header.add("需要添加表头");
		    header.add("需要添加表头");
		    header.add("需要添加表头");
		   
		    //新建Excel表
		    List> dataList = new ArrayList<>();
		   //调方法找数据
		    List CheckItems = checkItemMapper.getCheckItem();
		    for (int i = 0; i < CheckItems.size(); i++) {
		        List data = new ArrayList<>();
		        data.add(CheckItems.get(i).getCode());
		        data.add(CheckItems.get(i).getName());
		        data.add(CheckItems.get(i).getLabel());
		        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   
		        String format = sdf.format(CheckItems.get(i).getCreateDate());
		        System.out.println(format);
		        if( format != null || format != ""){
		        	String add = sdf.format(CheckItems.get(i).getCreateDate());
		        	data.add(add);
		        }		
		        dataList.add(data);
		        
//		        导出方法共5个参数,
//		        第一个response:HttpServletResponse,
//		        第二个title:表的主标题,
//		        第三个subheading:副标题,
//		        第四个header:表头list,
//		        第五个dataList:数据list;        
		    }
		    try {
		        exportExcel.exportExcel(response, "主标题","副标题",header, dataList);
		    } catch (Exception e) {
		        e.printStackTrace();
		    }
	}

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号