java 使用easy excel写一个方法:function2,参数为:文件路径名。 功能要求: ① 获取该路径下所有 Excel 文件(含子文件夹下),并把 Excel 文件最后修改时间为:一 周之内的 Excel 内容,合并到 mzy-merge.xlsx 文件中。 ② mzy-merge.xlsx 文件中,每个被合并文件内容最前部插入:该文件绝对路径,且背景色 为黄色,字体为红色。 ③ 返回值为:mzy-merge.xlsx 文件的绝对路径字符串
时间: 2024-01-21 14:19:19 浏览: 190
java获取某路径下文件名、大小、修改时间、类型
以下是使用 easyexcel 实现的 function2 方法,实现了上述三个功能要求:
```java
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.metadata.TableStyle;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.WriteTable;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.alibaba.fastjson.JSONObject;
public class ExcelUtil {
/**
* 合并指定路径下最近一周内修改过的 Excel 文件到 mzy-merge.xlsx 文件中,并插入文件路径到表头
* @param path 指定路径
* @return mzy-merge.xlsx 文件的绝对路径
*/
public static String function2(String path) {
List<File> fileList = new ArrayList<>();
File dir = new File(path);
getAllExcelFiles(dir, fileList);
List<ExcelData> dataList = new ArrayList<>();
for (File file : fileList) {
if (isModifiedInLastWeek(file)) {
ExcelData data = new ExcelData();
data.setFilePath(file.getAbsolutePath());
data.setSheetName(file.getName());
data.setDataList(EasyExcel.read(file).head(data.getRowClass()).sheet().doReadSync());
dataList.add(data);
}
}
return mergeExcelFiles(dataList);
}
/**
* 递归获取指定目录下的所有 Excel 文件,包括子目录
* @param dir 指定目录
* @param fileList Excel 文件列表
*/
private static void getAllExcelFiles(File dir, List<File> fileList) {
if (dir.isDirectory()) {
File[] files = dir.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
getAllExcelFiles(file, fileList);
} else if (file.getName().toLowerCase().endsWith(".xlsx") ||
file.getName().toLowerCase().endsWith(".xls")) {
fileList.add(file);
}
}
}
}
}
/**
* 判断文件最后修改时间是否在一周之内
* @param file 文件
* @return 是否在一周之内
*/
private static boolean isModifiedInLastWeek(File file) {
long lastModified = file.lastModified();
long currentTime = System.currentTimeMillis();
return (currentTime - lastModified) < 1000 * 60 * 60 * 24 * 7;
}
/**
* 合并 Excel 文件,并插入文件路径到表头
* @param dataList Excel 数据列表
* @return mzy-merge.xlsx 文件的绝对路径
*/
private static String mergeExcelFiles(List<ExcelData> dataList) {
String mergeFilePath = "mzy-merge.xlsx";
ExcelWriterBuilder writerBuilder = EasyExcel.write(mergeFilePath).excelType(ExcelTypeEnum.XLSX);
for (ExcelData data : dataList) {
WriteSheet writeSheet = EasyExcel.writerSheet(data.getSheetName()).build();
WriteTable writeTable = EasyExcel.writerTable(0).head(data.getRowClass()).build();
writerBuilder.write(data.getDataList(), writeSheet, writeTable);
}
List<List<String>> head = new ArrayList<>();
List<String> row1 = new ArrayList<>();
row1.add("");
row1.add("文件路径");
head.add(row1);
TableStyle tableStyle = new TableStyle();
tableStyle.setTableContentBackGroundColor(IndexedColors.WHITE.getIndex());
HorizontalCellStyleStrategy styleStrategy =
new HorizontalCellStyleStrategy(tableStyle, new WriteCellStyle());
writerBuilder.head(head).registerWriteHandler(styleStrategy).build().finish();
insertFilePathToHeader(mergeFilePath, dataList.size() + 1);
return new File(mergeFilePath).getAbsolutePath();
}
/**
* 在合并后的 Excel 文件中,插入文件路径到表头
* @param filePath 文件路径
* @param insertRowNum 插入行的行号
*/
private static void insertFilePathToHeader(String filePath, int insertRowNum) {
List<List<String>> dataList = EasyExcel.read(filePath).head(List.class).sheet().doReadSync();
List<String> newRow = new ArrayList<>();
newRow.add("");
newRow.add("");
for (int i = 3; i < insertRowNum; i++) {
newRow.add("");
}
newRow.add("文件路径");
for (int i = insertRowNum; i < dataList.size(); i++) {
newRow.add("");
}
dataList.add(0, newRow);
Sheet sheet = new Sheet(1, 0, ExcelData.class);
sheet.setAutoWidth(true);
sheet.setTableStyle(new TableStyle());
sheet.setHead(Collections.singletonList(Collections.singletonList("")));
sheet.setClazz(ExcelData.class);
WriteSheet writeSheet = EasyExcel.writerSheet(0, "Sheet1").build();
EasyExcel.write(filePath).excelType(ExcelTypeEnum.XLSX).write(dataList, writeSheet).finish();
setHeaderStyle(filePath, 0, 0, insertRowNum - 1);
}
/**
* 设置表头样式
* @param filePath 文件路径
* @param rowIndex 起始行号
* @param colIndex 起始列号
* @param rowNum 行数
*/
private static void setHeaderStyle(String filePath, int rowIndex, int colIndex, int rowNum) {
AbstractExcelWriteHandler handler = new AbstractExcelWriteHandler() {
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
CellStyle cellStyle = writeWorkbookHolder.getWorkbook().createCellStyle();
cellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
Font font = writeWorkbookHolder.getWorkbook().createFont();
font.setColor(IndexedColors.RED.getIndex());
cellStyle.setFont(font);
for (int i = rowIndex; i < rowIndex + rowNum; i++) {
Row row = writeSheetHolder.getSheet().getRow(i);
if (row == null) {
row = writeSheetHolder.getSheet().createRow(i);
}
for (int j = colIndex; j < row.getLastCellNum(); j++) {
Cell cell = row.getCell(j);
if (cell == null) {
cell = row.createCell(j);
}
cell.setCellStyle(cellStyle);
}
}
}
};
EasyExcel.write(filePath).excelType(ExcelTypeEnum.XLSX).registerWriteHandler(handler).sheet().doWrite(null);
}
/**
* Excel 数据类,用于 easyexcel 读写
*/
public static class ExcelData extends BaseRowModel {
@ExcelProperty(value = "文件路径", index = 0)
private String filePath;
@ExcelProperty(value = "Sheet名称", index = 1)
private String sheetName;
@ExcelProperty(value = "数据", index = 2)
private List<List<String>> dataList;
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public String getSheetName() {
return sheetName;
}
public void setSheetName(String sheetName) {
this.sheetName = sheetName;
}
public List<List<String>> getDataList() {
return dataList;
}
public void setDataList(List<List<String>> dataList) {
this.dataList = dataList;
}
public Class<? extends BaseRowModel> getRowClass() {
return ExcelData.class;
}
@Override
public String toString() {
return JSONObject.toJSONString(this);
}
}
}
```
使用示例:
```java
public static void main(String[] args) {
String mergeFilePath = ExcelUtil.function2("D:/excel");
System.out.println("合并后的 Excel 文件路径:" + mergeFilePath);
}
```
其中,第一个参数为指定的文件夹路径。
阅读全文