Java实现Excel文件的导入和导出(个人总结仅供参考)

本文主要介绍了Java程序员如何实现Excel(xls/xlsx)文件的导入和导出功能,适用于商用系统。首先从控制器层的权限和格式校验开始,接着详细探讨了Service和ServiceImpl层的操作,以及数据模型的设计。内容包括文件输入流、Excel对象的创建,通过POIUtil工具类进行文件模板字段校验,并利用迭代器解析和存储数据。
摘要由CSDN通过智能技术生成

作为Java程序员如果所在公司主要是做商用系统的,那么在肯定会要求做模板的导入和导出的功能,这是除增删改查外最基本最简单的需求了。本小白之前做的项目中基本上都有要求做(不过都是项目一开始自带的大佬写好封装的工具类或者自己在网上直接CV大法拷一个代码,具体也没怎么研究),今天写个博客把之前的仔细研究一下

首先看这个项目有一个人员信息的模板导入,其格式是xls和xlsx两种类型。

首先在controller层进行权限和格式校验

@RestController
@RequestMapping(value = "/personnel",produces = Constants.PRODUCES)
public class personnelController {
    private static final Logger logging = LoggerFactory.getLogger(personnelController.class);

@Autowired
PersonnelService personnelService;
@Autowired
AuthorityRoleService authorityRoleService;

//文件导入
    @PostMapping("/fileImport.do")
    public Result fileImport(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request){
        Result result = new Result();
        String operator = request.getHeader("remoteUser");
        Long companyId = Long.valueOf(request.getHeader("companyId"));
        if(StringUtils.isBlank(operator)){
            String message = "缺少操作用户,导入失败";
            logging.info(message);
            result.addError("-1", message);
            return result;
        }
        if(!authorityRoleService.isTogetherStatus(operator)){
            String message = "该账户所在公司冻结,暂无权限";
            logging.info(message);
            result.addError("-2", message);
            return result;
        }
        if (!authorityRoleService.isAuthorityRole(operator,"4")){
            String message = "暂无此页面权限,请核对";
            logging.info(message);
            result.addError("-2", message);
            return result;
        }
        // 文件不正确
        if (!file.getOriginalFilename().contains(".xls") && !file.getOriginalFilename().contains(".xlsx")) {
            logging.info(Constants.ERROR_FILE_MSG);
            result.addError("-1",Constants.ERROR_FILE_MSG);
            return result;
        }
        //经营者信息批量导入
            try {
                return personnelService.fileImport(file,operator,companyId);
            } catch (Exception e) {
                String message = "导入经营者异常,导入失败";
                logging.info(message+": " + JSON.toJSONString(e));
                result.addError("-1", message);
                return result;
            }
    }
    
}

然后是service和serviceimpl层

public interface PersonnelService {
    //文件导入
    Result fileImport(MultipartFile file, String operator,Long companyId)throws Exception;
}

model模板是这样子
在这里插入图片描述
然后看一下具体解析和获取数据的代码是怎么实现的

 @Override
    @Transactional(rollbackFor = Exception.class)
    public Result fileImport(MultipartFile file, String operator,Long companyId) throws Exception  {
        Result result = new Result();
        Date time = new Date();
        List<AddPersonnelReqDto> list = new ArrayList<>();
        // 文件为空直接返回
        if (null == file) {
            String message = "模板为空,无法导入";
            logging.info(message);
            result.addError("-1", "模板为空,无法导入");
        
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下为Java实现Excel数据导入导出的示例代码: Excel数据导入: 1. 导入所需的jar包: - poi-5.0.0.jar - poi-ooxml-5.0.0.jar - poi-ooxml-lite-5.0.0.jar - poi-ooxml-schemas-5.0.0.jar - xmlbeans-4.0.0.jar - commons-collections4-4.4.jar - commons-compress-1.20.jar 2. 代码实现: ```java import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; 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; public class ExcelImportDemo { public static void main(String[] args) { try { FileInputStream file = new FileInputStream(new File("test.xlsx")); Workbook workbook = new XSSFWorkbook(file); Sheet sheet = workbook.getSheetAt(0); Iterator<Row> rowIterator = sheet.iterator(); List<List<String>> dataList = new ArrayList<>(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator<Cell> cellIterator = row.iterator(); List<String> rowData = new ArrayList<>(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch (cell.getCellType()) { case STRING: rowData.add(cell.getStringCellValue()); break; case NUMERIC: rowData.add(String.valueOf(cell.getNumericCellValue())); break; case BOOLEAN: rowData.add(String.valueOf(cell.getBooleanCellValue())); break; default: rowData.add(""); break; } } dataList.add(rowData); } file.close(); workbook.close(); System.out.println(dataList); } catch (IOException e) { e.printStackTrace(); } } } ``` Excel数据导出: 1. 导入所需的jar包: - poi-5.0.0.jar - poi-ooxml-5.0.0.jar - poi-ooxml-lite-5.0.0.jar - poi-ooxml-schemas-5.0.0.jar - xmlbeans-4.0.0.jar - commons-collections4-4.4.jar - commons-compress-1.20.jar 2. 代码实现: ```java import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; 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; public class ExcelExportDemo { public static void main(String[] args) { List<List<String>> dataList = new ArrayList<>(); List<String> header = new ArrayList<>(); header.add("姓名"); header.add("年龄"); header.add("性别"); dataList.add(header); List<String> data1 = new ArrayList<>(); data1.add("张三"); data1.add("20"); data1.add("男"); dataList.add(data1); List<String> data2 = new ArrayList<>(); data2.add("李四"); data2.add("22"); data2.add("女"); dataList.add(data2); Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); int rowNum = 0; for (List<String> rowData : dataList) { Row row = sheet.createRow(rowNum++); int cellNum = 0; for (String cellData : rowData) { Cell cell = row.createCell(cellNum++); cell.setCellValue(cellData); } } try { FileOutputStream file = new FileOutputStream("test.xlsx"); workbook.write(file); file.close(); workbook.close(); System.out.println("Excel文件已生成!"); } catch (IOException e) { e.printStackTrace(); } } } ``` 以上示例代码仅供参考,具体实现方式可以根据需要进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值