前言
用户模块:本文主要的知识点有以下:
- 使用POI来操作Excel,对数据进行导入和导出
- 对用户进行唯一性校验,不能同时出现相同的用户
POI基础
再次回到我们的用户模块上,我们发现还有两个功能没有完成:
这里写图片描述
对于将网页中的数据导入或导出到excel文件中,我们是完全没有学习过的。但是呢,在Java中操作excel是相对常用的,因此也有组件供我们使用
JAVA中操作Excel的有两种比较主流的工具包
- JXL
- POI
这次我们主要学习的是POI操作excel。
JXL有一个缺陷,只能操作03或以前版本的excel,而POI可以操作97-07版本的。
面向对象看excel
首先,要用Java来操作excel的话,肯定用对象来指定excel相关的内容的。我们来看看excel由什么组成:
这里写图片描述
POI是这样看的:
- 整个excel称作为工作薄
- 工作薄下可以创建很多张表,称作为工作表
- 工作表有非常多的行
- 行又可细分单元格【指定行的列就可以定位到工作表任意的位置了】
给我们一顿分析以后,我们发现它们之间是有从属关系的:
- 工作表从属于工作薄
- 行从属于工作表
- 单元格从属于行
操作Excel步骤
导入POI开发包:
- poi-ooxml-3.10.1-20140818.jar,
- poi-ooxml-schemas-3.10.1-20140818.jar,
- 以及复制在ooxml-lib目录下的xmlbeans-2.6.0.jar,dom4j-1.6.1.jar【dom4j一般在项目导入的时候已经存在了】。
- poi-ooxml-3.11-20141221.jar
/** * 使用POI1无非操作Excel无非就4个步骤: * * 创建/读取工作薄 * 创建/读取工作表 * 创建/读取行 * 创建/读取单元格 * * * */
创建Excel并写入数据
@Test public void testWrite() throws IOException { //创建工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); //创建工作表 HSSFSheet sheet = workbook.createSheet("我是新的工作表"); //创建行,坐标从0开始,我创建的是第三行 HSSFRow row = sheet.createRow(2); //创建单元格,坐标也是从0开始,于是就是第三行第三列 HSSFCell cell = row.createCell(2); //往单元格写数据 cell.setCellValue("helloWorld"); //把工作薄写到硬盘中 FileOutputStream outputStream = new FileOutputStream("C:\\工作薄.xls"); workbook.write(outputStream); //关闭流 workbook.close(); outputStream.close(); }
这里写图片描述这里写图片描述
读取Excel的数据
@Test public void testRead() throws IOException { //获取输入流,读取Excel数据 FileInputStream inputStream = new FileInputStream("C:\\工作薄.xls"); //创建工作薄 HSSFWorkbook workbook = new HSSFWorkbook(inputStream); //得到工作表 HSSFSheet sheet = workbook.getSheetAt(0); //得到行 HSSFRow row = sheet.getRow(2); //得到单元格 HSSFCell cell = row.getCell(2); //得到单元格的数据 String cellValue = cell.getStringCellValue(); System.out.println(cellValue); }
这里写图片描述这里写图片描述
03与07版本
- 03版本使用的是HSSFWorkbook这么一个类来操作03的Excel数据
- 07版本使用的是XSSFWorkbook这么一个类来操作07的Excel数据
其实他们的方法都是一样的,仅仅是类的不同。而使用哪个对象,我们可以根据后缀名来判断创建哪个对象【是03还是07】
@Test public void testRead03And07Excel() throws Exception { String fileName = "D:\\itcast\\测试.xlsx"; if(fileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){//判断是否excel文档 boolean is03Excel = fileName.matches("^.+\\.(?i)(xls)$"); FileInputStream inputStream = new FileInputStream(fileName); //1、读取工作簿 Workbook workbook = is03Excel ?new HSSFWorkbook(inputStream):new XSSFWorkbook(inputStream); //2、读取第一个工作表 Sheet sheet = workbook.getSheetAt(0); //3、读取行;读取第3行 Row row = sheet.getRow(2); //4、读取单元格;读取第3行第3列 Cell cell = row.getCell(2); System.out.println("第3行第3列单元格的内容为:" + cell.getStringCellValue()); workbook.close(); inputStream.close(); } }