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

本帖最后由 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读取判断表类型的类..呵呵..]

  1.   switch (index)                       
  2.   { 
  3.      case 1: 
  4.      name = "当月人数变化及短信量统计报表";
  5.      break;
  6.      case 2:
  7.      name = "外段号码报表";
  8.      break;
  9.      case 6:
  10.      name = "联通拆机号码";
  11.      break;
  12.      case 7:
  13.      name = "移动确认号码报表";
  14.      break;          
  15.   }
复制代码

[web.xml 这个不用我多说了吧]
  1.    <servlet>
  2.     <servlet-name>UploadServlet</servlet-name>
  3.     <servlet-class>src.execl.UploadServlet</servlet-class>
  4.     </servlet>
  5.     <servlet-mapping>
  6.     <servlet-name>UploadServlet</servlet-name>
  7.     <url-pattern>/UploadServlet</url-pattern>
  8.     </servlet-mapping>
复制代码

[ExeclController.java 根据不同的格式类型选择不同的excel类,并且根据不同的状态位返回到xml 前台ajax 得到xml进行错误判断打印到前台给用户,获取服务器文件]
  1.     String File=null,Patch=null,FilePath=null;
  2.         getResponse().setContentType("text/xml;charset=UTF-8");
  3.         getResponse().setHeader("Cache-Control","no_cache");
  4.         String d_s=getRequest().getParameter("d_s")+" 00:00:00";
  5.         String d_e=getRequest().getParameter("d_e")+" 23:59:59";
  6.         String mail_id=getRequest().getParameter("mail_id");
  7.         String mail_ps=getRequest().getParameter("mail_ps");
  8.         PrintWriter out=getResponse().getWriter(); 
  9.         String xml="<response>";
  10.         String reporti=getRequest().getParameter("rd");
  11.         MailTest mt=new MailTest();
  12.         //InetAddress addr = InetAddress.getLocalHost();
  13.         String IP =getRequest().getRemoteAddr();   
  14.             //addr.getHostAddress().toString();
  15.         switch (Integer.parseInt(reporti))
  16.         {
  17.         case 1: //当月人数变化及短信量统计报表
  18.             if(execl1("c:\\当月人数变化及短信量统计报表.xls",d_s,d_e)==false)
  19.             {
  20.                     xml+="<reportid>1</reportid>";
  21.                     xml+="<beginflag>0</beginflag>";
  22.             }
  23.             else
  24.             {
  25.                 if(mt.sendMail(reporti,"1",d_s,d_e,mail_id,mail_ps,"null","null")==false)
  26.                 {
  27.                     xml+="<reportid>1</reportid>";
  28.                     xml+="<beginflag>2</beginflag>";
  29.                 }
  30.                 else{
  31.                 xml+="<reportid>1</reportid>";
  32.                 xml+="<beginflag>1</beginflag>";
  33.                 }
  34.             }
  35.         break;
  36.         case 2: //外段号码报表
  37.             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)
  38.             {
  39.                 xml+="<reportid>2</reportid>";
  40.                 xml+="<beginflag>0</beginflag>";
  41.             }
  42.             else
  43.             {
  44.                 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)
  45.                 {
  46.                     xml+="<reportid>2</reportid>";
  47.                     xml+="<beginflag>2</beginflag>";
  48.                 }
  49.                 else{
  50.                 xml+="<reportid>2</reportid>";
  51.                 xml+="<beginflag>1</beginflag>";
  52.                 }
  53.             }
  54.             break;
  55.         case 6://联通拆机号码
  56.             FilePath=getRequest().getParameter("filename");
  57.             FilePath=new String(FilePath.getBytes("iso8859-1"),"GBK");
  58.             String strs_a[]=FilePath.split("[url=]\\\\[/url]");
  59.             int i;
  60.             for(i=1;i<strs_a.length;i++)
  61.             {
  62.                 File=strs_a[i];
  63.                 Patch=strs_a[i-1]; 
  64.             }
  65.             FilePath="[url=]\\\\"+IP+"\\\\"+Patch+"\\\\"+File[/url];
  66.             System.out.println("***************************************");
  67.             System.out.println(FilePath);
  68.             System.out.println("***************************************");
  69.             if(readline(FilePath,"6")==false)
  70.             {
  71.                 xml+="<reportid>6</reportid>";
  72.                 xml+="<beginflag>0</beginflag>";
  73.             }
  74.             else{
  75.                 String user_count=""+tjdb.unicom_user_count_temp();
  76.                 String update_count=""+tjdb.unicom_update_count_temp();
  77.                 tjdb.unicom_delete_temp();
  78.                 if(mt.sendMail(reporti,"1",d_s,d_e,mail_id,mail_ps,user_count,update_count)==false)
  79.                 {
  80.                     xml+="<reportid>6</reportid>";
  81.                     xml+="<beginflag>2</beginflag>";
  82.                 }
  83.                 else{
  84.                 xml+="<reportid>6</reportid>";
  85.                 xml+="<beginflag>1</beginflag>";
  86.                 }
  87.             }
  88.             break;
  89.         case 7://移动确认号码报表
  90.             FilePath=getRequest().getParameter("filename");
  91.             FilePath=new String(FilePath.getBytes("iso8859-1"),"GBK");
  92.             String strs_b[]=FilePath.split("[url=]\\\\[/url]");
  93.             int a;
  94.             for(a=1;a<strs_b.length;a++)
  95.             {
  96.                 File=strs_b[a];
  97.                 Patch=strs_b[a-1]; 
  98.             }
  99.             FilePath="[url=]\\\\"+IP+"\\\\"+Patch+"\\\\"+File[/url];
  100.             System.out.println("***************************************");
  101.             System.out.println(FilePath);
  102.             System.out.println("***************************************");
  103.             if(readline(FilePath,"7")==false)
  104.             {
  105.                 xml+="<reportid>7</reportid>";
  106.                 xml+="<beginflag>0</beginflag>";
  107.             }
  108.             else{
  109.                 if(mt.sendMail(reporti,"1",d_s,d_e,mail_id,mail_ps,"null","null")==false)
  110.                 {
  111.                     xml+="<reportid>7</reportid>";
  112.                     xml+="<beginflag>2</beginflag>";
  113.                 }
  114.                 else{
  115.                 xml+="<reportid>7</reportid>";
  116.                 xml+="<beginflag>1</beginflag>";
  117.                 }
  118.             }
  119.             break;
  120.         }
  121.             xml+="</response>";
  122.             out.println(xml);
  123.             out.close();
  124.             return null;
  125.         }
  126. /////////////////////////////////////-----------------------------------华丽丽的分割线
  127. //下面内容是一个片段,也是这个文件中的 主要是前面代码调用的 不同的生成的excel 表 根据地区格式做成excel
  128.             try{
  129.                 //创建工作空间
  130.                 WritableWorkbook wwb = Workbook.createWorkbook(new File(path));
  131.                 //创建工作表
  132.                 WritableSheet hm = wwb.createSheet("号码明细",0);
  133.                 WritableSheet dx = wwb.createSheet("短信明细",1);
  134.                 WritableSheet zl = wwb.createSheet("总量",2);
  135.                 //生成表头
  136.                     /**
  137.                      * 号码明细
  138.                     */
  139.                     Label labelT0 = new Label(0,0,"学校名称");
  140.                     hm.addCell(labelT0);
  141.                     Label labelT1 = new Label(1,0,"联系电话");
  142.                     hm.addCell(labelT1);
  143.                     /**
  144.                      * 短信明细
  145.                     */
  146.                     Label labelT2 = new Label(0,0,"短信内容");
  147.                     dx.addCell(labelT2);
  148.                     Label labelT3 = new Label(1,0,"短信时间");
  149.                     dx.addCell(labelT3);
  150.                     /**
  151.                      * 总量
  152.                     */
  153.                     Label labelT4 = new Label(0,0,"学校名称");
  154.                     zl.addCell(labelT4);
  155.                     Label labelT5 = new Label(1,0,"号码数量统计");
  156.                     zl.addCell(labelT5);
  157.                     /**
  158.                      * 短信总量
  159.                      */
  160.                     int gbsc=0;
  161.                     /**
  162.                      * 外段总量
  163.                      */
  164.                     generate_bean[] gbc=null;
  165.                     /**
  166.                      * 号码详细
  167.                      */
  168.                     generate_bean[] gbn=null;
  169.                     /**
  170.                      * 短信详细
  171.                      */
  172.                     generate_bean[] gbs=null;
  173.                     switch (flag)
  174.                     {
  175.                     case 1: //天津
  176.                          gbn=tjdb.tj_outer_segment_num_all(d_s,d_e);
  177.                          gbs=tjdb.tj_outer_segment_sns_all(d_s,d_e);
  178.                          gbsc=tjdb.tj_outer_segment_sns_count_all(d_s,d_e);
  179.                          gbc=tjdb.tj_outer_segment_count(d_s,d_e);
  180.                         break;
  181.                     case 2: //河北
  182.                          gbn=hbdb.hb_outer_segment_num_all(d_s,d_e);
  183.                          gbs=hbdb.hb_outer_segment_sns_all(d_s,d_e);
  184.                          gbsc=hbdb.hb_outer_segment_sns_count_all(d_s,d_e);
  185.                          gbc=hbdb.hb_outer_segment_count(d_s,d_e);
  186.                          break;
  187.                     case 3://杭州
  188.                          gbn=hzdb.hz_outer_segment_num_all(d_s,d_e);
  189.                          gbs=hzdb.hz_outer_segment_sns_all(d_s,d_e);
  190.                          gbsc=hzdb.hz_outer_segment_sns_count_all(d_s,d_e);
  191.                          gbc=hzdb.hz_outer_segment_count(d_s,d_e);
  192.                          break;
  193.                     case 4://长春
  194.                          gbn=ccdb.cc_outer_segment_num_all(d_s,d_e);
  195.                          gbs=ccdb.cc_outer_segment_sns_all(d_s,d_e);
  196.                          gbsc=ccdb.cc_outer_segment_sns_count_all(d_s,d_e);
  197.                          gbc=ccdb.cc_outer_segment_count(d_s,d_e);
  198.                         break;
  199.                     }
  200.                   
  201.                     //生成单元格
  202.                     int rowzl=0;
  203.                     int countzl=0;
  204.                     int hm_temp=0;   
  205.                     int dx_temp=0;
  206.                     for(int i=0;i<gbn.length;i++)
  207.                     {
  208.                        
  209.                         for(int a=0;a<gbn.length-1;a++)
  210.                         {
  211.                                 if(gbn[a].getSCHL_NAME().length()<gbn[a+1].getSCHL_NAME().length())
  212.                                 {
  213.                                     hm_temp=gbn[a+1].getSCHL_NAME().length();
  214.                                 }
  215.                                 else
  216.                                 {
  217.                                     hm_temp=gbn[a].getSCHL_NAME().length();
  218.                                 }
  219.                         }
  220.                             Label label0 = new Label(0,i+1,gbn[i].getSCHL_NAME());
  221.                             hm.addCell(label0);
  222.                             Label label1 = new Label(1,i+1,gbn[i].getPANT_MOBILE());
  223.                             hm.addCell(label1);
  224.                     }
  225.                     for(int i=0;i<gbs.length;i++)
  226.                     {
  227.                         String time=gbs[i].getSEND_TIME();
  228.                         time=time.substring(0,11);
  229.                         /**
  230.                          * 短信明细
  231.                         */
  232.                         Label label0 = new Label(0,i+1,gbs[i].getMT_CONTENT());
  233.                         dx.addCell(label0);
  234.                         Label label1 = new Label(1,i+1,time);
  235.                         dx.addCell(label1);
  236.                         for(int a=0;a<gbs.length-1;a++)
  237.                         {
  238.                             /**
  239.                              * 号码明细
  240.                             */
  241.                               /**
  242.                              * 短信明细
  243.                             */
  244.                             if(gbs[a].getMT_CONTENT().length()<gbs[a+1].getMT_CONTENT().length())
  245.                             {
  246.                                 dx_temp=gbs[a+1].getMT_CONTENT().length();
  247.                             }
  248.                             else
  249.                             {
  250.                                 dx_temp=gbs[a].getMT_CONTENT().length();
  251.                             }
  252.                         }
  253.                     }
  254.                     for(int i=0;i<gbc.length;i++)
  255.                     {
  256.                         /**
  257.                          * 总量
  258.                         */
  259.                         Label label0 = new Label(0,i+1,gbc[i].getSCHL_NAME());
  260.                         zl.addCell(label0);
  261.                         Label label1 = new Label(1,i+1,""+gbc[i].getCount());
  262.                         zl.addCell(label1);
  263.                         rowzl++;
  264.                         countzl+=gbc[i].getCount();
  265.                     }
  266.                     Label label1 = new Label(0,rowzl+2,"外段号码数");
  267.                     zl.addCell(label1);
  268.                     Label label2 = new Label(1,rowzl+2,""+countzl);
  269.                     zl.addCell(label2);
  270.                     Label label3 = new Label(0,rowzl+3,"短信量总数");
  271.                     zl.addCell(label3);
  272.                     Label label4 = new Label(1,rowzl+3,""+gbsc);
  273.                     zl.addCell(label4);
  274.                     /**
  275.                      * 号码明细
  276.                     */
  277.                     if(hm_temp<1)
  278.                     {
  279.                         hm_temp=4;
  280.                     }
  281.                     hm.setColumnView(0,hm_temp*2+2);
  282.                     /**
  283.                      * 短信明细
  284.                     */
  285.                     if(dx_temp<1)
  286.                     {
  287.                         dx_temp=4;
  288.                     }
  289.                     dx.setColumnView(0,dx_temp*2+2);
  290.                     /**
  291.                      * 总量
  292.                     */
  293.                     if(hm_temp<1)
  294.                     {
  295.                         hm_temp=4;
  296.                     }
  297.                     zl.setColumnView(0,hm_temp*2+2);
  298.                 wwb.write();
  299.                 wwb.close();
  300.             }catch(IOException e){
  301.                 e.printStackTrace();
  302.                 return false;
  303.             }catch(WriteException e1){
  304.                 e1.printStackTrace();
  305.                 return false;
  306.             }
  307.             return true;
复制代码

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

  3. public class MailTest {
  4.   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
  5.      {
  6.   
  7.    Mail mail = new Mail();
  8.    d_s=d_s.substring(0,11);
  9.    d_e=d_e.substring(0,11);
  10.    mail.setFrom(mail_id);
  11.    List<String> to = new ArrayList<String>();
  12.    List<String> cc = new ArrayList<String>();
  13.    List<Attachment> attaches = new ArrayList<Attachment>();
  14.    
  15.    Attachment attach1 = new Attachment();
  16.    // mail.setContentType(Mail.CONTENT_TYPE_TEXT);
  17.     switch (Integer.parseInt(reporti))
  18.     {
  19.     case 1: //当月人数变化及短信量统计报表
  20.         switch (Integer.parseInt(city))
  21.        {
  22.        case 1: //天津;
  23.         mail.setSubject("当月人数变化及短信量统计报表");
  24.         mail.setContent("当月人数变化及短信量统计报表"+d_s+"至"+d_e);
  25.       to.add(mail_id);
  26.       attach1.setName("当月人数变化及短信量统计报表.xls");
  27.       attach1.setLocalPath("c:\\当月人数变化及短信量统计报表.xls");
  28.            break;
  29.        case 2: //河北
  30.          break;
  31.        case 3://杭州
  32.         break;
  33.        case 4://长春
  34.         break;
  35.        }
  36.     break;
  37.     case 2: //外段号码报表
  38.      mail.setSubject("外段号码报表");
  39.     
  40.       switch (Integer.parseInt(city))
  41.         {
  42.       
  43.         case 1: //天津;
  44.          mail.setContent("天津外段号码报表"+d_s+"至"+d_e);
  45.          to.add(mail_id);
  46.        /*to.add(publicvalue.外段表天津.getValue()); 
  47.        cc.add(publicvalue.刘.getValue());
  48.        cc.add(mail_id);*/
  49.        attach1.setName("外段号码报表-天津.xls");
  50.        attach1.setLocalPath("c:\\外段号码报表-天津.xls");
  51.             break;
  52.         case 2: //河北
  53.          mail.setContent("河北外段号码报表"+d_s+"至"+d_e);
  54.          to.add(mail_id);
  55.          /*to.add(publicvalue.外段表石家庄.getValue());
  56.        cc.add(publicvalue.刘.getValue());
  57.        cc.add(mail_id);*/
  58.        attach1.setName("外段号码报表-河北.xls");
  59.        attach1.setLocalPath("c:\\外段号码报表-河北.xls");
  60.           break;
  61.         case 3://杭州
  62.          mail.setContent("杭州外段号码报表"+d_s+"至"+d_e);
  63.          to.add(mail_id);
  64.        /*to.add(publicvalue.外段表杭州.getValue());
  65.        cc.add(publicvalue.刘.getValue());
  66.        cc.add(mail_id);*/
  67.        attach1.setName("外段号码报表-杭州.xls");
  68.        attach1.setLocalPath("c:\\外段号码报表-杭州.xls");
  69.          break;
  70.         case 4://长春
  71.          mail.setContent("长春外段号码报表"+d_s+"至"+d_e);
  72.          to.add(mail_id);
  73.        /*to.add(publicvalue.外段表长春.getValue());
  74.        cc.add(publicvalue.刘.getValue()); 
  75.        cc.add(mail_id);*/
  76.        attach1.setName("外段号码报表-长春.xls");
  77.        attach1.setLocalPath("c:\\外段号码报表-长春.xls");
  78.          break;
  79.         }
  80.      break;
  81.     case 6://联通拆机号码
  82.      mail.setSubject("报告:联通拆机号码表生成完毕");
  83.       switch (Integer.parseInt(city))
  84.         {
  85.         case 1: //天津;
  86.          mail.setContent("本月拆机文件中,有【"+index_a+"】个号码为我公司用户,更新了系统中【"+index_b+"】条数据. ");
  87.          to.add(mail_id);
  88.        /*to.add(publicvalue.外段表长春.getValue());
  89.        cc.add(publicvalue.刘.getValue()); 
  90.        cc.add(mail_id);*/
  91.             break;
  92.         case 2: //河北
  93.           break;
  94.         case 3://杭州
  95.          break;
  96.         case 4://长春
  97.          break; 
  98.         }
  99.      break;
  100.     case 7://移动确认号码报表
  101.      mail.setSubject("移动确认号码报表");
  102.       switch (Integer.parseInt(city))
  103.         {
  104.         case 1: //天津;
  105.          mail.setContent("移动确认号码报表操作生成完毕,请检查附件");
  106.          to.add(mail_id);
  107.        /*to.add(publicvalue.外段表长春.getValue());
  108.        cc.add(publicvalue.刘.getValue()); 
  109.        cc.add(mail_id);*/
  110.          attach1.setName("移动确认号码报表.xls");
  111.        attach1.setLocalPath("c:\\移动确认号码报表.xls");
  112.             break;
  113.         case 2: //河北
  114.           break;
  115.         case 3://杭州
  116.          break;
  117.         case 4://长春
  118.          break;
  119.         }
  120.      break;
  121.     }
  122.    mail.setTo(to);
  123.    mail.setCc(cc);
  124.    attaches.add(attach1);
  125.   /* List<String> reply = new ArrayList<String>();
  126.    reply.add("[url=mailto:[email protected]][email protected][/url]");
  127.    reply.add("[url=mailto:[email protected]][email protected][/url]"); 
  128.    mail.setReply(reply);*/
  129.    Properties pro = new Properties();
  130.    pro.setProperty("mail.smtp.host", "mail.infogate-tj.com.cn");
  131.    pro.setProperty("mail.smtp.port", "25");
  132.    pro.setProperty("mail.smtp.auth", "true");
  133.    pro.setProperty("mail.smtp.username",mail_id);
  134.    pro.setProperty("mail.smtp.password",mail_ps);
  135.    mail.setProperties(pro);
  136.    mail.setAttachments(attaches);
  137.    System.out.println("正在发送...");
  138.    long time1 = new Date().getTime();
  139.    boolean sended = MailSender.send(mail); 
  140.    long time2 = new Date().getTime();
  141.    System.out.println((sended ? "发送成功!" : "发送失败!"));
  142.    System.out.println("耗时:" + (time2 - time1) + "毫秒");
  143.    return true;     }
  144. }
  145. //publicvalue.java 这就是我说的应该修改的 不应该用枚举描述符..其实这个方法也是一个同事跟我说地.等后来领导给我说了利弊后
  146. //才恍然大悟.哈哈..人非圣贤孰能无过..大家改成 privat  String  email; 吧
  147. package publicclass;
  148. public enum publicvalue {
  149.    张([email protected]][email protected]),王("[email protected]][email protected]");
  150.    private final String value;
  151.    private publicvalue(String value)
  152.    {
  153.     this.value=value;
  154.    }
  155.   public String getValue()  {
  156.      return this.value;
  157.   }
  158.     
  159. }
复制代码


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

你可能感兴趣的:(java,sql,xml,String,Excel,报表)