java 使用easy excel写一个方法:function2,参数为:文件路径名。 功能要求: ① 获取该路径下所有 Excel 文件(含子文件夹下),并把 Excel 文件最后修改时间为:一 周之内的 Excel 内容,合并到 mzy-merge.xlsx 文件中。 ② mzy-merge.xlsx 文件中,每个被合并文件内容最前部插入:该文件绝对路径,且背景色 为黄色,字体为红色。 ③ 返回值为:mzy-merge.xlsx 文件的绝对路径字符串
时间: 2024-01-21 10:17:27 浏览: 156
以下是一个使用 EasyExcel 实现上述功能的方法:
```java
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.WriteWorkbook;
public class ExcelUtil {
public static String function2(String path) throws IOException {
// 获取一周之内的时间戳
long oneWeekAgo = System.currentTimeMillis() - 7 * 24 * 60 * 60 * 1000;
// 获取该路径下所有 Excel 文件(含子文件夹下)
List<File> fileList = getAllExcelFiles(new File(path));
List<MyRow> rows = new ArrayList<>();
// 遍历 Excel 文件,将最后修改时间为一周之内的内容合并到 mzy-merge.xlsx 中
for (File file : fileList) {
if (file.lastModified() >= oneWeekAgo) {
// 读取 Excel 文件中的内容
List<List<Object>> data = EasyExcel.read(file).sheet().doReadSync();
// 在内容最前部插入文件路径,并设置背景色和字体颜色
List<Object> firstRow = new ArrayList<>();
firstRow.add(file.getAbsolutePath());
MyStyle myStyle = new MyStyle();
myStyle.setBackgroundColor(MyColor.YELLOW);
myStyle.setFontColor(MyColor.RED);
firstRow.add(myStyle);
data.add(0, firstRow);
// 将该 Excel 文件的内容添加到 rows 列表中
for (List<Object> row : data) {
rows.add(new MyRow(row));
}
}
}
// 将 rows 中的内容写入 mzy-merge.xlsx 文件中
String mergeFile = "mzy-merge.xlsx";
ExcelWriter excelWriter = EasyExcel.write(mergeFile).build();
WriteWorkbook writeWorkbook = excelWriter.writeWorkbook();
WriteSheet writeSheet = EasyExcel.writerSheet(0).build();
excelWriter.write(rows, writeSheet);
// 关闭 ExcelWriter
excelWriter.finish();
// 返回 mzy-merge.xlsx 文件的绝对路径字符串
return new File(mergeFile).getAbsolutePath();
}
/**
* 递归获取指定目录下所有 Excel 文件
*/
private static List<File> getAllExcelFiles(File directory) {
List<File> fileList = new ArrayList<>();
if (directory.isFile() && directory.getName().endsWith(".xlsx")) {
fileList.add(directory);
} else if (directory.isDirectory()) {
File[] subFiles = directory.listFiles();
for (File file : subFiles) {
fileList.addAll(getAllExcelFiles(file));
}
}
return fileList;
}
/**
* 自定义样式类
*/
private static class MyStyle {
private MyColor backgroundColor;
private MyColor fontColor;
public MyColor getBackgroundColor() {
return backgroundColor;
}
public void setBackgroundColor(MyColor backgroundColor) {
this.backgroundColor = backgroundColor;
}
public MyColor getFontColor() {
return fontColor;
}
public void setFontColor(MyColor fontColor) {
this.fontColor = fontColor;
}
}
/**
* 自定义颜色类
*/
private static class MyColor {
public static final String YELLOW = "#FFFF00";
public static final String RED = "#FF0000";
}
/**
* 自定义行类,用于写入 Excel 文件
*/
private static class MyRow {
private List<Object> cells = new ArrayList<>();
public MyRow(List<Object> row) {
this.cells.addAll(row);
}
public List<Object> getCells() {
return cells;
}
}
}
```
使用方法:
```java
public static void main(String[] args) throws IOException {
String path = "指定目录的路径";
String mergeFile = ExcelUtil.function2(path);
System.out.println("合并后的 Excel 文件路径为:" + mergeFile);
}
```
注意:
1. 上述代码使用 EasyExcel 库进行 Excel 文件的读写操作,需要在 pom.xml 中添加以下依赖:
```xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.10</version>
</dependency>
```
2. 上述代码中定义了 MyStyle 和 MyColor 两个内部类,用于自定义 Excel 单元格的样式。在实际使用时,可以根据需求修改这两个类的代码。
阅读全文