HAP 系统中实现 excel 数据生成并邮件发送

作者:郑德鼎 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:工具, 技术
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图

**HAP系统中实现excel数据生成并**

HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图

**Poi的EXCEL相关类介绍与依赖引入**

**Excel相关导出类介绍** **

**

Poi进行excel导出时,提供了三个基本功能的类:HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook,三个类都提供了excel文件相关导出,但是对于导出的excel版本兼容性及数据量存在区别对比如下:

● HSSFWorkbook

导出数据格式:xls

缺点:最多只能处理65536数据行,否则会抛出异常

java.lang.IllegalArgumentException: Invalid row number (65536) outside

allowable range (0..65535)

优点:过程中写入缓存 不操作磁盘,最后一次性写入磁盘,速度快

● XSSFWorkbook

导出数据格式:xlsx

缺点:写数据时速度非常慢,非常耗内存,也会发生内存溢出

优点:可以写较大数据量,一般处理100万以下

● SXSSFWorkbook

导出数据格式:xlsx

优点:处理大数据量的写入,内存占用少

**Maven依赖引入**

HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图

**将头行表中的数据按照excel模板生成对应xlsx文件**

**HAP标准功能附件管理中配置相关文件保存路径**

路径:附件管理-目录管理

HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图

**设置对应excel模板并保存到配置的附件路径下**

HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图

**查询数据并将数据输出到excel模板中生成excel文件**

@Autowired

private IAttachCategoryService categoryService; //自动注入HAP附件的service类

@Autowired

private IHeaderService headerService; //自动注入header的service类

AttachCategory category = categoryService.selectAttachByCode(requestCtx, "TEST

"); //获取对应附件信息

String fileDirPath = category.getCategoryPath(); //获取对应附件存储路径

XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(new

File(fileDirPath + File.separator + "test.xlsx")));

//加载对应excel模板

XSSFSheet sheet = workbook.getSheetAt(workbook.getSheetIndex("测试模板"));

//获取对应模板的sheet页

Header header = headerService.getOneHeader(“TEST01”); //查询对应输出数据

//设置模板头相关信息

XSSFRow row;

XSSFCell cell;

row = sheet.getRow(1);

cell = row.getCell(5);

cell.setCellValue(header.getOrderNumber());

row = sheet.getRow(1);

cell = row.getCell(8);

cell.setCellValue(header.getOrderType());

//循环复制指定行数量的行

Listlines = header.getLine();

//获取合并单元格区域

int lastRowNo = sheet.getLastRowNum();

sheet.shiftRows(3, lastRowNo, step, true, false);

//创建空行

XSSFRow row;

int lineRowNum = 3;

for (int i = 0; i < lines.size(); i++) {

row = sheet.createRow(lineRowNum + i);

CellCopyPolicy cellCopyPolicy = new CellCopyPolicy();

cellCopyPolicy.setCopyCellStyle(true);

cellCopyPolicy.setCopyCellValue(false);

row.copyRowFrom(sheet.getRow(lineRowNum + lines.size()), cellCopyPolicy);

}

//设置行相关信息

for (Line line : lines) {

row = sheet.getRow(lineRowNum++);

row.getCell(5).setCellValue(line.getLineType());

row.getCell(6).setCellValue(line.getItem());

row.getCell(7).setCellValue(line.getDescription());

row.getCell(8).setCellValue(line.getQuantity());

row.getCell(9).setCellValue(line.getPrice());

}

//将生成的excel保存到对应的附件路径下

String targetFilePath = fileDirPath + File.separator +“文件名” + ".xlsx";

File targetFile = new File(targetFilePath);

FileOutputStream targetFileOutputStream = new FileOutputStream(targetFile);

workbook.write(targetFileOutputStream);

workbook.close();

targetFileOutputStream.flush();

targetFileOutputStream.close();

//保存附件相关信息到HAP附件相关的表中

HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图

**将生成excel作为附件进行发送**

** HAP标准功能中配置邮件模板 **

路径:系统管理-邮件-邮件模板

HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图

**邮件发送**

@Autowired

private IMessageService messageService;

//定义模板中对应的变量

Mapmap = new HashMap<>(2);

map.put("SupplierName", header.getSupplierName());

map.put("AccountCheckNumber", header.getAccountCheckNumber());

//定义收件人相关信息

ListmessageReceiverList = new ArrayList<>();

MessageReceiver mr = new MessageReceiver();

mr.setMessageAddress("1@qq.com");

//对应收件人邮箱

mr.setMessageType(ReceiverTypeEnum.NORMAL.getCode());

messageReceiverList.add(mr);

//将附件sysFile对象的文件的id转化为list

ListsysFileIdList = Collections.singletonList(sysFile.getFileId());

//调用邮件发送api

messageService.sendMessage(requestCtx, "TEST", map, messageReceiverList,

sysFileIdList);

HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图
HAP 系统中实现 excel 数据生成并邮件发送 - 封面图

作者:段志超

审核:邓金边

编辑:朱思聪

郑德鼎

关于作者:郑德鼎

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「HAP系统中实现excel数据生成并邮件发送.md」整理生成,仅用于内部技术分享与学习交流。