Java 使用POI實現(xiàn)Excel表格的導(dǎo)入導(dǎo)出

1.介紹

最近的項目需要導(dǎo)出數(shù)據(jù)到Excel表格里捆蜀,寫個Demo測試一下疮丛,還是比較簡單的,寫在博客里記錄下來辆它,分享給童鞋們誊薄。

需要導(dǎo)入POI.jar包
下載地址:http://download.csdn.net/detail/kong_gu_you_lan/9652468

2.實現(xiàn)

已經(jīng)在代碼中加入了完整的注釋。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
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.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class ExcelOperate {

    public static void main(String[] args) {
        // 創(chuàng)建Excel表格
        createExcel(getStudent());

        // 讀取Excel表格
        List<Student> list = readExcel();
        System.out.println(list.toString());
    }

    /**
     * 初始化數(shù)據(jù)
     * 
     * @return 數(shù)據(jù)
     */
    private static List<Student> getStudent() {
        List<Student> list = new ArrayList<Student>();
        Student student1 = new Student("小明", 8, "二年級");
        Student student2 = new Student("小光", 9, "三年級");
        Student student3 = new Student("小花", 10, "四年級");
        list.add(student1);
        list.add(student2);
        list.add(student3);
        return list;
    }

    /**
     * 創(chuàng)建Excel
     * 
     * @param list
     *            數(shù)據(jù)
     */
    private static void createExcel(List<Student> list) {
        // 創(chuàng)建一個Excel文件
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 創(chuàng)建一個工作表
        HSSFSheet sheet = workbook.createSheet("學(xué)生表一");
        // 添加表頭行
        HSSFRow hssfRow = sheet.createRow(0);
        // 設(shè)置單元格格式居中
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

        // 添加表頭內(nèi)容
        HSSFCell headCell = hssfRow.createCell(0);
        headCell.setCellValue("姓名");
        headCell.setCellStyle(cellStyle);

        headCell = hssfRow.createCell(1);
        headCell.setCellValue("年齡");
        headCell.setCellStyle(cellStyle);

        headCell = hssfRow.createCell(2);
        headCell.setCellValue("年級");
        headCell.setCellStyle(cellStyle);

        // 添加數(shù)據(jù)內(nèi)容
        for (int i = 0; i < list.size(); i++) {
            hssfRow = sheet.createRow((int) i + 1);
            Student student = list.get(i);

            // 創(chuàng)建單元格锰茉,并設(shè)置值
            HSSFCell cell = hssfRow.createCell(0);
            cell.setCellValue(student.getName());
            cell.setCellStyle(cellStyle);

            cell = hssfRow.createCell(1);
            cell.setCellValue(student.getAge());
            cell.setCellStyle(cellStyle);

            cell = hssfRow.createCell(2);
            cell.setCellValue(student.getGrade());
            cell.setCellStyle(cellStyle);
        }

        // 保存Excel文件
        try {
            OutputStream outputStream = new FileOutputStream("D:/students.xls");
            workbook.write(outputStream);
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 讀取Excel
     * 
     * @return 數(shù)據(jù)集合
     */
    private static List<Student> readExcel() {
        List<Student> list = new ArrayList<Student>();
        HSSFWorkbook workbook = null;

        try {
            // 讀取Excel文件
            InputStream inputStream = new FileInputStream("D:/students.xls");
            workbook = new HSSFWorkbook(inputStream);
            inputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 循環(huán)工作表
        for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {
            HSSFSheet hssfSheet = workbook.getSheetAt(numSheet);
            if (hssfSheet == null) {
                continue;
            }
            // 循環(huán)行
            for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
                HSSFRow hssfRow = hssfSheet.getRow(rowNum);
                if (hssfRow == null) {
                    continue;
                }

                // 將單元格中的內(nèi)容存入集合
                Student student = new Student();

                HSSFCell cell = hssfRow.getCell(0);
                if (cell == null) {
                    continue;
                }
                student.setName(cell.getStringCellValue());

                cell = hssfRow.getCell(1);
                if (cell == null) {
                    continue;
                }
                student.setAge((int) cell.getNumericCellValue());

                cell = hssfRow.getCell(2);
                if (cell == null) {
                    continue;
                }
                student.setGrade(cell.getStringCellValue());

                list.add(student);
            }
        }
        return list;
    }
}

附上Student類的代碼

public class Student {

    private String name;
    private int age;
    private String grade;

    public Student() {
    }

    public Student(String name, int age, String grade) {
        super();
        this.name = name;
        this.age = age;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", grade=" + grade
                + "]";
    }
}

測試結(jié)果

導(dǎo)出的Excel表格

students

打印讀取的Excel數(shù)據(jù)

[Student [name=小明, age=8, grade=二年級], Student [name=小光, age=9, grade=三年級], Student [name=小花, age=10, grade=四年級]]

4.寫在最后

Demo和POI.jar下載地址:http://download.csdn.net/detail/kong_gu_you_lan/9652468

歡迎同學(xué)們吐槽評論呢蔫,如果你覺得本篇博客對你有用,那么就留個言或者點下喜歡吧(^-^)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洞辣,一起剝皮案震驚了整個濱河市咐刨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扬霜,老刑警劉巖定鸟,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異著瓶,居然都是意外死亡联予,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門材原,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沸久,“玉大人,你說我怎么就攤上這事余蟹【砜瑁” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵威酒,是天一觀的道長窑睁。 經(jīng)常有香客問我挺峡,道長,這世上最難降的妖魔是什么担钮? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任橱赠,我火速辦了婚禮,結(jié)果婚禮上箫津,老公的妹妹穿的比我還像新娘狭姨。我一直安慰自己,他們只是感情好苏遥,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布饼拍。 她就那樣靜靜地躺著,像睡著了一般暖眼。 火紅的嫁衣襯著肌膚如雪惕耕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天诫肠,我揣著相機與錄音司澎,去河邊找鬼。 笑死栋豫,一個胖子當(dāng)著我的面吹牛挤安,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丧鸯,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼蛤铜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丛肢?” 一聲冷哼從身側(cè)響起围肥,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜂怎,沒想到半個月后穆刻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡杠步,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年氢伟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幽歼。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡朵锣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甸私,到底是詐尸還是另有隱情诚些,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布皇型,位于F島的核電站泣刹,受9級特大地震影響助析,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜椅您,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寡键。 院中可真熱鬧掀泳,春花似錦、人聲如沸西轩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽藕畔。三九已至马僻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間注服,已是汗流浹背韭邓。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溶弟,地道東北人女淑。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像辜御,于是被迫代替她去往敵國和親鸭你。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容