分享

用POI把数据导出为Excel

 hehffyy 2011-01-18
最近在做我们的JAVA课程设计,我的设计里面涉及到了对信息的导出,包括导出Excel和Pdf.在网上查了有关Poi的资料查了很久终于写出了满足自己需求的程序.以下是程序的全部代码: 

(一)SheetDataSource.java 

Java代码 
  1. package com.javaeye.yongsky;  
  2.   
  3. import java.sql.*;  
  4. import java.util.*;  
  5.   
  6. import com.microsoft.jdbc.*;  
  7.   
  8. public class SheetDataSource {  
  9.   
  10.  private static Connection con ;  
  11.    
  12.  private static final String DatabaseName = "POIDEMO";  
  13.    
  14.  private static final String userName = "sa";  
  15.    
  16.  private static final String password = "123";  
  17.    
  18.  public SheetDataSource()  
  19.  {  
  20.   try {  
  21.    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");  
  22.    try {  
  23.      con = DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName="+DatabaseName,userName,password);  
  24.    } catch (SQLException e) {  
  25.     e.printStackTrace();  
  26.    }  
  27.   } catch (ClassNotFoundException e) {  
  28.    e.printStackTrace();  
  29.   }  
  30.  }  
  31.    
  32.  public static ResultSet selectAllDataFromDB() throws SQLException   
  33.  {   
  34.    new SheetDataSource();  
  35.    Statement stmt = con.createStatement();  
  36.    return stmt.executeQuery("select * from COMPANY");  
  37.  }  
  38.    
  39. }  


上面部分代码主要是从数据库里面取出数据,作为Excel的数据源. 

(二)PoiDemo.java 

Java代码 
  1. package com.javaeye.yongsky;  
  2.   
  3. import java.io.FileOutputStream;  
  4. import java.io.IOException;  
  5. import java.io.OutputStream;  
  6. import java.sql.ResultSet;  
  7. import java.sql.SQLException;  
  8. import java.util.*;  
  9.   
  10. import javax.swing.JOptionPane;  
  11.   
  12. import org.apache.poi.hssf.usermodel.HSSFCell;  
  13. import org.apache.poi.hssf.usermodel.HSSFFooter;  
  14. import org.apache.poi.hssf.usermodel.HSSFHeader;  
  15. import org.apache.poi.hssf.usermodel.HSSFRow;  
  16. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  17. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  18.   
  19. public class PoiDemo {  
  20.   
  21.     //表头  
  22.     public static final String[] tableHeader = {"企业中文名","所属国家","企业英文名","2003年排名","2004年排名","2005年排名",  
  23.         "2006年排名","2007年排名","主要业务","2003年营业额","2004年营业额","2005年营业额","2006年营业额","2007年营业额","企业编号","名次升降",  
  24.         "图片","状况"};  
  25.     //创建工作本  
  26.     public static HSSFWorkbook demoWorkBook = new HSSFWorkbook();  
  27.     //创建表  
  28.     public static HSSFSheet demoSheet = demoWorkBook.createSheet("The World's 500 Enterprises");  
  29.     //表头的单元格个数目  
  30.     public static final short cellNumber = (short)tableHeader.length;  
  31.     //数据库表的列数  
  32.     public static final int columNumber = 18;  
  33.     /** 
  34.      * 创建表头 
  35.      * @return 
  36.      */  
  37.     public static void createTableHeader()  
  38.     {  
  39.         HSSFHeader header = demoSheet.getHeader();  
  40.         header.setCenter("世界五百强企业名次表");  
  41.         HSSFRow headerRow = demoSheet.createRow((short0);  
  42.         for(int i = 0;i < cellNumber;i++)  
  43.         {  
  44.             HSSFCell headerCell = headerRow.createCell((short) i);  
  45.             headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);  
  46.             headerCell.setCellValue(tableHeader[i]);  
  47.         }  
  48.     }  
  49.     /** 
  50.      * 创建行 
  51.      * @param cells 
  52.      * @param rowIndex 
  53.      */  
  54.     public static void createTableRow(List<String> cells,short rowIndex)  
  55.     {  
  56.         //创建第rowIndex行  
  57.         HSSFRow row = demoSheet.createRow((short) rowIndex);  
  58.         for(short i = 0;i < cells.size();i++)  
  59.         {  
  60.             //创建第i个单元格  
  61.             HSSFCell cell = row.createCell((short) i);  
  62.             cell.setEncoding(HSSFCell.ENCODING_UTF_16);  
  63.             cell.setCellValue(cells.get(i));  
  64.         }  
  65.     }  
  66.       
  67.     /** 
  68.      * 创建整个Excel表 
  69.      * @throws SQLException  
  70.      * 
  71.      */  
  72.     public static void createExcelSheeet() throws SQLException  
  73.     {  
  74.         createTableHeader();  
  75.         ResultSet rs = SheetDataSource.selectAllDataFromDB();  
  76.         int rowIndex = 1;  
  77.         while(rs.next())  
  78.         {  
  79.             List<String> list = new ArrayList<String>();  
  80.             for(int i = 1;i <= columNumber;i++)  
  81.             {  
  82.                 list.add(rs.getString(i));  
  83.             }  
  84.             createTableRow(list,(short)rowIndex);  
  85.             rowIndex++;  
  86.         }  
  87.     }  
  88.     /** 
  89.      * 导出表格 
  90.      * @param sheet 
  91.      * @param os 
  92.      * @throws IOException 
  93.      */  
  94.     public void exportExcel(HSSFSheet sheet,OutputStream os) throws IOException  
  95.     {  
  96.         sheet.setGridsPrinted(true);  
  97.         HSSFFooter footer = sheet.getFooter();  
  98.         footer.setRight("Page " + HSSFFooter.page() + " of " +  
  99.         HSSFFooter.numPages());  
  100.         demoWorkBook.write(os);  
  101.     }  
  102.       
  103.     public static void main(String[] args) {  
  104.         String fileName = "D:\\世界五百强企业名次表.xls";  
  105.          FileOutputStream fos = null;  
  106.             try {  
  107.                 PoiDemo pd = new PoiDemo();  
  108.                 pd.createExcelSheeet();  
  109.                 fos = new FileOutputStream(fileName);  
  110.                 pd.exportExcel(demoSheet,fos);  
  111.                 JOptionPane.showMessageDialog(null"表格已成功导出到 : "+fileName);  
  112.             } catch (Exception e) {  
  113.                 JOptionPane.showMessageDialog(null"表格导出出错,错误信息 :"+e+"\n错误原因可能是表格已经打开。");  
  114.                 e.printStackTrace();  
  115.             } finally {  
  116.                 try {  
  117.                     fos.close();  
  118.                 } catch (Exception e) {  
  119.                     e.printStackTrace();  
  120.                 }  
  121.             }  
  122.     }  
  123. }  



另外在附件里面附带有本程序所用的所有资源,包括源代码文件,数据库和POI的JAR包,欢迎有兴趣的朋友参考,并提出宝贵的意见.
致谢 :  
     本程序的数据库由兄弟温总提供,为了不让他免费为我们提供他辛辛苦苦做出数据库而感到心里不平衡,在此向他表示感谢! 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多