今日我们已经将权限模块与员工管理整合完毕,但下午有学习新的内容。将数据导出为excel表格,或从excel表格导入数据。这一项功能比较常用!在Windows平台下微软有为我们提供Office的COM套件,Apache为我们提供的poi正是为Java打造的Office套件。
微软的OfficeCOM套件与ApachePOI的用法十分相似,所以这部分内容对我来说比较容易。我想大家学习的都很轻松,因为它用起来十分简单。在我们开始之前需要先下载POI的jar包: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就比较多。我们在这就不一一详细列举了,Apache的POI的文档十分详细!
二、读取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(); } } |
用起来十分简单,明天还有好玩的!