package com.estate.expert.admin.io.processor; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * 数据处理器基础类 * * 用于处理Excel文件的读取和写入 */ public abstract class DataProcessorBase { protected abstract String[] getHeaders(); public abstract String getName(); protected abstract V parseSheet(XSSFSheet sheet); protected abstract void writeSheet(XSSFSheet sheet, V data); public V loadFromWorkbook(String filePath) throws IOException { return loadFromWorkbook(new FileInputStream(filePath)); } public V loadFromWorkbook(InputStream inputStream) throws IOException { var workbook = new XSSFWorkbook(inputStream); var sheet = workbook.getSheetAt(0); return parseSheet(sheet); } public void saveWorkbook(OutputStream outputStream, V data) throws IOException { // 从输入流中创建工作簿 var workbook = new XSSFWorkbook(); var sheet = workbook.createSheet(getName()); var headerRow = sheet.createRow(0); var headers = getHeaders(); for (int i = 0; i < headers.length; i++) { headerRow.createCell(i).setCellValue(headers[i]); } writeSheet(sheet, data); // 调整列宽以适应内容 for (int i = 0; i < headers.length; i++) { sheet.autoSizeColumn(i); } workbook.write(outputStream); workbook.close(); } }