package com.suigu.taskSheet.service.impl;
import com.suigu.taskSheet.service.ProtectionServiceService;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Service;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
@Slf4j
@Service
public class ProtectionServiceImpl implements ProtectionServiceService {
@Override
public void read(){
//此处改为文件路径
String excelFilePath = "C:/Users/Administrator/Desktop/list.xlsx";
//创建存放数据的json列表
List<Map<String, Object>> jsonData = new ArrayList<>();
//异常捕获
try (FileInputStream fileInputStream = new FileInputStream(excelFilePath);
//读取文件流 创建工作簿
Workbook workbook = new XSSFWorkbook(fileInputStream)) {
//获取第一个sheet
Sheet sheet = workbook.getSheetAt(0);
// 第二行为字段名 设置为json键名
Row headerRow = sheet.getRow(1);
//获取有效的数据列数
int numberOfColumns = headerRow.getPhysicalNumberOfCells();
//二维for循环 先行后列 从第三行开始读取正式数据 i<=最后一行行数
for (int i = 2; i <= sheet.getLastRowNum(); i++) {
//读取第i行数据
Row row = sheet.getRow(i);
//创建map存储数据 使用LinkedHashMap保证顺序
Map<String, Object> rowData = new LinkedHashMap<>();
//从第二列开始读取,不要序号
for (int j = 1; j < numberOfColumns; j++) {
//读取单元格数据
Cell cell = row.getCell(j);
//获取值名
String columnName = headerRow.getCell(j).getStringCellValue();
//调用getCellValue方法获取合法类型的数据值
Object cellValue = getCellValue(cell);
//将键名和值,按顺序存入LinkedHashMap中
rowData.put(columnName, cellValue);
}
//将map键值对放入json列表
jsonData.add(rowData);
}
// 转换为JSON
ObjectMapper objectMapper = new ObjectMapper();
String jsonOutput = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonData);
System.out.println(jsonOutput);
} catch (IOException e) {
e.printStackTrace();
}
}
private static String getCellValue(Cell cell) {
if (cell == null) {
return "";
}
switch (cell.getCellType()) {
case STRING:
return cell.getStringCellValue();
case NUMERIC:
return String.valueOf(cell.getNumericCellValue());
case BOOLEAN:
return String.valueOf(cell.getBooleanCellValue());
default:
return "";
}
}
}
Java从Excel读取数据,并输出为JSON格式
于 2024-08-02 10:15:18 首次发布