优化上面代码,不用实体类
时间: 2024-10-22 12:10:14 浏览: 24
如果你不想使用实体类直接操作单元格,EasyExcel也提供了直接操作行和列的方式。不过,这种方式通常用于处理更复杂的格式或自定义的逻辑。以下是不使用实体类的例子:
```java
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.cell.CellData;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.excel.read.metadata.ReadWorkbook;
import com.alibaba.excel.write.metadata.WriteCell;
import com.alibaba.excel.write.metadata.WriteRow;
import com.alibaba.excel.write.metadata.WriteSheet;
import java.io.FileOutputStream;
import java.util.List;
import java.util.Map;
// 数据存储结构可以是Map<String, List<String>> 或其他适合的形式
Map<String, List<String>> dataMap = ...; // {"Sheet1": ["A1", "B1", "C1"], "Sheet2": ["D1", "E1", "F1"]};
try (FileOutputStream outputStream = new FileOutputStream(file)) {
EasyExcel.write(outputStream, Object[].class) // 使用泛型Object[]代替实体类
.registerWriteSheet(0, "Sheet1") // 第0个sheet为Sheet1,也可以指定名称
.doWrite(dataMap.get("Sheet1")); // 写入Sheet1的数据
EasyExcel.write(outputStream, Object[].class)
.registerWriteSheet(1, "Sheet2")
.doWrite(dataMap.get("Sheet2")); // 写入Sheet2的数据
Workbook workbook = EasyExcel.read(outputStream)
.read() // 读取并关闭,会自动创建和写入到workbook
.sheet(ReadSheet.of(0)) // 读取第一个sheet(注意索引从0开始)
.all().doReadToBean(Object[].class); // 将所有数据读回Object[]数组,如果是复杂数据,这里也需要相应的转换
workbook.close(); // 关闭workbook
}
WriteSheet writeSheet = EasyExcel.writer(workbook)
.registerWriteSheet(0, "Sheet1") // 注册sheet并指定名称
.build();
for (String[] rowData : dataMap.get("Sheet1")) {
WriteRow row = writeSheet.addRow(); // 新建一行
for (int i = 0; i < rowData.length; i++) {
row.createCell(i).setCellValue(rowData[i]); // 设置单元格值
}
}
// 对于Sheet2,做类似的操作
阅读全文