执行计划生成的excel文档再按创建人进行分别电邮原创
23人赞赏了该文章
138次浏览
编辑于2024年06月12日 16:15:43
小小扩展一下,当笔记,有需要的拿走
二开案例.执行计划.引出列表数据并发送邮件 (kingdee.com)
public void ProcessDataAndSendEmail(string filePath) { // 读取Excel文件 var workbook = new XSSFWorkbook(filePath); var sheet = workbook.GetSheetAt(0); // 获取电邮地址列的索引 var headerRow = sheet.GetRow(0); int emailColumnIndex = -1; for (int i = headerRow.FirstCellNum; i < headerRow.LastCellNum; i++) { if (headerRow.GetCell(i).StringCellValue == "note_mail") { emailColumnIndex = i; break; } } if (emailColumnIndex == -1) { throw new Exception("未找到note_mail列"); } // 获取所有的电邮地址 var emails = new HashSet<string>(); for (int i = 1; i <= sheet.LastRowNum; i++) { var row = sheet.GetRow(i); var cell = row.GetCell(emailColumnIndex); emails.Add(cell.StringCellValue); } // 对于每一个电邮地址,筛选数据并发送邮件 foreach (var email in emails) { // 创建一个新的工作簿和工作表 var newWorkbook = new XSSFWorkbook(); var newSheet = newWorkbook.CreateSheet("Sheet1"); // 筛选符合条件的行并添加到新的工作表 int newRowNum = 0; for (int i = 0; i <= sheet.LastRowNum; i++) { var row = sheet.GetRow(i); var cell = row.GetCell(emailColumnIndex); if (cell.StringCellValue == email) { var newRow = newSheet.CreateRow(newRowNum++); for (int j = row.FirstCellNum; j < row.LastCellNum; j++) { // 跳过电邮地址列 if (j == emailColumnIndex) continue; var newCell = newRow.CreateCell(j < emailColumnIndex ? j : j - 1); newCell.SetCellValue(row.GetCell(j).StringCellValue); } } } // 保存新的Excel文件 var newFilePath = "path_to_your_new_file"; using (var fileStream = new FileStream(newFilePath, FileMode.Create, FileAccess.Write)) { newWorkbook.Write(fileStream); } // 发送邮件 var cclist=[]; var mySubject="--"; listExportService.SendMail(newFilePath, email, cclist, mySubject); } }
推荐阅读