poi读写Excel文件

  • jxl 只有excel基本的操作,代码操作比较方便,一般使用jxl就够了,对图片支持较好
  • poi功能比jxl强大但是比较吃内存,支持计算公式

       关于jxl具体可以参考    http://www.cnblogs.com/dashuai01/p/4776277.html

package test_poi;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

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.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.junit.Test;

public class TestPoi {
    @Test
    public void createWorkBook() throws Exception {
        Workbook wb = new HSSFWorkbook(); // 创建工作簿
        Sheet sheet = wb.createSheet("first sheet"); // 创建工作表并且定义工作表名称
        Row createRow = sheet.createRow(0); // 定义第一行
        // Row createRow2 = sheet.createRow(1);// 定义第二行
        createRow.createCell(0).setCellValue("hehe"); // 第一行第一个列,并赋值
        for (int i = 0; i < 10; i++) {
            createRow.createCell(i + 1).setCellValue("hehe" + i); // 循环第一行
            // createRow2.createCell(i).setCellValue("第二行" + i); // 循环第二行
        }
        OutputStream fileOut = new FileOutputStream("d:\\poi.xls");// 输出流
        wb.createSheet("two");// 创建第二个工作表并定义名称
        wb.write(fileOut); // 将文件输出到文件中
        fileOut.close(); // 关闭输出流,,
    }

    @Test
    public void readExl() throws Exception {
        InputStream is = new FileInputStream("d:\\poi.xls");
        POIFSFileSystem fs = new POIFSFileSystem(is);
        HSSFWorkbook wb = new HSSFWorkbook(fs);
        HSSFSheet sheet = wb.getSheetAt(0);
        // 获得总行数,第一行算标题不算在行数内,所以总的行数应该是lastRowNum+1
        int lastRowNum = sheet.getLastRowNum();
        System.out.println(lastRowNum);
        // 直接根据行号获取信息
        HSSFRow row = sheet.getRow(0);// 获取第一行(标题)
        // 获取当前行总列数
        int physicalNumberOfCells = row.getPhysicalNumberOfCells();
        System.out.println("标题总列数=" + physicalNumberOfCells);
        // 单元格内容格式
        int cellType = row.getCell(3).getCellType();// 格式是:
                                                    // HSSFCell.CELL_TYPE_STRING...
        // 获取不同类型的值
        double numericCellValue = row.getCell(0).getNumericCellValue();
        boolean booleanCellValue = row.getCell(1).getBooleanCellValue();
        Date dateCellValue = row.getCell(2).getDateCellValue();

        System.out.println(cellType + "********");

    }
}
posted @ 2015-09-02 11:11  ordinary01  阅读(384)  评论(0编辑  收藏  举报