import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
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.junit.Test;

public class poi_write {

    @Test
    public void testWrite() {
        final String [] str = {"id", "姓名", "性别"};
        //创建Excel工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建Excel工作表
        HSSFSheet sheet = workbook.createSheet();
        //创建第一行
        HSSFRow row = sheet.createRow(0);
        //定义单元格
        HSSFCell cell = null;

        //添加表头,为第一行填充内容
        for (int i = 0; i < str.length; i++) {
            cell = row.createCell(i);
            cell.setCellValue(str[i]);
        }

        //追加数据,创建十行,为每行添加数据,每行三个单元格,下表依次0,1,2
        for (int i = 1; i <= 10; i++) {
            HSSFRow rows = sheet.createRow(i);
            HSSFCell cell_id = rows.createCell(0);
            cell_id.setCellValue(i+"");
            HSSFCell cell_name = rows.createCell(1);
            cell_name.setCellValue("name:"+i);
            HSSFCell cell_sex = rows.createCell(2);
            cell_sex.setCellValue("男");
        }

        //文件保存路径
        File file = new File("E:/tmp/poi_text.xls");
        try{
            if(!file.exists()){
                file.createNewFile();
            }
            FileOutputStream fileOut = new FileOutputStream(file);//创建一个文件输出流对象
            workbook.write(fileOut);
            fileOut.close();//关闭输出流对象
        }catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("Excel文件已生成");
    }

    @Test
    public  void testRead() {
        final File file = new File("E:/tmp/poi_text.xls");
        if(file.exists()){
            try {
                //生成workbook
                HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
               // workbook.getSheet("Sheet0");//获得指定的工作表
               // HSSFSheet sheet = workbook.getSheet("Sheet0");
                //workbook.getSheetAt(0);//默认获得第一个工作表
                HSSFSheet sheet = workbook.getSheetAt(0);

                int firstRowNum = 0;
                //获得当前sheet最后一行行号
                int lastRowNum = sheet.getLastRowNum();
                for (int i = firstRowNum; i <= lastRowNum; i++) {
                    HSSFRow row = sheet.getRow(i);
                    //获得当前行最后单元格列号
                    int lastCellNum = row.getLastCellNum();
                    for (int j = 0; j < lastCellNum; j++) {
                        HSSFCell cell = row.getCell(j);
                        String value = cell.getStringCellValue();
                        System.out.print(value+" ");
                    }
                    System.out.println("");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }else{
            System.out.println("读取文件不存在");
        }
    }

}

jar包 :poi-3.8-20120326.jar

java_poi的更多相关文章

  1. Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要

    Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要 作者:Eric.Zhang(花名:穿越者7号) 日期:2015年1 ...

  2. JAVA_POI 操作Excel

    转自: http://rensanning.iteye.com/blog/1538591# Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API ...

随机推荐

  1. [jzoj 5781]【NOIP提高A组模拟2018.8.8】秘密通道 (最短路)

    传送门 Description 有一副nm的地图,有nm块地,每块是下列四种中的一种: 墙:用#表示,墙有4个面,分别是前面,后面,左面,右面. 起点:用C表示,为主角的起点,是一片空地. 终点:用F ...

  2. Dell R720修改远程管理口的密码

    今天有个客户需要通过远程管理口来查看系统事件日志,但是他们把初始密码改过并且还给忘记了.后来我决定进操作系统(cent os)进行修改.整个过程很简单,进入系统后只需要三个步骤就解决问题了 1.安装软 ...

  3. vue全局使用axios的方法

    在vue项目开发中,我们使用axios的二次封装,很多人一开始使用axios的方式,会当成vue-resoure的使用方式来用,即在主入口文件引入import VueResource from 'vu ...

  4. Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)

    哎呀大水题..我写了一个多小时..好没救啊.. 数论板子X合一? 注意: 本文中变量名称区分大小写. 题意: 给一个\(n\)阶递推序列\(f_k=\prod^{n}_{i=1} f_{k-i}b_i ...

  5. 关于 图论·并查集·HDU1232&1856

    其核心是追溯其根数和链接两个数,而HDU 1856要多一步,每一个根数要标记自己和自己子数的个数,因此用结构体.注意:1856 用C写没超时,用C++写超时了╮(╯﹏╰)╭ 接下来是题目和代码: 畅通 ...

  6. MySQL用Load Data local infile 导入部分数据后中文乱码

    今天在两台MySQL服务器之间导数据,因为另一个MySQL服务器是测试用的,差一个月的数据,从现有MySQL服务器select到一个文件,具体语句是: select * from news where ...

  7. Docker installation in sles SP2

    Please refer to official site for installation  details :  https://docs.docker.com/install/linux/doc ...

  8. hibernate反向生成

    1.在Myeclipse Database Explore中创建一个库的链接. 2.在Myeclipse中创建一个web工程,添加反向生成相关的引用.即在项目上右键,弹出Myeclipse选择add  ...

  9. 网络编程中的CAP & 有趣的存储框架(关系型、NoSQL)全图

    第七篇 CAP https://zhuanlan.zhihu.com/p/20399316?refer=auxten   CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s t ...

  10. Google面试题-高楼扔鸡蛋问题

    本文由 @lonelyrains 出品.转载请注明出处.  文章链接: http://blog.csdn.net/lonelyrains/article/details/46428569 高楼扔鸡蛋问 ...