Java导出表格,导出表格,表格导出,导出Excel,导入Excel 工具包

分享一个表格导出的jar包,使用场景:因为Poi版本太老还有项目框架的问题无法使用主流的工具包


声明:此工具包完全个人编写,基于poi3.9版本进行编写,新版poi有一些参数上的优化,可能导致jar包无法使用,且文件导出格式为老版表格后缀为“.xls”,请编写demo测试是否适用场景再使用。

下载

链接:https://pan.baidu.com/s/1IefluW74RuTK9Vt4upTdYg?pwd=1234
提取码:1234

使用介绍

把包放入项目中lib目录
引入:

<dependency>
			<groupId>org.xfm.util</groupId>
			<artifactId>ExcelUtil</artifactId>
			<version>1.0-SNAPSHOT</version>
			<scope>system</scope>
			<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/ExcelUtil-1.0-SNAPSHOT.jar</systemPath>
		</dependency>

使VO类实现ExcelInterface并实现四个方法
方法分为两种 导出方法,导入方法
导出:

  1. getCellName 获取字段映射,通过字段名获取对应中文,注意是双向获取
    具体实现:
 public String getCellName(String s) {
        switch (s){
            case "thisDay":return "记录时间";
            case "userName":return "用户名";
            case "officeName":return "公司名";
            case "areaName":return "大区名";
            
            case "记录时间":return "thisDay";
            case "用户名":return "userName";
            case "公司名":return "officeName";
            case "大区名":return "areaName";
            
        }
        return null;
    }
  1. getTits 这个方法控制字段的显示显示的顺序
    实现如下:
 /**
     * @return
     */
    @Override
    public List<String> getTits() {
        return new ArrayList<>(Arrays.asList(
                "thisDay",
                "userName",
                "officeName",
                "areaName"
        ));
    }

导入以及导出模板的方法:

/**
     * @param s
     * @return
     */
    @Override
    public String getCellNameSet(String s) {
        switch (s){
            case "thisDay":return "记录时间";
            case "userName":return "用户名";
            case "officeName":return "公司名";
            case "areaName":return "大区名";
            
            case "记录时间":return "thisDay";
            case "用户名":return "userName";
            case "公司名":return "officeName";
            case "大区名":return "areaName";
            
        }
        return null;
    }
/**
     * @return
     */
    @Override
    public List<String> getTitsModel() {
        return new ArrayList<>(Arrays.asList(
                "thisDay",
                "userName",
                "officeName",
                "areaName"
        ));
    }
    

导入导出的方式实现上基本是一致的,只不过是字段配置上的差异,比如导出时需要哪些字段,但是导入不需要。
到这里配置就已经完成了,下面是如何使用

调用

  1. 导出以及导出模板
public List<KpBusinessProgressVO> dow(KpBusinessProgressDTO kpBusinessProgressDTO, HttpServletResponse response) {


        // 创建一个工作簿对象
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 创建一个工作表对象
        Sheet sheet = workbook.createSheet("业务进度");
        sheet.setDefaultColumnWidth(14);
        // 创建一个标题行
        Map<String, HSSFCellStyle> styleMap = StatisticsReportController.createCellStyle(workbook);
        //可以自定义样式map key:titleStyle 标题样式 key:headStyle 第二行字段标题样式

        //导出数据
        if ("0".equals(kpClientNodeDTO.getType())) {//为0时导出数据 否则导出模板
            List<KpBusinessProgressVO> list=dao.findList1(kpBusinessProgressDTO);//查询数据list
	        //这里可以处理字典项
	        
	        // 设置单元格title内容和样式
	        ExcelUtils.renderTitle1("业务进度", KpBusinessProgressVO.class, sheet, styleMap);
			//填充数据
	        ExcelUtils.renderValue(list, KpBusinessProgressVO.class, sheet, styleMap, workbook);
        } else {
            // 导出模板
            ExcelUtils.renderTitle1Model("业务进度", KpBusinessProgressVO.class, sheet, styleMap);
        }

		//响应文件
        try {
            // 设置Excel文件名,并以中文进行编码
            String codedFileName = new String("业务进度");
            response.setHeader("Content-Disposition", "attachment;filename=" + new String(codedFileName.getBytes(), "iso-8859-1") + ".xls");
            // 响应类型,编码
            response.setContentType("application/octet-stream;charset=UTF-8");
            // 形成输出流
            OutputStream osOut = response.getOutputStream();
            // 将指定的字节写入此输出流
            workbook.write(osOut);
            // 刷新此输出流并强制将所有缓冲的输出字节被写出
            osOut.flush();
            // 关闭流
            osOut.close();
        } catch (Exception e) {
            logger.info("错误信息", e);
        }

        return list;
    }
  1. 导入
public JsonAppData upload(KpBusinessProgressDTO kpBusinessProgressDTO) {
        if (kpBusinessProgressDTO.getFile() == null)
            return new JsonAppData("0", "文件为空", "");
        //收集数据 注意关键代码只有这一行,其他都是业务代码
        List<KpBusinessProgressVO> kpBusinessProgressDetailVOList = ExcelUtils.getWorkVos(kpBusinessProgressDTO.getFile(), KpBusinessProgressVO.class);


        if (kpBusinessProgressDetailVOList.isEmpty()) {
            return new JsonAppData("0", "没有任何数据!", null);
        }
        
        StringBuffer stringBuffer=new StringBuffer();
        
        for (int i = 0; i < kpBusinessProgressDetailVOList.size(); i++) {
            KpBusinessProgressVO kpBusinessProgressVOFor = kpBusinessProgressDetailVOList.get(i);
            //工具类内判空方法 最后一个参数不进行判空的字段集合,返回数据 **字段不能为空! 。。。
            String isNull = ExcelUtils.getIsNull(kpBusinessProgressVOFor, KpBusinessProgressVO.class,new ArrayList<>(Arrays.asList("备注")));
            if (!"".equals(isNull)) {
                stringBuffer.append("第" + (i + 1) + "行 " + isNull+"  ");
            }
			//下面对每条数据进行校验
            
        }
        //判断是否有错误信息
        if(StringUtils.isNotBlank(stringBuffer.toString())){
            return new JsonAppData("0",stringBuffer.toString(),null);
        }
        //插入数据
        int count = 0;
        for (KpBusinessProgressVO kpBusinessProgressVO : kpBusinessProgressDetailVOList) {
            KpBusinessProgress kpBusinessProgress = new KpBusinessProgress();
            BeanUtils.copyProperties(kpBusinessProgressVO, kpBusinessProgress);
            kpBusinessProgress.preInsert();
            kpBusinessProgress.setId(String.valueOf(UUID.randomUUID()));
            kpBusinessProgress.setIsClose("0");
            count += dao.insert(kpBusinessProgress);
        }
        return new JsonAppData("1", "导入成功," + count + "条数据已导入!", null);
    }

拙劣代码献丑了,希望各位大佬可以不吝赐教,咱也会谦逊求教共同进步!
使用上有不明白的地方发邮件 1376428952@qq.com

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成 Java 自定义 Excel 表格导出代码可以使用以下代码片段作为参考: ```java public class ExcelUtil { /** * 导出 Excel 表格 * * @param filename 文件名 * @param headers 表头 * @param data 表格数据 * @param out 输出流 * @throws IOException */ public static void exportExcel(String filename, String[] headers, List<Map<String, Object>> data, OutputStream out) throws IOException { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(filename); // 设置表头样式 XSSFCellStyle headerStyle = workbook.createCellStyle(); headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setFillForegroundColor(IndexedColors.LIGHT_TURQUOISE.getIndex()); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerStyle.setBorderTop(BorderStyle.THIN); headerStyle.setBorderBottom(BorderStyle.THIN); headerStyle.setBorderLeft(BorderStyle.THIN); headerStyle.setBorderRight(BorderStyle.THIN); // 创建表头行 XSSFRow headerRow = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { XSSFCell cell = headerRow.createCell(i); cell.setCellValue(headers[i]); cell.setCellStyle(headerStyle); } // 设置表格数据样式 XSSFCellStyle dataStyle = workbook.createCellStyle(); dataStyle.setBorderTop(BorderStyle.THIN); dataStyle.setBorderBottom(BorderStyle.THIN); dataStyle.setBorderLeft(BorderStyle.THIN); dataStyle.setBorderRight(BorderStyle.THIN); // 填充表格数据 for (int i = 0; i < data.size(); i++) { XSSFRow dataRow = sheet.createRow(i + 1); Map<String, Object> rowData = data.get(i); for (int j = 0; j < headers.length; j++) { XSSFCell cell = dataRow.createCell(j); Object value = rowData.get(headers[j]); if (value != null) { if (value instanceof String) { cell.setCellValue((String) value); } else if (value instanceof Integer) { cell.setCellValue((Integer) value); } else if (value instanceof Double) { cell.setCellValue((Double) value); } else if (value instanceof Date) { cell.setCellValue((Date) value); XSSFCellStyle dateStyle = workbook.createCellStyle(); dateStyle.setDataFormat(workbook.getCreationHelper().createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss")); cell.setCellStyle(dateStyle); } } cell.setCellStyle(dataStyle); } } // 自适应列宽 for (int i = 0; i < headers.length; i++) { sheet.autoSizeColumn(i); } // 输出 Excel 文件 workbook.write(out); workbook.close(); } } ``` 在这里,我们使用了 Apache POI 库来生成 Excel 表格。在 `exportExcel` 方法中,我们首先创建了一个 `XSSFWorkbook` 对象来表示 Excel 文件。然后,我们创建了一个 `XSSFSheet` 对象来表示表格,并设置了表头样式和表头行。接着,我们填充了表格数据,并根据数据类型设置了单元格样式。最后,我们自适应列宽,并将 Excel 文件输出到指定的输出流中。 要使用该工具类导出 Excel 表格,只需要调用 `exportExcel` 方法即可,如下所示: ```java List<Map<String, Object>> data = new ArrayList<>(); Map<String, Object> row1 = new LinkedHashMap<>(); row1.put("id", 1); row1.put("name", "张三"); row1.put("age", 20); row1.put("create_time", new Date()); data.add(row1); Map<String, Object> row2 = new LinkedHashMap<>(); row2.put("id", 2); row2.put("name", "李四"); row2.put("age", 22); row2.put("create_time", new Date()); data.add(row2); String[] headers = {"id", "name", "age", "create_time"}; String filename = "test.xlsx"; OutputStream out = new FileOutputStream(filename); ExcelUtil.exportExcel(filename, headers, data, out); out.close(); ``` 在这个例子中,我们首先创建了一个包含两行数据的表格数据 `data`,然后创建了一个包含表头信息的字符串数组 `headers`,并指定了导出Excel 文件名 `filename` 和输出流 `out`。最后,我们调用 `exportExcel` 方法导出 Excel 表格,并关闭输出流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值