UDN-企业互联网技术人气社区

板块导航

浏览  : 617
回复  : 1

[讨论交流] 数据库导出为Excel

[复制链接]
舞操的头像 楼主
发表于 2015-12-18 17:59:13 | 显示全部楼层 |阅读模式

  创建数据库和表:

  1. create database test;  
  2. crate table test(  
  3.   id int primary key,  
  4.   name varchar(10),  
  5.   sex varchar(10),  
  6.   age int,  
  7.   address varchar(20)  
  8. );  
复制代码


  插入测试数据:

  1. insert into test values(1,'zhangsan1','男',20,'北京');  
  2. insert into test values(2,'zhangsan2','女',22,'北京');  
  3. insert into test values(3,'zhangsan3','女',20,'北京');  
  4. insert into test values(4,'zhangsan4','男',18,'北京');  
  5. insert into test values(5,'zhangsan5','男',20,'北京');  
复制代码


  Servlet: JavaToExcel.java

  1. import java.io.IOException;  
  2. import java.io.OutputStream;  
  3. import java.io.OutputStreamWriter;  
  4. import java.io.PrintWriter;  
  5. import java.sql.Connection;  
  6. import java.sql.DriverManager;  
  7. import java.sql.PreparedStatement;  
  8. import java.sql.ResultSet;  
  9. import java.sql.SQLException;  
  10. import java.text.SimpleDateFormat;  
  11. import java.util.Date;  
  12. import java.util.Hashtable;  
  13. import java.util.List;  
  14. import java.util.Vector;  
  15.   
  16. import javax.servlet.ServletException;  
  17. import javax.servlet.http.HttpServlet;  
  18. import javax.servlet.http.HttpServletRequest;  
  19. import javax.servlet.http.HttpServletResponse;  
  20.   
  21. import jxl.Workbook;  
  22. import jxl.format.Alignment;  
  23. import jxl.format.VerticalAlignment;  
  24. import jxl.write.Label;  
  25. import jxl.write.WritableCellFormat;  
  26. import jxl.write.WritableFont;  
  27. import jxl.write.WritableSheet;  
  28. import jxl.write.WritableWorkbook;  
  29. import jxl.write.WriteException;  
  30.   
  31. public class JavaToExcel extends HttpServlet {  
  32.   
  33.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  34.             throws ServletException, IOException {  
  35.   
  36.         //数据库操作   
  37.         try {  
  38.             Class.forName("com.mysql.jdbc.Driver");  
  39.         } catch (ClassNotFoundException e1) {  
  40.             // TODO Auto-generated catch block  
  41.             e1.printStackTrace();  
  42.         }  
  43.         Connection con = null;  
  44.         PreparedStatement pst = null;  
  45.         ResultSet rs = null;  
  46.         int rows = 1;  
  47.         try {  
  48.              con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123");  
  49.              pst = con.prepareStatement("select * from test");  
  50.              rs = pst.executeQuery();  
  51.         } catch (SQLException e1) {  
  52.             // TODO Auto-generated catch block  
  53.             e1.printStackTrace();  
  54.         }  
  55.          
  56.          
  57.         //标题   
  58.         String fileName = "my first execl";  
  59.         // 获得 OutputStream 最后把生成的excel通过这个写出  
  60.         OutputStream os = response.getOutputStream();  
  61.       
  62.          response.setContentType("application/ms-excel;charset=gbk");  
  63.          request.setCharacterEncoding("gbk");  
  64.          response.setContentType("text/html;charset=gbk");  
  65.            
  66.         // 设置头  
  67.         response.setHeader("Content-Disposition", "attachment;filename="+ fileName + ".xls");  
  68.   
  69.          
  70.         // 标题字体  WritableFont(FontName fn,int ps,BoldStyle bs,Boolean italic) 字体类型  字体大小 字体样式  是否斜体  
  71.         WritableFont wfc = new WritableFont(WritableFont.ARIAL, 15, WritableFont.BOLD, true);  
  72.         WritableCellFormat wcfFC = new WritableCellFormat(wfc);  
  73.   
  74.         // 标题 居中对齐  
  75.         try {  
  76.             //左右居中  
  77.             wcfFC.setAlignment(Alignment.CENTRE);  
  78.             //上下居中   
  79.             wcfFC.setVerticalAlignment(VerticalAlignment.CENTRE);  
  80.         } catch (WriteException e) {  
  81.             e.printStackTrace();  
  82.         }  
  83.         try {  
  84.             // 字段字体  
  85.             WritableFont wfc1 = new WritableFont(WritableFont.COURIER, 10, WritableFont.BOLD, true);  
  86.             WritableCellFormat wcfFC1 = new WritableCellFormat(wfc1);  
  87.             wcfFC1.setAlignment(Alignment.CENTRE); //左右居中   
  88.             wcfFC1.setVerticalAlignment(VerticalAlignment.CENTRE);  //上下居中   
  89.   
  90.             // 通过OutputStream对象os创建Workbook  
  91.             WritableWorkbook wbook = Workbook.createWorkbook(os);  
  92.             // 创建sheet  
  93.             WritableSheet wsheet = wbook.createSheet("sheet", 0);  
  94.   
  95.             // 加入标题  
  96.             wsheet.mergeCells(0, 0, 6, 0); //第一行合并7个单元格   
  97.             wsheet.addCell(new Label(0, 0, "人员信息表", wcfFC));// 写标题 看出坐标是基于 0,0  
  98.               
  99.             try{  
  100.                 while(rs.next()){  
  101.                         wsheet.addCell(new Label(0,rows,rs.getString(1),wcfFC1));  //列,行   
  102.                         wsheet.addCell(new Label(1,rows,rs.getString(2),wcfFC1));  
  103.                         wsheet.addCell(new Label(2,rows,rs.getString(3),wcfFC1));  
  104.                         wsheet.addCell(new Label(3,rows,rs.getString(4),wcfFC1));  
  105.                         wsheet.addCell(new Label(4,rows,rs.getString(5),wcfFC1));  
  106.                         rows++;  
  107.                 }  
  108.             }catch(Exception e){  
  109.                   
  110.             }  
  111.   
  112.             // 加入打印时间  
  113.              Date aaa = new Date();  
  114.              SimpleDateFormat aSimpleDateFormat = new  
  115.              java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
  116.              String today = aSimpleDateFormat.format(aaa);  
  117.              wsheet.addCell(new Label(5, rows+1, "打印日期:"));  
  118.              wsheet.addCell(new Label(6, rows+1, today));  
  119.          
  120.             // 写入流中  
  121.             wbook.write();  
  122.             wbook.close();  
  123.             os.close();  
  124.         } catch (WriteException e) {  
  125.             // TODO Auto-generated catch block  
  126.             e.printStackTrace();  
  127.         }     
  128.     }  
  129.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  130.             throws ServletException, IOException {  
  131.         this.doGet(request, response);  
  132.     }  
  133.   
  134. }  
复制代码

相关帖子

发表于 2016-3-29 10:01:58 | 显示全部楼层

超级好帖!帮顶!
还有一种方法是直接使用SpreadJS这种类Excel控件,在里面直接编辑就好了,然后可以导入或者存成Excel文件类型。Excel里面的功能基本都支持啦,还不用写太多代码。
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部