java 的poi导出excel实例

package testPOI;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;

public class Client {
    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        Client c = new Client();
        List list1 = new ArrayList();
        List list2 = new ArrayList();
        List list3 = new ArrayList();
        
        List list = new ArrayList();
        list1.add("1班");
        list1.add("zhangsan");
        list1.add("10");
        list1.add("男");
        
        list2.add("");
        list2.add("lisi");
        list2.add("90");
        list2.add("男");
        
        list3.add("");
        list3.add("wangwu");
        list3.add("100");
        list3.add("女");
        
        list.add(list1);
        list.add(list2);
        list.add(list3);
        
        List et = new ArrayList();
        et.add("区域");
        et.add("姓名");
        et.add("年纪");
        et.add("性别");
        
        HSSFWorkbook excle = c.getExcel(et,list);
         OutputStream out = new FileOutputStream("E://a.xls");
         excle.write(out);
    }

    // 创建一个excel文件
    public HSSFWorkbook getExcel(List excleTitle, List<List> data) {
        // 创建工作簿实例
        HSSFWorkbook workbook = new HSSFWorkbook();

        // 创建一个sheet
        HSSFSheet sheet = workbook.createSheet("TscExcel");

        // 设置表明名名称 第一行为表名
        HSSFRow excelName = sheet.createRow(0);
        // 创建列第一行第一列
        HSSFCell cell = excelName.createCell(0);
        cell.setCellValue("学生信息");
        // 表头需要合并
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4));

        // 设置表明名名称 第一行为标题
        HSSFRow row = sheet.createRow(1);// 建立新行
        for (int i = 0; i < excleTitle.size(); i++) {
            HSSFCell cellf = row.createCell((short) i);
            cellf.setCellValue((String) excleTitle.get(i));
        }

        // 2. 给excel填充数据
        int i = 0;
        for (List<List> tableBody : data) {
            HSSFRow rowBody = sheet.createRow(i + 2);// 建立新行
            for (int j = 0; j < tableBody.size(); j++) {
                this.createCell(rowBody, j, tableBody.get(j));
            }
            i++;
        }
        sheet.addMergedRegion(new CellRangeAddress(2, data.size()+1, 0, 0));

        return workbook;
    }

    /**
     * 创建Excel单元格及默认格式
     */
    private  void createCell(HSSFRow row, int column, Object value) {
        HSSFCell cell = row.createCell((short) column);
        String data = "";
        if (value != null)
            data += value;
        if (!"".equals(data) && isNumeric(data) && data.indexOf("0") != 0) {
            // 电话号码以86开头加上去就是13位的数字或者纯的数字但是大于等于11,只能设置为文本形式,不然在设置成数字类型在excel单元格中就看上去就像乱码了
            if ((data.indexOf("86") == 0 && data.length() == 13)
                    || data.length() >= 11) {
                cell.setCellValue(data);
            } else {
                cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                cell.setCellValue(Double.parseDouble(data.trim()));
            }
        } else {
            cell.setCellValue(data);
        }

    }
    /**
     * 判断是否为数字
     *
     * @param str
     * @return
     */
    public static boolean isNumeric(String str) {
        for (int i = str.length(); --i >= 0;) {
            if (!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }

}

posted @ 2013-07-09 15:37  lifeng_study  阅读(445)  评论(0编辑  收藏  举报