|
以上就是我所要导入的Excel模板。
需求重点
经过这次需求的实现,发现这个需求最难的点 就在 模板模板模板!
模板中数据的关系,理清楚思路
模板中的数据,到底是多sheet还是说有合并单元进行导入
实现感悟
不管是多个sheet、还是说合并单元格、最重要的思想都是说将Excel中的数据进行拼接为一条一条的List记录进行新增数据。
- /**
- * 用于检测是否是表头行,此方法就是说代码再执行的时候找到一级这个字段的名称,然后知道获取字段从此开始
- *
- * @param row
- * @return
- */
- private boolean isHeaderRow(Row row) {
- Cell firstCell = row.getCell(1);
- return firstCell != null && "一级".equals(firstCell.getStringCellValue().trim());
- }
复制代码- /**
- *
- * 上传文件,进行解析
- * @param file 文件
- * @return
- */
- public Result<?> importExcels(MultipartFile file) {
- Map<Integer, List<Object>> sheetDataMap = new HashMap<>();
- try {
- // 获取工作簿,解析整个Excel文件
- Workbook workbook = new XSSFWorkbook(file.getInputStream());
- // 循环遍历每个Sheet
- for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
- Sheet sheet = workbook.getSheetAt(i);
- // 解析每个Sheet的数据
- List<Object> sheetData = parseSheet(sheet);
- // 将Sheet的数据存储到Map中,以Sheet名称为Key
- sheetDataMap.put(i, sheetData);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- // 处理数据
- processingData(sheetDataMap);
- return Result.ok(sheetDataMap);
- }
复制代码 [code] /** * 解析给定的Sheet,并将数据存储到List中 * * @param sheet 要解析的Sheet * @return 包含每行数据的List */ private List parseSheet(Sheet sheet) { List data = new ArrayList(); boolean isHeaderFound = false; // 循环遍历每一行数据 for (int rowIndex = 1; rowIndex |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|