今天做了一个关于Java生成Excel表的功能
有两种方式:1、jxl.jar 2、poi-3.7-20101029.jar
第一个不算太了解,第二个是出自apache的标准,虽然我两个都使用了,但比较偏向第二个;
就功能性而言,第一个比较灵活,但结构略简单,无法从数据库中大规模的生成(或者是我不知道);第二个比较全面,但太过庞大

第一个代码:

// 打开文件
            WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
            // 生成名为“第一页”的工作表,参数0表示这是第一页
            WritableSheet sheet = book.createSheet("第一页" , 0 );
            // 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
            // 以及单元格内容为test
            Label label = new Label( 0 , 0 , "test" );
            // 将定义好的单元格添加到工作表中
            sheet.addCell(label);
             /**/ 
            /*
             * 生成一个保存数字的单元格 必须使用Number的完整包路径,否则有语法歧义 单元格位置是第二列,第一行,值为789.123
            */
            jxl.write.Number number = new jxl.write.Number( 1 , 0 , 555.12541 );
            sheet.addCell(number);

            // 写入数据并关闭文件
            book.write();
            book.close();

第二个代码:

Connection conn = null;
    Class.forName("com.mysql.jdbc.Driver");
    conn = (Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","1234");

    // 11:创建一个excel
    HSSFWorkbook book = new HSSFWorkbook();

    // 1:分析数据
    java.sql.DatabaseMetaData dmd = conn.getMetaData();
    // 2:获取所有表名
    java.sql.ResultSet rs = dmd.getTables("", "TEST", "STUDENTS",
            new String[] {"TABLE"});
    List<String> tables = new ArrayList<String>();

    while (rs.next()) {
        String tn = rs.getString("TABLE_NAME");
        tables.add(tn);
    }
    int table_len = tables.size();

    // 3:声明st
    Statement st = conn.createStatement();

    int idx = 0;

    for (String tn : tables) {
        System.err.println("表:" + tn);

        idx++;
        System.err.println("-------正在导----" + idx + "/" + table_len);

        // 12:创建sheet
        HSSFSheet sheet = book.createSheet(tn);

        String sql = "select * from " + tn;
        rs = st.executeQuery(sql);
        // 3:rsmd
        ResultSetMetaData rsmd = (ResultSetMetaData)rs.getMetaData();
        // 4:分析一共多少列
        int cols = rsmd.getColumnCount();

        // 13:创建表头
        HSSFRow row = sheet.createRow(0);

        for (int i = 0; i < cols; i++) {
            String cname = rsmd.getColumnName(i + 1);

            HSSFCell cell = row.createCell(i);
            cell.setCellValue(cname);

            // System.err.print("\t"+cname);
        }
        // System.err.println("\n");
        // 显示数据
        while (rs.next()) {
            // 14:保存数据
            row = sheet.createRow(sheet.getLastRowNum() + 1);

            for (int i = 0; i < cols; i++) {

                HSSFCell cell = row.createCell(i);
                cell.setCellValue(rs.getString(i + 1));

                // System.err.print("\t"+rs.getString(i+1));
            }
            // System.err.println("\n");
        }

        // System.err.println("\n-------------------");
    }

    book.write(new FileOutputStream("d:/aa.xls"));

yizheng
301 声望27 粉丝

一蓑烟雨任平生