项目中可能会有发送邮件时附带excel附件的需求,下面提供一种实现思路:在服务所在的服务器上,生成excel文件;发送邮件时,把excel文件作为附件一起发送,发送完成之后,删除excel文件。
- 集成easyExcel
引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.4</version>
</dependency>
编写工具类
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import java.util.List;
public class ExcelUtil {
/**
* 在指定位置生成excel文件
*
* @param fileName 文件路径
* @param clazz 导出数据类型
* @param list 导出数据
* @param <T> 可以不加这个也行,但是会有警告,看起来不舒服
*/
public static <T> void writeToExcel(String fileName, Class<T> clazz, List<T> list) {
ExcelWriter excelWriter = EasyExcel.write(fileName).build();
WriteSheet sheet = EasyExcel.writerSheet().head(clazz).build();
excelWriter.write(list, sheet);
excelWriter.finish();
}
}
- 生成文件服务实现
import com.example.utils.ExcelUtil;
import java.io.File;
import java.util.List;
public class GeneratorFileService {
/**
* 相对路径,文件会生成在与项目平级的目录
*/
private final String FILE_PATH = "file/excel";
private final String EXCEL_SUFFIX = ".xlsx";
/**
* 生成excel文件
*
* @param fileName
* @param clazz
* @param list
* @param <T>
* @return
*/
public <T> File generatorExcel(String fileName, Class<T> clazz, List<T> list) {
if (generateFilePath()) {
return null;
}
String fileFullName = FILE_PATH + fileName + EXCEL_SUFFIX;
ExcelUtil.writeToExcel(fileFullName, clazz, list);
return new File(fileFullName);
}
/**
* 删除文件
*
* @param file
* @return
*/
public boolean deleteFile(File file) {
if (file != null) {
return file.delete();
}
return true;
}
private boolean generateFilePath() {
File path = new File(FILE_PATH);
if (path.exists()) {
return true;
} else {
return path.mkdirs();
}
}
}
发送邮件时,把生成的excel文件带上即可。
网友评论