您的位置:首页 > 编程语言 > Java开发

JAVA自动生成sql结果到excel,并以附件方式发送到指定邮箱

2011-09-20 16:10 666 查看
本帖最后由
crazyzxl 于 2011-1-4 14:04 编辑

http://www.webgamei.com/club/forum-viewthread-tid-16561-fromuid-53276.html

注:这个demo其实在 csdn 的共享也可以下载到.也是我分享的 所以说是原创 账号都是crazyzxl

这个demo是部门经理让我给技术支持MM写的一个小小工具..

需求我还真忘了..因为都内部自己人用的工具所以也没有落实文档..

是选择不同的选项生成不同地区的excel并发送到指定的邮箱

大家看代码的时候可能觉得很繁琐

其实我也觉得是.因为老大说了不让用数据库,说一个小工具不给弄数据库浪费客户的资源..

当时老无语了...呵呵 分享几段代码然后看附件吧好吧

IDE:Workshop for WebLogic Platform 9.2

database:oracle9i

web server:weblogic9.2

//自己百度下一个就行 下MyEclipse(至少6.0版本) 也行 不过就要自己手动弄代码了 我是没那么导过..不过java代码是一样的
在MyEclipse也能用

[index.jsp 1,2,3,4,5,6,7是为了区分各个表的不同操作跟excel格式,其实可以用数据库也可以用xml,不过数据库经理不让用,xml做java的自己试试就知道了.可以写成一个xml读取判断表类型的类..呵呵..]

switch (index)

{

case 1:

name = "当月人数变化及短信量统计报表";

break;

case 2:

name = "外段号码报表";

break;

case 6:

name = "联通拆机号码";

break;

case 7:

name = "移动确认号码报表";

break;

}

复制代码

[web.xml 这个不用我多说了吧]

<servlet>

<servlet-name>UploadServlet</servlet-name>

<servlet-class>src.execl.UploadServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>UploadServlet</servlet-name>

<url-pattern>/UploadServlet</url-pattern>

</servlet-mapping>

复制代码

[ExeclController.java 根据不同的格式类型选择不同的excel类,并且根据不同的状态位返回到xml 前台ajax
得到xml进行错误判断打印到前台给用户,获取服务器文件]

String File=null,Patch=null,FilePath=null;

getResponse().setContentType("text/xml;charset=UTF-8");

getResponse().setHeader("Cache-Control","no_cache");

String d_s=getRequest().getParameter("d_s")+" 00:00:00";

String d_e=getRequest().getParameter("d_e")+" 23:59:59";

String mail_id=getRequest().getParameter("mail_id");

String mail_ps=getRequest().getParameter("mail_ps");

PrintWriter out=getResponse().getWriter();

String xml="<response>";

String reporti=getRequest().getParameter("rd");

MailTest mt=new MailTest();

//InetAddress addr = InetAddress.getLocalHost();

String IP =getRequest().getRemoteAddr();

//addr.getHostAddress().toString();

switch (Integer.parseInt(reporti))

{

case 1: //当月人数变化及短信量统计报表

if(execl1("c:\\当月人数变化及短信量统计报表.xls",d_s,d_e)==false)

{

xml+="<reportid>1</reportid>";

xml+="<beginflag>0</beginflag>";

}

else

{

if(mt.sendMail(reporti,"1",d_s,d_e,mail_id,mail_ps,"null","null")==false)

{

xml+="<reportid>1</reportid>";

xml+="<beginflag>2</beginflag>";

}

else{

xml+="<reportid>1</reportid>";

xml+="<beginflag>1</beginflag>";

}

}

break;

case 2: //外段号码报表

if(execl2("c:\\外段号码报表-天津.xls",1,d_s,d_e)==false||execl2("c:\\外段号码报表-河北.xls",2,d_s,d_e)==false||execl2("c:\\外段号码报表-杭州.xls",3,d_s,d_e)==false||execl2("c:\\外段号码报表-长春.xls",4,d_s,d_e)==false)

{

xml+="<reportid>2</reportid>";

xml+="<beginflag>0</beginflag>";

}

else

{

if(mt.sendMail(reporti,"1",d_s,d_e,mail_id,mail_ps,"null","null")==false||mt.sendMail(reporti,"2",d_s,d_e,mail_id,mail_ps,"null","null")==false||mt.sendMail(reporti,"3",d_s,d_e,mail_id,mail_ps,"null","null")==false||mt.sendMail(reporti,"4",d_s,d_e,mail_id,mail_ps,"null","null")==false)

{

xml+="<reportid>2</reportid>";

xml+="<beginflag>2</beginflag>";

}

else{

xml+="<reportid>2</reportid>";

xml+="<beginflag>1</beginflag>";

}

}

break;

case 6://联通拆机号码

FilePath=getRequest().getParameter("filename");

FilePath=new String(FilePath.getBytes("iso8859-1"),"GBK");

String strs_a[]=FilePath.split("\\\\");

int i;

for(i=1;i<strs_a.length;i++)

{

File=strs_a[i];

Patch=strs_a[i-1];

}

FilePath="\\\\"+IP+"\\\\"+Patch+"\\\\"+File;

System.out.println("***************************************");

System.out.println(FilePath);

System.out.println("***************************************");

if(readline(FilePath,"6")==false)

{

xml+="<reportid>6</reportid>";

xml+="<beginflag>0</beginflag>";

}

else{

String user_count=""+tjdb.unicom_user_count_temp();

String update_count=""+tjdb.unicom_update_count_temp();

tjdb.unicom_delete_temp();

if(mt.sendMail(reporti,"1",d_s,d_e,mail_id,mail_ps,user_count,update_count)==false)

{

xml+="<reportid>6</reportid>";

xml+="<beginflag>2</beginflag>";

}

else{

xml+="<reportid>6</reportid>";

xml+="<beginflag>1</beginflag>";

}

}

break;

case 7://移动确认号码报表

FilePath=getRequest().getParameter("filename");

FilePath=new String(FilePath.getBytes("iso8859-1"),"GBK");

String strs_b[]=FilePath.split("\\\\");

int a;

for(a=1;a<strs_b.length;a++)

{

File=strs_b[a];

Patch=strs_b[a-1];

}

FilePath="\\\\"+IP+"\\\\"+Patch+"\\\\"+File;

System.out.println("***************************************");

System.out.println(FilePath);

System.out.println("***************************************");

if(readline(FilePath,"7")==false)

{

xml+="<reportid>7</reportid>";

xml+="<beginflag>0</beginflag>";

}

else{

if(mt.sendMail(reporti,"1",d_s,d_e,mail_id,mail_ps,"null","null")==false)

{

xml+="<reportid>7</reportid>";

xml+="<beginflag>2</beginflag>";

}

else{

xml+="<reportid>7</reportid>";

xml+="<beginflag>1</beginflag>";

}

}

break;

}

xml+="</response>";

out.println(xml);

out.close();

return null;

}

/////////////////////////////////////-----------------------------------华丽丽的分割线

//下面内容是一个片段,也是这个文件中的 主要是前面代码调用的 不同的生成的excel 表 根据地区格式做成excel

try{

//创建工作空间

WritableWorkbook wwb = Workbook.createWorkbook(new File(path));

//创建工作表

WritableSheet hm = wwb.createSheet("号码明细",0);

WritableSheet dx = wwb.createSheet("短信明细",1);

WritableSheet zl = wwb.createSheet("总量",2);

//生成表头

/**

* 号码明细

*/

Label labelT0 = new Label(0,0,"学校名称");

hm.addCell(labelT0);

Label labelT1 = new Label(1,0,"联系电话");

hm.addCell(labelT1);

/**

* 短信明细

*/

Label labelT2 = new Label(0,0,"短信内容");

dx.addCell(labelT2);

Label labelT3 = new Label(1,0,"短信时间");

dx.addCell(labelT3);

/**

* 总量

*/

Label labelT4 = new Label(0,0,"学校名称");

zl.addCell(labelT4);

Label labelT5 = new Label(1,0,"号码数量统计");

zl.addCell(labelT5);

/**

* 短信总量

*/

int gbsc=0;

/**

* 外段总量

*/

generate_bean[] gbc=null;

/**

* 号码详细

*/

generate_bean[] gbn=null;

/**

* 短信详细

*/

generate_bean[] gbs=null;

switch (flag)

{

case 1: //天津

gbn=tjdb.tj_outer_segment_num_all(d_s,d_e);

gbs=tjdb.tj_outer_segment_sns_all(d_s,d_e);

gbsc=tjdb.tj_outer_segment_sns_count_all(d_s,d_e);

gbc=tjdb.tj_outer_segment_count(d_s,d_e);

break;

case 2: //河北

gbn=hbdb.hb_outer_segment_num_all(d_s,d_e);

gbs=hbdb.hb_outer_segment_sns_all(d_s,d_e);

gbsc=hbdb.hb_outer_segment_sns_count_all(d_s,d_e);

gbc=hbdb.hb_outer_segment_count(d_s,d_e);

break;

case 3://杭州

gbn=hzdb.hz_outer_segment_num_all(d_s,d_e);

gbs=hzdb.hz_outer_segment_sns_all(d_s,d_e);

gbsc=hzdb.hz_outer_segment_sns_count_all(d_s,d_e);

gbc=hzdb.hz_outer_segment_count(d_s,d_e);

break;

case 4://长春

gbn=ccdb.cc_outer_segment_num_all(d_s,d_e);

gbs=ccdb.cc_outer_segment_sns_all(d_s,d_e);

gbsc=ccdb.cc_outer_segment_sns_count_all(d_s,d_e);

gbc=ccdb.cc_outer_segment_count(d_s,d_e);

break;

}

//生成单元格

int rowzl=0;

int countzl=0;

int hm_temp=0;

int dx_temp=0;

for(int i=0;i<gbn.length;i++)

{

for(int a=0;a<gbn.length-1;a++)

{

if(gbn[a].getSCHL_NAME().length()<gbn[a+1].getSCHL_NAME().length())

{

hm_temp=gbn[a+1].getSCHL_NAME().length();

}

else

{

hm_temp=gbn[a].getSCHL_NAME().length();

}

}

Label label0 = new Label(0,i+1,gbn[i].getSCHL_NAME());

hm.addCell(label0);

Label label1 = new Label(1,i+1,gbn[i].getPANT_MOBILE());

hm.addCell(label1);

}

for(int i=0;i<gbs.length;i++)

{

String time=gbs[i].getSEND_TIME();

time=time.substring(0,11);

/**

* 短信明细

*/

Label label0 = new Label(0,i+1,gbs[i].getMT_CONTENT());

dx.addCell(label0);

Label label1 = new Label(1,i+1,time);

dx.addCell(label1);

for(int a=0;a<gbs.length-1;a++)

{

/**

* 号码明细

*/

/**

* 短信明细

*/

if(gbs[a].getMT_CONTENT().length()<gbs[a+1].getMT_CONTENT().length())

{

dx_temp=gbs[a+1].getMT_CONTENT().length();

}

else

{

dx_temp=gbs[a].getMT_CONTENT().length();

}

}

}

for(int i=0;i<gbc.length;i++)

{

/**

* 总量

*/

Label label0 = new Label(0,i+1,gbc[i].getSCHL_NAME());

zl.addCell(label0);

Label label1 = new Label(1,i+1,""+gbc[i].getCount());

zl.addCell(label1);

rowzl++;

countzl+=gbc[i].getCount();

}

Label label1 = new Label(0,rowzl+2,"外段号码数");

zl.addCell(label1);

Label label2 = new Label(1,rowzl+2,""+countzl);

zl.addCell(label2);

Label label3 = new Label(0,rowzl+3,"短信量总数");

zl.addCell(label3);

Label label4 = new Label(1,rowzl+3,""+gbsc);

zl.addCell(label4);

/**

* 号码明细

*/

if(hm_temp<1)

{

hm_temp=4;

}

hm.setColumnView(0,hm_temp*2+2);

/**

* 短信明细

*/

if(dx_temp<1)

{

dx_temp=4;

}

dx.setColumnView(0,dx_temp*2+2);

/**

* 总量

*/

if(hm_temp<1)

{

hm_temp=4;

}

zl.setColumnView(0,hm_temp*2+2);

wwb.write();

wwb.close();

}catch(IOException e){

e.printStackTrace();

return false;

}catch(WriteException e1){

e1.printStackTrace();

return false;

}

return true;

复制代码

[MailTest.java 指定收件人 抄送附件。。惭愧的是这里使用到了枚举的描述符。后来才知道那样写是非常不对的。大家自己改下吧。。:$]

import java.util.*;

import publicclass.publicvalue;

public class MailTest {

public boolean sendMail(String reporti,String city,String d_s,String d_e,String mail_id,String mail_ps,String index_a,String index_b) throws Exception

{

Mail mail = new Mail();

d_s=d_s.substring(0,11);

d_e=d_e.substring(0,11);

mail.setFrom(mail_id);

List<String> to = new ArrayList<String>();

List<String> cc = new ArrayList<String>();

List<Attachment> attaches = new ArrayList<Attachment>();

Attachment attach1 = new Attachment();

// mail.setContentType(Mail.CONTENT_TYPE_TEXT);

switch (Integer.parseInt(reporti))

{

case 1: //当月人数变化及短信量统计报表

switch (Integer.parseInt(city))

{

case 1: //天津;

mail.setSubject("当月人数变化及短信量统计报表");

mail.setContent("当月人数变化及短信量统计报表"+d_s+"至"+d_e);

to.add(mail_id);

attach1.setName("当月人数变化及短信量统计报表.xls");

attach1.setLocalPath("c:\\当月人数变化及短信量统计报表.xls");

break;

case 2: //河北

break;

case 3://杭州

break;

case 4://长春

break;

}

break;

case 2: //外段号码报表

mail.setSubject("外段号码报表");

switch (Integer.parseInt(city))

{

case 1: //天津;

mail.setContent("天津外段号码报表"+d_s+"至"+d_e);

to.add(mail_id);

/*to.add(publicvalue.外段表天津.getValue());

cc.add(publicvalue.刘.getValue());

cc.add(mail_id);*/

attach1.setName("外段号码报表-天津.xls");

attach1.setLocalPath("c:\\外段号码报表-天津.xls");

break;

case 2: //河北

mail.setContent("河北外段号码报表"+d_s+"至"+d_e);

to.add(mail_id);

/*to.add(publicvalue.外段表石家庄.getValue());

cc.add(publicvalue.刘.getValue());

cc.add(mail_id);*/

attach1.setName("外段号码报表-河北.xls");

attach1.setLocalPath("c:\\外段号码报表-河北.xls");

break;

case 3://杭州

mail.setContent("杭州外段号码报表"+d_s+"至"+d_e);

to.add(mail_id);

/*to.add(publicvalue.外段表杭州.getValue());

cc.add(publicvalue.刘.getValue());

cc.add(mail_id);*/

attach1.setName("外段号码报表-杭州.xls");

attach1.setLocalPath("c:\\外段号码报表-杭州.xls");

break;

case 4://长春

mail.setContent("长春外段号码报表"+d_s+"至"+d_e);

to.add(mail_id);

/*to.add(publicvalue.外段表长春.getValue());

cc.add(publicvalue.刘.getValue());

cc.add(mail_id);*/

attach1.setName("外段号码报表-长春.xls");

attach1.setLocalPath("c:\\外段号码报表-长春.xls");

break;

}

break;

case 6://联通拆机号码

mail.setSubject("报告:联通拆机号码表生成完毕");

switch (Integer.parseInt(city))

{

case 1: //天津;

mail.setContent("本月拆机文件中,有【"+index_a+"】个号码为我公司用户,更新了系统中【"+index_b+"】条数据. ");

to.add(mail_id);

/*to.add(publicvalue.外段表长春.getValue());

cc.add(publicvalue.刘.getValue());

cc.add(mail_id);*/

break;

case 2: //河北

break;

case 3://杭州

break;

case 4://长春

break;

}

break;

case 7://移动确认号码报表

mail.setSubject("移动确认号码报表");

switch (Integer.parseInt(city))

{

case 1: //天津;

mail.setContent("移动确认号码报表操作生成完毕,请检查附件");

to.add(mail_id);

/*to.add(publicvalue.外段表长春.getValue());

cc.add(publicvalue.刘.getValue());

cc.add(mail_id);*/

attach1.setName("移动确认号码报表.xls");

attach1.setLocalPath("c:\\移动确认号码报表.xls");

break;

case 2: //河北

break;

case 3://杭州

break;

case 4://长春

break;

}

break;

}

mail.setTo(to);

mail.setCc(cc);

attaches.add(attach1);

/* List<String> reply = new ArrayList<String>();

reply.add("glwllw@163.com");

reply.add("gonglingwei@163.com");

mail.setReply(reply);*/

Properties pro = new Properties();

pro.setProperty("mail.smtp.host", "mail.infogate-tj.com.cn");

pro.setProperty("mail.smtp.port", "25");

pro.setProperty("mail.smtp.auth", "true");

pro.setProperty("mail.smtp.username",mail_id);

pro.setProperty("mail.smtp.password",mail_ps);

mail.setProperties(pro);

mail.setAttachments(attaches);

System.out.println("正在发送...");

long time1 = new Date().getTime();

boolean sended = MailSender.send(mail);

long time2 = new Date().getTime();

System.out.println((sended ? "发送成功!" : "发送失败!"));

System.out.println("耗时:" + (time2 - time1) + "毫秒");

return true; }

}

//publicvalue.java 这就是我说的应该修改的 不应该用枚举描述符..其实这个方法也是一个同事跟我说地.等后来领导给我说了利弊后

//才恍然大悟.哈哈..人非圣贤孰能无过..大家改成 privat String email; 吧

package publicclass;

public enum publicvalue {

张(43@tj.com.cn]43@tj.com.cn),王("123@tj.com.cn]123@tj.com.cn");

private final String value;

private publicvalue(String value)

{

this.value=value;

}

public String getValue() {

return this.value;

}

}

复制代码

ccjxt.java

generate_bean.java

hbjxt.java

hzjxt.java

tjjxt.java

这几个文件是不能给大家的..没办法 你们自己写吧..因为里面的sql语句是不能透露的毕竟跟database安全有关系

bean不用说就是pojo 上面用红色标注的bean跟tjjxt 里面文件我保留给大家了.不过没有内容只有格式

其他几个就是不同地区的 sql语句.嗯..没了就这样了


发送邮件+excel生成.rar (10.86
MB, 下载次数: 17)

2011-1-4 14:04 上传
下载次数: 17

下载积分: 论坛金币 -1

本主题由
crazyzxl 于 2011-1-4 13:39 加入精华

收藏0 分享1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐