java poi組件Excel的導入導出

項目結構:
 用到的Excel文件:
 
XlsMain .java 類
//該類有main方法,主要負責運行程序,同時該類中也包含了用poi讀取Excel(2003版)

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
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;
/**
 *
 * @author Hongten</br>
 *
 *         參考地址:http://hao0610.iteye.com/blog/1160678
 *
 */
public class XlsMain {
 
    public static void main(String[] args) throws IOException {
        XlsMain xlsMain = new XlsMain();
        XlsDto xls = null;
        List<XlsDto> list = xlsMain.readXls();
         
        try {
            XlsDto2Excel.xlsDto2Excel(list);
        } catch (Exception e) {
            e.printStackTrace();
        }
        for (int i = 0; i < list.size(); i++) {
            xls = (XlsDto) list.get(i);
            System.out.println(xls.getXh() + "    " + xls.getXm() + "    "
                    + xls.getYxsmc() + "    " + xls.getKcm() + "    "
                    + xls.getCj());
        }
 
    }
    /**
     * 讀取xls文件內容
     *
     * @return List<XlsDto>對象
     * @throws IOException
     *             輸入/輸出(i/o)異常
     */
    private List<XlsDto> readXls() throws IOException {
        InputStream is = new FileInputStream("pldrxkxxmb.xls");
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
        XlsDto xlsDto = null;
        List<XlsDto> list = new ArrayList<XlsDto>();
        // 循環工作表Sheet
        for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
            HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
            if (hssfSheet == null) {
                continue;
            }
            // 循環行Row
            for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
                HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                if (hssfRow == null) {
                    continue;
                }
                xlsDto = new XlsDto();
                // 循環列Cell
                // 0學號 1姓名 2學院 3課程名 4 成績
                // for (int cellNum = 0; cellNum <=4; cellNum++) {
                HSSFCell xh = hssfRow.getCell(0);
                if (xh == null) {
                    continue;
                }
                xlsDto.setXh(getValue(xh));
                HSSFCell xm = hssfRow.getCell(1);
                if (xm == null) {
                    continue;
                }
                xlsDto.setXm(getValue(xm));
                HSSFCell yxsmc = hssfRow.getCell(2);
                if (yxsmc == null) {
                    continue;
                }
                xlsDto.setYxsmc(getValue(yxsmc));
                HSSFCell kcm = hssfRow.getCell(3);
                if (kcm == null) {
                    continue;
                }
                xlsDto.setKcm(getValue(kcm));
                HSSFCell cj = hssfRow.getCell(4);
                if (cj == null) {
                    continue;
                }
                xlsDto.setCj(Float.parseFloat(getValue(cj)));
                list.add(xlsDto);
            }
        }
        return list;
    }
 
    /**
     * 得到Excel表中的值
     *
     * @param hssfCell
     *            Excel中的每一個格子
     * @return Excel中每一個格子中的值
     */
    @SuppressWarnings("static-access")
    private String getValue(HSSFCell hssfCell) {
        if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
            // 返回布爾類型的值
            return String.valueOf(hssfCell.getBooleanCellValue());
        } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
            // 返回數值類型的值
            return String.valueOf(hssfCell.getNumericCellValue());
        } else {
            // 返回字符串類型的值
            return String.valueOf(hssfCell.getStringCellValue());
        }
    }
 
}

 

 

 

XlsDto2Excel.java類

//該類主要負責向Excel(2003版)中插入數據

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;
 
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 
 
public class XlsDto2Excel {
 
    /**
     *
     * @param xls
     *            XlsDto實體類的一個對象
     * @throws Exception
     *             在導入Excel的過程中拋出異常
     */
    public static void xlsDto2Excel(List<XlsDto> xls) throws Exception {
        // 獲取總列數
        int CountColumnNum = xls.size();
        // 創建Excel文檔
        HSSFWorkbook hwb = new HSSFWorkbook();
        XlsDto xlsDto = null;
        // sheet 對應一個工作頁
        HSSFSheet sheet = hwb.createSheet("pldrxkxxmb");
        HSSFRow firstrow = sheet.createRow(0); // 下標爲0的行開始
        HSSFCell[] firstcell = new HSSFCell[CountColumnNum];
        String[] names = new String[CountColumnNum];
        names[0] = "學號";
        names[1] = "姓名";
        names[2] = "學院";
        names[3] = "課程名";
        names[4] = "成績";
        for (int j = 0; j < CountColumnNum; j++) {
            firstcell[j] = firstrow.createCell(j);
            firstcell[j].setCellValue(new HSSFRichTextString(names[j]));
        }
        for (int i = 0; i < xls.size(); i++) {
            // 創建一行
            HSSFRow row = sheet.createRow(i + 1);
            // 得到要插入的每一條記錄
            xlsDto = xls.get(i);
            for (int colu = 0; colu <= 4; colu++) {
                // 在一行內循環
                HSSFCell xh = row.createCell(0);
                xh.setCellValue(xlsDto.getXh());
                HSSFCell xm = row.createCell(1);
                xm.setCellValue(xlsDto.getXm());
                HSSFCell yxsmc = row.createCell(2);
                yxsmc.setCellValue(xlsDto.getYxsmc());
                HSSFCell kcm = row.createCell(3);
                kcm.setCellValue(xlsDto.getKcm());
                HSSFCell cj = row.createCell(4);
                cj.setCellValue(xlsDto.getCj());
(xlsDto.getMessage());
            }
        }
        // 創建文件輸出流,準備輸出電子表格
        OutputStream out = new FileOutputStream("POI2Excel/pldrxkxxmb.xls");
        hwb.write(out);
        out.close();
        System.out.println("數據庫導出成功");
    }
 
}

 

XlsDto .java類

//該類是一個實體類

public class XlsDto {
    /**
     * 選課號
     */
    private Integer xkh;
    /**
     * 學號
     */
    private String xh;
    /**
     * 姓名
     */
    private String xm;
    /**
     * 學院
     */
    private String yxsmc;
    /**
     * 課程號
     */
    private Integer kch;
    /**
     * 課程名
     */
    private String kcm;
    /**
     * 成績
     */
    private float cj;
    public Integer getXkh() {
        return xkh;
    }
    public void setXkh(Integer xkh) {
        this.xkh = xkh;
    }
    public String getXh() {
        return xh;
    }
    public void setXh(String xh) {
        this.xh = xh;
    }
    public String getXm() {
        return xm;
    }
    public void setXm(String xm) {
        this.xm = xm;
    }
    public String getYxsmc() {
        return yxsmc;
    }
    public void setYxsmc(String yxsmc) {
        this.yxsmc = yxsmc;
    }
    public Integer getKch() {
        return kch;
    }
    public void setKch(Integer kch) {
        this.kch = kch;
    }
    public String getKcm() {
        return kcm;
    }
    public void setKcm(String kcm) {
        this.kcm = kcm;
    }
    public float getCj() {
        return cj;
    }
    public void setCj(float cj) {
        this.cj = cj;
    }
     
}

 

後臺輸出:

數據庫導出成功
1.0    hongten    信息技術學院    計算機網絡應用基礎    80.0
2.0    王五    信息技術學院    計算機網絡應用基礎    81.0
3.0    李勝基    信息技術學院    計算機網絡應用基礎    82.0
4.0    五班古    信息技術學院    計算機網絡應用基礎    83.0
5.0    蔡詩芸    信息技術學院    計算機網絡應用基礎    84.0 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章