poi操作excel文件

 

java操作excel文件,有两种工具可以使用,一种是jxl,一种是poi。最近做的需求,使用到poi,因此本文介绍poi的使用(目前只介绍写excel文件)。

 

一、简介

      Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API

目前比较成熟的是HSSF接口,处理MS Excel对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。 poi中,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。

HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。

 

二、使用HSSF API创建excel文档

1、HSSF的几个实体类

HSSFWorkBook  : 整个excel文件

HSSFSheet :工作表

HSSFRow : 行

HSSFCell : 单元格

HSSFCellStyle : 单元格样式

HSSFFont :单元格字体

HSSFDataFormat : 单元格内容格式化

HSSFRichTextString : 单元格文本内容

还有其他一些实体,这里不一一列举

 

2、HSSFWorkBook

WorkBook是通过new HSSFWorkBook实例来创建。

HSSFWorkbook workBook = new HSSFWorkbook();  

3、HSSFSheet
Sheet通过HSSFWorkBook实例的createSheet()函数来创建。
HSSFSheet sheet = workBook.createSheet();
新创建的多个sheet自动按照顺序添加到WorkBook。
Sheet创建的时候并没有指定名字(底部tab显示的名称),可以调用HSSFWorkbook的setSheetName函数来手工设置。如
workBook.setSheetName(sheetindex,"SheetName");
参数sheetindex
      从0开始

4、HSSFRow
Row是通过HSSFSheet实例的createRow(rowNumber)函数创建的。
参数rowNumber从0开始。
HSSFRow row = sheet.createRow(0);
可以调用setHeight(height)函数设置Row的高度;
其中height单位为twip,即1/20个point。
高度也可以通过setHeightInPoints函数来设置。

5、HSSFCell
Cell通过HSSFRow实例的createCell(column)或createCell(column, type)函数来创建。
Cell的type
HSSFCell.CELL_TYPE_NUMERIC

HSSFCell.CELL_TYPE_STRING

HSSFCell.CELL_TYPE_FORMULA

HSSFCell.CELL_TYPE_BLANK   默认值

HSSFCell.CELL_TYPE_BOOLEAN

Cell的值
      调用setCellValue(para)函数来设置。Para参数是HSSFRichTextString、double、Date、Calander。
      单个Cell没有width值,必须HSSFSheet实例的setColumnWidth(colindex, width)函数来设置,单位是1/256个character。例如,如果第一列单元格宽度设置为8个字符宽度,则使用:sheet.setColumnWidth(0, 8*256);

      另外,HSSFSheet提供了autoSizeColumn(short column)方法,来根据单元格内容,自动调整列的宽度。该方法效率很低,不推荐使用(特别是数据量很大的时候)。

6、HSSFFont

HSSFFont是通过HSSFWorkbook实例的createFont()方法创建的,即:

HSSFFont font = workBook.createFont();

font.setFontHeightInPoints((short) 11); // 字体大小
font.setFontName("宋体");

7、HSSFDataFormat

HSSFDataFormat,用来设置单元格的格式,例如数字、日期格式。通过HSSFWorkbook实例的createDataFormat()方法来创建对象,即:

HSSFDataFormat dataFormat = workBook.createDataFormat();

创建之后,使用style进行设置,即:

style.setDataFormat(dataFormat.getFormat("yyyy-mm-dd hh:mm:ss"));

8、HSSFCellStyle
HSSFCellStyle实例是通过HSSFWorkbook实例的createCellStyle()方法来创建的,即:

HSSFCellStyle style = workBook.createCellStyle();

style.setFont(font);
style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
style.setWrapText(false); // 是否换行

style.setDataFormat(dataFormat.getFormat("yyyy-mm-dd hh:mm:ss"));

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
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 WriteExcel {
    private static final String DATE_FORMAT = "yyyy-mm-dd hh:mm:ss";
    private static final String MONEY_FORMAT = "###,##0.00";
   
    public static void main(String[] args) throws IOException {
        export();
    }
   
    public static HSSFCellStyle createCellStyle(HSSFWorkbook workBook, HSSFFont font, short align) {
        HSSFCellStyle style = workBook.createCellStyle();
        style.setFont(font);
        style.setAlignment(align);
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        return style;
    }
   
    public static HSSFCellStyle createWrapCellStyle(HSSFWorkbook workBook, HSSFFont font, short align, boolean wrapped) {
        HSSFCellStyle style = workBook.createCellStyle();
        style.setFont(font);
        style.setAlignment(align);
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        style.setWrapText(wrapped);
        return style;
    }
   
    public static HSSFCellStyle createFormatCellStyle(HSSFWorkbook workBook, HSSFFont font, short align, HSSFDataFormat dataFormat, String format) {
        HSSFCellStyle style = workBook.createCellStyle();
        style.setFont(font);
        style.setAlignment(align);
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        style.setDataFormat(dataFormat.getFormat(format));
        return style;
    }
   
    public static void createStringCell(HSSFRow row, short column, HSSFCellStyle cellStyle, String value) {
        HSSFCell cell = row.createCell(column);
        cell.setCellStyle(cellStyle);
        cell.setCellValue(new HSSFRichTextString(value));
    }
   
    public static void createNumberCell(HSSFRow row, short column, HSSFCellStyle cellStyle, double value) {
        HSSFCell cell = row.createCell(column);
        cell.setCellStyle(cellStyle);
        cell.setCellValue(value);
    }
   
    public static void createDateCell(HSSFRow row, short column, HSSFCellStyle cellStyle, Date value) {
        HSSFCell cell = row.createCell(column);
        cell.setCellStyle(cellStyle);
        cell.setCellValue(value);
    }
   
    public static void export() throws IOException {
        HSSFWorkbook workBook = new HSSFWorkbook();
        HSSFSheet sheet = workBook.createSheet();
        workBook.setSheetName(0, "sheet1");
       
        // 字体
        HSSFFont titleFont = workBook.createFont();
        titleFont.setFontHeightInPoints((short) 11);
        titleFont.setFontName("宋体");
        HSSFDataFormat dataFormat = workBook.createDataFormat();
       
        // 单元格样式
        HSSFCellStyle leftStyle = createCellStyle(workBook, titleFont, HSSFCellStyle.ALIGN_LEFT);
        HSSFCellStyle rightStyle = createCellStyle(workBook, titleFont, HSSFCellStyle.ALIGN_RIGHT);
        HSSFCellStyle wrapStyle = createWrapCellStyle(workBook, titleFont, HSSFCellStyle.ALIGN_LEFT, true);
        HSSFCellStyle dateStyle = createFormatCellStyle(workBook, titleFont, HSSFCellStyle.ALIGN_RIGHT, dataFormat, DATE_FORMAT);
        HSSFCellStyle moneyStyle = createFormatCellStyle(workBook, titleFont, HSSFCellStyle.ALIGN_RIGHT, dataFormat, MONEY_FORMAT);
       
        int rowIndex = 0;

        // excel标题行
        HSSFRow row = sheet.createRow(rowIndex);
        short index = (short) 0;
        for (int i = 0; i < 6; i ++) {
            createStringCell(row, index, leftStyle, "列标题" + i);
            sheet.setColumnWidth(index, (short) (20 * 256)); // 20个字符的宽度
            index++;
        }

        // 内容
        for (int i = 0; i < 10; i++) {
            row = sheet.createRow(++rowIndex);
            createStringCell(row, (short) 0, leftStyle, "26688135");
            createStringCell(row, (short) 1, wrapStyle, "这是简介");
            createNumberCell(row, (short) 2, moneyStyle, 100.05);
            createDateCell(row, (short) 3, dateStyle, new Date());
            createStringCell(row, (short) 4, wrapStyle, "第一行内容 /r/n第二行内容/r/n第三行内容"); // 使用/r/n,强制换行
            createNumberCell(row, (short) 5, rightStyle, 100);
        }
       
        // 输出
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("abc.xls"));
        workBook.write(bos);
        bos.close();
    }
}

参考文档:

官网主页:http://poi.apache.org/

很好的教程:http://poi.apache.org/spreadsheet/quick-guide.html

 

转载自 http://blog.csdn.net/caihaijiang/article/details/6381948

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java使用POI库可以实现对Excel文件的读取操作。具体的步骤如下: 1. 引用POI库。在Java项目中引入POI相关的jar包。 2. 创建文件输入流。使用FileInputStream类创建一个输入流对象,并指定要读取的Excel文件路径。 3. 创建工作簿对象。使用HSSFWorkbook类创建一个工作簿对象,将输入流作为参数传入。 4. 获取工作表。使用getSheetAt方法获取指定的工作表,可以通过工作表的索引或名称进行获取。 5. 获取行。使用getRow方法获取指定行的对象,行号作为参数传递给该方法。 6. 获取单元格。使用getCell方法获取指定单元格的对象,行号和列号作为参数传递给该方法。 7. 获取单元格的值。使用getStringCellValue方法获取单元格的值,将其赋给一个字符串变量。 8. 输出结果。使用System.out.println方法将获取到的数据打印出来。 需要注意的是,在读取Excel文件时可能会出现FileNotFoundException和IOException异常,需要进行异常处理。同时,在读取完成后,需要关闭输入流。 下面是一个示例代码,用于演示Java使用POI读取Excel文件: ```java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; 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; public class ExcelReader { public static void poiRead() { FileInputStream xlsStream = null; try { // 创建文件输入流 xlsStream = new FileInputStream(new File("C:\\Users\\itour\\Desktop\\poiTest.xls")); // 创建工作簿对象 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(xlsStream); // 获取工作表 HSSFSheet sheetAt = hssfWorkbook.getSheetAt(0); // 获取行 HSSFRow row = sheetAt.getRow(0); // 获取单元格 HSSFCell cell = row.getCell(0); // 获取单元格的值 String cellValue = cell.getStringCellValue(); System.out.println("获取到的数据是:" + cellValue); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (xlsStream != null) { try { xlsStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } } ``` 以上代码演示了如何使用POI库读取Excel文件中第一个工作表的第一个单元格的值。你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值