2010-02-07传智播客——教育办公系统 (八)

         今日我们已经将权限模块与员工管理整合完毕,但下午有学习新的内容。将数据导出为excel表格,或从excel表格导入数据。这一项功能比较常用!在Windows平台下微软有为我们提供OfficeCOM套件,Apache为我们提供的poi正是为Java打造的Office套件。

 

         微软的OfficeCOM套件与ApachePOI的用法十分相似,所以这部分内容对我来说比较容易。我想大家学习的都很轻松,因为它用起来十分简单。在我们开始之前需要先下载POIjar包:http://poi.apache.org/

 

一、POI(或OfficeCOM)结构

         首先想一下Microsoft Excel 的工作表,它的结构是什么?想想...

 

         哦,首先有一个以xls为后缀名的文件,打开文件看到多个sheet(表单),每个表单中有无数个单元格。

 

         OK,通过上面一断话,我们找出了三个核心单元,由广入微依次为:*.xls文件、sheet表单、单元格。我们使用Office套件正是以这三个核心单元为操作主体。

        

二、创建excel文件

         我们在创建excel文件时,需要先创建*.xls文件(在POI中为Workbook),然后创建Sheet,然后创建row(cells)

package cn.itcast.cc.excel.exports;

 

import java.io.FileOutputStream;

import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.usermodel.IndexedColors;

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;

 

/**

 * 测试类,每个方法都是独立的。

 * @author Administrator

 *

 */

public class ExportExcel {

 

       /**

        * 测试WorkBook

        * @throws Exception

        */

       @Test

       public void testCreateExcel() throws Exception{

              // 创建Workbook

              Workbook wb = new HSSFWorkbook();

              FileOutputStream fileOut = new FileOutputStream("C:/workbook.xls");

              // 写出到文件

              wb.write(fileOut);

              fileOut.close();

       }

      

       /**

        * 测试Sheet

        * @throws Exception

        */

       @Test

       public void testCreateSheet() throws Exception{

              Workbook wb = new HSSFWorkbook();

              FileOutputStream fileOut = new FileOutputStream("C:/workbook.xls");

              // 创建sheet

              Sheet sheet = wb.createSheet("HelloWorld!");

              // 设置第1列宽度,列号以0开始。

              sheet.setColumnWidth(0,10000);        

              wb.write(fileOut);

              fileOut.close();

       }

      

       /**

        * 测试Cell

        * @throws Exception

        */

       @Test

       public void testCreateCell() throws Exception{

              Workbook wb = new HSSFWorkbook();

              FileOutputStream fileOut = new FileOutputStream("C:/workbook.xls");

              // 创建sheet

              Sheet sheet = wb.createSheet("HelloWorld!");

              // 设置第1列宽度

              sheet.setColumnWidth(0,10000);

              // 创建一行,行号以0开始。

              Row row = sheet.createRow(0);

              // 单元格的样式属性

           CellStyle style = wb.createCellStyle();

           // 底边表格线

           style.setBorderBottom(CellStyle.BORDER_DOUBLE);

           style.setBottomBorderColor(IndexedColors.RED.getIndex());

           style.setDataFormat(wb.getCreationHelper().createDataFormat().getFormat("m/d/yy h:mm"));

              // 创建一个单元格,参数为列号。

           Cell cell = row.createCell(0);

           cell.setCellStyle(style);

           // 向单元格中添加各种类型数据

           cell.setCellValue(new Date());

           row.createCell(1).setCellValue(1.1);

           row.createCell(2).setCellValue("文本型");

           row.createCell(3).setCellValue(true);

           row.createCell(4).setCellType(HSSFCell.CELL_TYPE_ERROR);

          

           wb.write(fileOut);

              fileOut.close();

       }

}

         通过上面可见,我们必须一个单元格一个单元格的创建并添加数据。在实际应用中,尤其是办公应用,经常需要将数据导出为excel文件,我们可以通过POI实现。还有很多的行业软件使用专业的报表组件而非excel文件,那时我们就需要使用那个报表组件为我们提供的API才能实现对数据的导出或打印操作。

 

         我们知道单元格的属性比较多,如边框和字体等,所以对cell操作的API就比较多。我们在这就不一一详细列举了,ApachePOI的文档十分详细!

 

二、读取excel文件

         我们创建excel文件时需要一个单元格一个单元格的创建并添加数据,同样我们读取excel文件时也需要一个一个单元格的读取。某些情况下,需要将excel文件中的数据导入到数据库中。注意此时的excel文件中表格格式必须是指定格式。

 

package cn.itcast.cc.excel.imports;

 

import java.io.FileInputStream;

import java.io.InputStream;

import java.util.Iterator;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.ss.usermodel.WorkbookFactory;

import org.junit.Test;

 

/**

 * 测试类

 * @author Administrator

 *

 */

public class ImportExcel {

      

       /**

        * 读取excel文件

        * @throws Exception

        */

       @Test

       public void testReadExcel() throws Exception {

              // 读入文件

              InputStream inp = new FileInputStream("C:/workbook.xls");

              Workbook wb = WorkbookFactory.create(inp);

              // 获取Sheet,索引从0开始。

              Sheet sheet = wb.getSheetAt(0);

              // 遍历所有Row

              for(Iterator<Row> items = sheet.rowIterator(); items.hasNext();){

                     Row row = items.next();

                     // 我们本可以使用row.cellIterator()遍历每一个Cell,但我们需要获取具体类型的数据

                     System.out.println(row.getCell(0).getDateCellValue());

                     System.out.println(row.getCell(1).getNumericCellValue());

                     System.out.println(row.getCell(2).getStringCellValue());

                     System.out.println(row.getCell(3).getBooleanCellValue());

                     System.out.println(row.getCell(4).getCellType());

              }

              // 关闭文件

              inp.close();

       }

}

 

         用起来十分简单,明天还有好玩的!

 

你可能感兴趣的:(2010-02-07传智播客——教育办公系统 (八))