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 <V> {
|
|
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();
|
}
|
}
|