目的:
java解析 excel 无非就是apache poi 或者 jxl 两者在使用上其实都差不多,关键还是看你自己熟悉那个,用那个!我也是初次接触jxl 看很多博客说 jxl只适用于处理小数据量 excel,或者说是功能比较单一的,实际上我看了jxl的包,发现其实用
好了,功能还是很强大的。
需要了解:支持 Reads data from Excel 95, 97, 2000, XP, and 2003 workbooks
jxl.read.biff.BiffException: Unable to recognize OLE stream 出现这个错误就是excel 2007格式不符合引起的
官网:http://jexcelapi.sourceforge.net/
java doc: http://jxl.sourceforge.net/javadoc/index.html
依赖管理:
<dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.12</version> </dependency>
UML大纲:
创建简单的excel:
1 @Test 2 public void testCreateExcel() { 3 try { 4 // 创建xls文件 5 file.createNewFile(); 6 // 2:创建工作簿 7 WritableWorkbook workbook = Workbook.createWorkbook(file); 8 9 // 3:创建sheet,设置第二三四..个sheet,依次类推即可 10 WritableSheet sheet = workbook.createSheet("测试", 0); 11 // 4:设置titles 12 String[] titles = { "编号", "账号"}; 13 // 5:给第一行设置列名 14 for (int i = 0; i < titles.length; i++) { 15 sheet.addCell(new Label(i, 0, titles[i])); 16 } 17 sheet.setHeader("aa", "cc", "cc"); 18 // 6:模拟数据库导入数据 注意起始行为1 19 for (int i = 1; i < 100; i++) { 20 //添加编号 21 sheet.addCell(new Label(0, i, new String("编号"+i))); 22 //添加密码 23 sheet.addCell(new Label(1, i, new String("编号"+i))); 24 } 25 workbook.write(); 26 workbook.close(); 27 } catch (IOException e) { 28 e.printStackTrace(); 29 } catch (RowsExceededException e) { 30 e.printStackTrace(); 31 } catch (WriteException e) { 32 e.printStackTrace(); 33 } 34 }
效果:
简单读取Excel:
1 @Test 2 public void testCreateExcel() { 3 try { 4 //1:创建workbook 5 Workbook workbook = Workbook.getWorkbook(file); 6 //2:获取第一个工作表sheet 7 Sheet sheet = workbook.getSheet(0); 8 //3:读取数据 9 System.out.println(sheet.getColumns()); 10 System.out.println(sheet.getRows()); 11 //4.自己注意行列关系 12 for (int i = 0; i < sheet.getRows(); i++) { 13 for (int j = 0; j < sheet.getColumns(); j++) { 14 Cell cell = sheet.getCell(j, i); 15 System.out.println(cell.getContents()); 16 } 17 } 18 } catch (BiffException | IOException e) { 19 e.printStackTrace(); 20 } 21 }