java实现easyexcel填充数据并合并相同属性的工具类
时间: 2023-08-28 20:06:15 浏览: 254
以下是一个简单的Java工具类,可以使用EasyExcel库将数据填充到Excel中,并合并具有相同属性的行。
```java
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
import com.alibaba.excel.write.merge.LoopMergeStrategy;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.WriteWorkbook;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* EasyExcel填充数据并合并相同属性的工具类
*/
public class EasyExcelUtil {
/**
* 填充数据并合并相同属性的行
*
* @param filePath 文件路径
* @param sheetName 工作表名称
* @param header 头部
* @param data 数据
* @param mergeIndex 需要合并的列的索引
*/
public static void fillAndMerge(String filePath, String sheetName, List<String> header, List<List<String>> data, int mergeIndex) {
// 创建一个Excel写工具
ExcelWriter writer = EasyExcel.write(filePath).build();
// 创建一个工作表
WriteSheet sheet = EasyExcel.writerSheet(sheetName).build();
// 将数据按照相同的属性分组
Map<String, List<List<String>>> groupMap = groupByProperty(data, mergeIndex);
// 遍历分组后的数据,将每个分组写入Excel中
groupMap.forEach((property, groupData) -> {
// 写入头部
writer.writeHeader(header, sheet);
// 写入数据
writer.write(groupData, sheet);
// 合并相同属性的行
AbstractMergeStrategy mergeStrategy = new LoopMergeStrategy(property, mergeIndex);
mergeStrategy.merge(sheet, writer);
});
// 关闭Excel写工具
writer.finish();
}
/**
* 将数据按照指定的属性分组
*
* @param data 数据
* @param mergeIndex 需要合并的列的索引
* @return 分组后的数据,Map的键为属性值,值为数据列表
*/
private static Map<String, List<List<String>>> groupByProperty(List<List<String>> data, int mergeIndex) {
return data.stream().collect(Collectors.groupingBy(row -> row.get(mergeIndex)));
}
}
```
使用示例:
```java
public class Main {
public static void main(String[] args) {
// 准备数据
List<String> header = new ArrayList<>();
header.add("姓名");
header.add("年龄");
header.add("性别");
List<List<String>> data = new ArrayList<>();
data.add(Arrays.asList("张三", "20", "男"));
data.add(Arrays.asList("李四", "22", "男"));
data.add(Arrays.asList("王五", "20", "女"));
data.add(Arrays.asList("赵六", "22", "女"));
// 填充数据并合并相同属性的行
EasyExcelUtil.fillAndMerge("test.xlsx", "Sheet1", header, data, 2);
}
}
```
在这个示例中,我们将数据按照性别分组,并将具有相同性别的行合并在一起。因此,输出的Excel文件将具有两行,每行具有两个单元格,显示相同性别的人的姓名和年龄。
阅读全文