您的位置:首页 > 其它

POI操作EXCEL

2016-05-14 16:15 459 查看
Jakarta POI 是一套用于访问微软格式文档的Java API。

Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于早在Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。它的官方首页是:http://jakarta.apache.org/poi/hssf/index.html,这里可以下载到它的最新版本和文档。

下面就来看看如何通过Jakarta POI的HSSF操作Excel文件。

操作Excel文件的步骤同JXL类似(关于如何用JXL操作Excel可以看我的另外两篇文章)。

HSSF对Excel的操作主要是通过下面几个对象实现:

HSSFWorkbook    工作簿对象对应于Excel文件

HSSFSheet       Sheet对象对应于Excel中的Sheet

HSSFRow         行对象表示Sheet中的一行(这个对象在JXL中并没有提供)

HSSFCell        单元格对象

操作步骤就是用HSSFWorkbook打开或者创建“Excel文件对象”,用HSSFWorkbook对象返回或者创建Sheet对象,用Sheet对象返回行对象,用行对象得到Cell对象,有了Cell对象就随你读写了。下面来看一个动态生成Excel文件的例子:

//创建HSSFWorkbook对象

HSSFWorkbook wb = new HSSFWorkbook();

//创建HSSFSheet对象

HSSFSheet sheet = wb.createSheet("sheet0");

//创建HSSFRow对象

HSSFRow row = sheet.createRow((short)0);

//创建HSSFCell对象

HSSFCell cell=row.createCell((short)0);

//用来处理中文问题

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

//设置单元格的值

cell.setCellValue("单元格中的中文");

//定义你需要的输出流

OutputStream out = new FileOutputStream("viwo.xls");

//输出Excel

wb.write(out);

out.flush();

HSSF读取文件同样还是使用这几个对象,只是把相应的createXXX方法变成了getXXX方法即可。

只要理解了其中原理,不管是读还是写亦或是特定格式都可以轻松实现,正所谓知其然更要知其所以然。

最后附上HSSF官方的QuickGuide:《Busy Developers' Guide to HSSF Features》,虽然是英文的但还是很容易理解的。
http://jakarta.apache.org/poi/hssf/quick-guide.html
一、示例1:

Java代码  

package com.cplatform.contants;  
  
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.HSSFRow;     
import org.apache.poi.hssf.usermodel.HSSFSheet;     
import org.apache.poi.hssf.usermodel.HSSFWorkbook;     
import org.apache.poi.hssf.util.HSSFColor;     
  
public class A {     
    /**  
     * HSSFWorkbook excell的文档对象 HSSFSheet excell的表单 HSSFRow excell的行 HSSFCell  
     * excell的格子单元 HSSFFont excell字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader  
     * sheet头 HSSFFooter sheet尾 HSSFCellStyle cell样式  
     */   
    public static void main(String[] args) throws IOException {     
        HSSFWorkbook wb = new HSSFWorkbook();     
        // 建立新HSSFWorkbook对象     
        HSSFSheet sheet = wb.createSheet("new sheet");     
        // 建立新的sheet对象     
        // Create a row and put some cells in it.Rows are 0 based.     
        HSSFRow row = sheet.createRow((short) 0);     
        // 建立新行     
        // Create a cell and put a value in it.     
        HSSFCell cell = row.createCell((short) 0);     
        // 建立新cell     
        cell.setCellValue(1);// 设置cell的整数类型的值     
        // Or do it on one line.     
        row.createCell((short) 1).setCellValue(1.2);     
        // 设置cell浮点类型的值     
        row.createCell((short) 2).setCellValue("test");     
        // 设置cell字符类型的值     
        row.createCell((short) 3).setCellValue(true);     
        // 设置cell布尔类型的值     
        HSSFCellStyle cellStyle = wb.createCellStyle();     
        // 建立新的cell样式     
        cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));     
        // 设置cell样式为定制的日期格式     
        HSSFCell dCell = row.createCell((short) 4);     
        dCell.setCellValue(new Date());     
  
4000
      // 设置cell为日期类型的值     
        dCell.setCellStyle(cellStyle);     
        // 设置该cell日期的显示格式     
        HSSFCell csCell = row.createCell((short) 5);     
        csCell.setEncoding(HSSFCell.ENCODING_UTF_16);     
        // 设置cell编码解决中文高位字节截断     
        csCell.setCellValue("中文测试_Chinese Words Test");     
  
        // 设置背景色     
        HSSFCellStyle style = wb.createCellStyle();     
        style     
                .setFillForegroundColor(new HSSFColor.GREY_25_PERCENT()     
                        .getIndex());     
        style     
                .setFillBackgroundColor(new HSSFColor.GREY_25_PERCENT()     
                        .getIndex());     
        style.setFillPattern(HSSFCellStyle.SPARSE_DOTS);     
        HSSFCell cell1 = row.createCell((short) 6);     
        cell1.setCellValue("X");     
        cell1.setCellStyle(style);     
  
        // 设置背景色     
        HSSFCellStyle style1 = wb.createCellStyle();     
        style1.setFillForegroundColor(new HSSFColor.GREY_40_PERCENT()     
                .getIndex());     
        style1.setFillBackgroundColor(new HSSFColor.GREY_40_PERCENT()     
                .getIndex());     
        style1.setBorderBottom((short) 1);     
        style1.setBorderTop((short) 1);     
        style1.setBorderLeft((short) 1);     
        style1.setBorderRight((short) 1);     
        /**  
         * 注意这句代码, style1.setFillPattern, 如果你在你的程序中不设置fill pattern,那么  
         * 你上面设置的前景色和背景色就显示不出来. 
         */   
        style1.setFillPattern(HSSFCellStyle.SPARSE_DOTS);     
        HSSFCell cell11 = row.createCell((short) 7);     
        cell11.setCellValue("X11");     
        cell11.setCellStyle(style1);     
  
        // 数字格式化     
        HSSFCellStyle st = wb.createCellStyle();     
        // 建立新的cell样式     
        st.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0"));     
        HSSFCell cell12 = row.createCell((short) 8);     
        cell12.setCellValue((double) 10000000);     
        cell12.setCellStyle(st);    
  
cell12 .setEncoding(HSSFCell.ENCODING_UTF_16);//设置cell编码解决中文高位字节截断  
  
cell12 .setCellValue("中文测试_Chinese Words Test");//设置中西文结合字符串  
  
        row.createCell((short) 9).setCellType(HSSFCell.CELL_TYPE_ERROR);     
        // 建立错误cell     
        // Write the output to a file     
        FileOutputStream fileOut = new FileOutputStream("D:/workbook.xls");     
        wb.write(fileOut);     
        fileOut.close();     
    }     
}  
  
二、示例2:  
  
package com.cplatform.contants;  
  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.util.Calendar;  
  
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.HSSFRow;  
import org.apache.poi.hssf.usermodel.HSSFSheet;  
import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  
/** */  
/** 
* 生成导出Excel文件对象 
*  
* @author John.Zhu 
*/  
public class XLSExport {  
  
// 设置cell编码解决中文高位字节截断  
private static short XLS_ENCODING = HSSFWorkbook.ENCODING_UTF_16;  
  
// 定制日期格式  
private static String DATE_FORMAT = " m/d/yy "; // "m/d/yy h:mm"  
  
// 定制浮点数格式  
private static String NUMBER_FORMAT = " #,##0.00 ";  
  
private String xlsFileName;  
  
private HSSFWorkbook workbook;  
  
private HSSFSheet sheet;  
  
private HSSFRow row;  
  
/** */  
/** 
* 初始化Excel 
*  
* @param fileName 
*            导出文件名 
*/  
public XLSExport(String fileName) {  
   this.xlsFileName = fileName;  
   this.workbook = new HSSFWorkbook();  
   this.sheet = workbook.createSheet();  
}  
  
/** */  
/** 
* 导出Excel文件 
*  
* @throws XLSException 
*/  
public void exportXLS() throws Exception {  
   try {  
    FileOutputStream fOut = new FileOutputStream(xlsFileName);  
    workbook.write(fOut);  
    fOut.flush();  
    fOut.close();  
   }  
   catch (FileNotFoundException e) {  
    throw new Exception(" 生成导出Excel文件出错! ", e);  
   }  
   catch (IOException e) {  
    throw new Exception(" 写入Excel文件出错! ", e);  
   }  
  
}  
  
/** */  
/** 
* 增加一行 
*  
* @param index 
*            行号 
*/  
public void createRow(int index) {  
   this.row = this.sheet.createRow(index);  
}  
  
/** */  
/** 
* 设置单元格 
*  
* @param index 
*            列号 
* @param value 
*            单元格填充值 
*/  
public void setCell(int index, String value) {  
   HSSFCell cell = this.row.createCell((short) index);  
   cell.setCellType(HSSFCell.CELL_TYPE_STRING);  
   cell.setEncoding(XLS_ENCODING);  
   cell.setCellValue(value);  
}  
  
/** */  
/** 
* 设置单元格 
*  
* @param index 
*            列号 
* @param value 
*            单元格填充值 
*/  
public void setCell(int index, Calendar value) {  
   HSSFCell cell = this.row.createCell((short) index);  
   cell.setEncoding(XLS_ENCODING);  
   cell.setCellValue(value.getTime());  
   HSSFCellStyle cellStyle = workbook
b2a1
.createCellStyle(); // 建立新的cell样式  
   cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(DATE_FORMAT)); // 设置cell样式为定制的日期格式  
   cell.setCellStyle(cellStyle); // 设置该cell日期的显示格式  
}  
  
/** */  
/** 
* 设置单元格 
*  
* @param index 
*            列号 
* @param value 
*            单元格填充值 
*/  
public void setCell(int index, int value) {  
   HSSFCell cell = this.row.createCell((short) index);  
   cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);  
   cell.setCellValue(value);  
}  
  
/** */  
/** 
* 设置单元格 
*  
* @param index 
*            列号 
* @param value 
*            单元格填充值 
*/  
public void setCell(int index, double value) {  
   HSSFCell cell = this.row.createCell((short) index);  
   cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);  
   cell.setCellValue(value);  
   HSSFCellStyle cellStyle = workbook.createCellStyle(); // 建立新的cell样式  
   HSSFDataFormat format = workbook.createDataFormat();  
   cellStyle.setDataFormat(format.getFormat(NUMBER_FORMAT)); // 设置cell样式为定制的浮点数格式  
   cell.setCellStyle(cellStyle); // 设置该cell浮点数的显示格式  
}  
  
public static void main(String[] args) {  
   System.out.println(" 开始导出Excel文件 ");  
   XLSExport e = new XLSExport("d:/test.xls");  
   e.createRow(0);  
   e.setCell(0, " 编号 ");  
   e.setCell(1, " 名称 ");  
   e.setCell(2, " 日期 ");  
   e.setCell(3, " 金额 ");  
   e.createRow(1);  
   e.setCell(0, 1);  
   e.setCell(1, " 工商银行 ");  
   e.setCell(2, Calendar.getInstance());  
   e.setCell(3, 111123.99);  
   e.createRow(2);  
   e.setCell(0, 2);  
   e.setCell(1, " 招商银行 ");  
   e.setCell(2, Calendar.getInstance());  
   e.setCell(3, 222456.88);  
   try {  
    e.exportXLS();  
    System.out.println(" 导出Excel文件[成功] ");  
   }  
   catch (Exception e1) {  
    System.out.println(" 导出Excel文件[失败] ");  
    e1.printStackTrace();  
   }  
}  
  
}   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  POI操作EXCEL poi