场景: 通常我们可过计划任务把电子表格导出图片以邮件的正文,并且以excel为附件发送
实现思路:通过计划中的【定展】写JAVA代码实现。
效果如下:
操作步骤:
1、在【定制】-》【展现定制】中创建电子表格报表。
2、在【定制】-》【计划任务】-》【任务】创建任务,【任务类型】选择:“定制”
JAVA代码如下:
自定义任务
importPackage(Packages.smartbi.sdk.service.spreadsheetreport); importPackage(Packages.smartbi.scheduletask.task); importPackage(Packages.smartbi.sdk.service.systemconfig); importPackage(Packages.java.lang); importPackage(Packages.java.util); importPackage(Packages.java.text); importPackage(Packages.java.io); importPackage(Packages.org.apache.commons.lang); importPackage(Packages.org.apache.commons.mail); importPackage(Packages.javax.mail.internet); importPackage(Packages.smartbi.scheduletask.component); var report = null; var reportID = 'I4028818a0162847d847d04570162a8598ee91515'; //报表资源ID //var reportParamSetting = []; //如果报表需设置参数,需在reportParamSetting中添加 var reportParamSetting = [ //{id:"OutputParameter.I0b015ec701596d4d6d4df0f801598dcbf9902a8f.Email",value:"306584671@qq.COM",displayValue:"306584671@qq.COM"} ]; //定义email对象,初始化参数 var multiPartEmail = new SmartbiMultiPartEmail(); var systemConfigService = new SystemConfigService(connector); var configList = systemConfigService.getSystemConfigs(); var mailServer = null; var fromAddress = null; var userName = null; var password = null; var emailSSLEnabled = null; var emailTLSEnabled = null; var port = ""; for (var i = 0; i < configList.size(); i++) { var config = configList.get(i); if (config!=null) { if (config.getKey().equals("EMAIL_SMTP_SERVER")) { mailServer = config.getValue(); } else if (config.getKey().equals("EMAIL_USER_NAME")) { userName = config.getValue(); } else if (config.getKey().equals("EMAIL_USER_ADDRESS")) { fromAddress = config.getValue(); } else if (config.getKey().equals("EMAIL_USER_PASSWORD")) { password= config.getValue(); } else if (config.getKey().equals("EMAIL_SSL_ENABLED")) { if (config.getValue().equals("true")) { emailSSLEnabled = true; } } else if (config.getKey().equals("EMAIL_TLS_ENABLED")) { if (config.getValue().equals("true")) { emailTLSEnabled = true; } }else if (config.getKey().equals("EMAIL_SMTP_PORT")) { //端口 port = config.getValue().trim(); } } } System.out.println(mailServer); System.out.println(fromAddress); System.out.println(password); multiPartEmail.setHostName(mailServer); multiPartEmail.setAuthentication(userName, password); multiPartEmail.setFrom(fromAddress); if(emailSSLEnabled){ multiPartEmail.setSSL(true); if(port != ""){ multiPartEmail.setSslSmtpPort(port); } } if(emailTLSEnabled){ multiPartEmail.setTLS(true); } if(port != "" && !emailSSLEnabled){ multiPartEmail.setSmtpPort(port); } //multiPartEmail.addTo("liangzhiheng@smartbi.com.cn");//接收邮箱地址 multiPartEmail.addTo("zhouyan@smartbi.com.cn"); //多个收件人就加多次 multiPartEmail.setCharset("GBK");//邮件内容字符集 multiPartEmail.setSubject("测试邮件PNG-Excel");//邮件标题 report = new SSReport(connector); report.open(reportID); //报表默认参数设置 //report.setParamValue(String id, String value, String displayValue);//设置报表的参数默认值 //report.setParamValue("OutputParameter.I0b015ec701596d4d6d4df0f801598dcbf9902a8f.Email","306584671@qq.COM","306584671@qq.COM"); //生成html的效果比PNG的要好很多 //--------生成 html begin----------- //var os = new ByteArrayOutputStream(); //report.doExport("HTML","","",os,"","",""); //var html = os.toString("utf8"); //---------html end ---------- //------生成PNG图片 begin------------------ var pngFile = File.createTempFile("emailtask",".png"); var os = new FileOutputStream(pngFile); report.doExport("PNG","","",os,"","",""); os.flush(); os.close(); report.close(); var fileLen = pngFile.length(); var cid = multiPartEmail.embed(pngFile); var sb = new StringBuffer(); sb.append("<html><body><img src=\"cid:"+cid+"\"><br/><br/></body></html>"); sb.append("\n"); var html = sb.toString(); //--------------------------- png end -------------------- report.close(); //添加正文 multiPartEmail.setHtmlMsg(html); //添加邮件附件 var openReportOutput = execute('openResource', { connector: connector, reportId: reportID }); var enumerateParamValuesOutput = execute('enumerateParamValues', { resourceHandle: openReportOutput.resourceHandle, byEveryParam: false, paramsSetting: reportParamSetting }); var exportReportOutput = execute('exportResource', { connector: connector, resourceHandle: openReportOutput.resourceHandle, paramSettingIterator: enumerateParamValuesOutput.getParamValues(), exportSetting: {"delimiter":"","pathId":"","fileNameSufParams":true}, taskName: taskName, exportType: "EXCEL2007" }); openReportOutput.resourceHandle.close(); var outputFile = exportReportOutput.file; var attachment = new EmailAttachment(); attachment.setPath(outputFile.getPath()); attachment.setName(MimeUtility.encodeText(outputFile.getName())); multiPartEmail.attach(attachment); //发送邮件 multiPartEmail.send();