解析Excel文件 Apache POI框架使用
2018-07-27 06:23:20来源:博客园 阅读 ()
本文整理了,使用Apache POI 框架解析、读取Excel文件,过程中,程序代码出现的一些问题,并解决
1、.xls 和 .xlsx
我们知道Excel文档,在Windows下,分为Excel2003 和 Excel2007.两者有一些区别,最直观的,就是后缀名不一样,分别是 .xls 和 .xlsx
使用Apache POI 解析时,需要区别对待。用不同的API去解析。
但是,却也提供了一个,统一去解析的API,那就是 org.apache.poi.ss.usermodel.WorkbookFactory;
开发,运行的时候,需要导入这样的几个 .jar 包
不然,就会出问题:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlObject
这个错误是由于POI包是默认不支持excel2007操作的,要加入一个xmlbeans的包xbean.jar
使用POI库,在实例化XSSFWorkbook对象时,报 Java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlOptions 的错误,经检查,是因为官方包里默认是不包含xmlbean.jar包的,需要自己添加xmlbeans.jar这个包
public void parseXml(String filename) { Workbook wb = null; try { wb = WorkbookFactory.create(new File(filename)); Sheet sheet = wb.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { System.out.print(getCellValue(cell) + "---"); save(getCellValue(cell) + "---"); } System.out.println(); } } catch (EncryptedDocumentException e) { e.printStackTrace(); } catch (InvalidFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (org.apache.poi.openxml4j.exceptions.InvalidFormatException e) { e.printStackTrace(); } }
2、解析文件时出现:lang.RuntimeException: Unexpected record type (org.apache.poi.hssf.record.DefaultRowHeightRecord)
解决:excel打开另存一下就可以了
3、一个可以遍历,解析文件夹下,全部Excel文件内容的代码
解析的内容,保存到了一个 .txt 文件中
已调试通过,如下:
public class ParseExcel { public static void main(String[] args) throws IOException { String path = "C:\\Users\\文件夹目录路径\\Desktop\\a01hos\\img"; File f = new File(path); File[] files = f.listFiles(); System.out.println(files.length); File[] filesxls = f.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { if (name.endsWith(".xls") || name.endsWith(".xlsx")) { return true; } return false; } }); System.out.println("Excel文件有: " + filesxls.length); for (File f2 : filesxls) { String fileDirectPathName = f2.getCanonicalPath(); System.out.println(fileDirectPathName); // System.out.println("文件名: " + f2.getName()); new ParseExcel().parseXml(fileDirectPathName); } } public void parseXml(String filename) { Workbook wb = null; try { wb = WorkbookFactory.create(new File(filename)); Sheet sheet = wb.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { System.out.print(getCellValue(cell) + "---"); save(getCellValue(cell) + "---"); } System.out.println(); } } catch (EncryptedDocumentException e) { e.printStackTrace(); } catch (InvalidFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (org.apache.poi.openxml4j.exceptions.InvalidFormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public Object getCellValue(Cell cell) { int type = cell.getCellType(); String show = null; switch (type) { case Cell.CELL_TYPE_BLANK:// 空值 show = null; break; case Cell.CELL_TYPE_BOOLEAN:// Boolean show = String.valueOf(cell.getBooleanCellValue()); break; case Cell.CELL_TYPE_ERROR:// 故障 show = String.valueOf(cell.getErrorCellValue()); break; case Cell.CELL_TYPE_FORMULA:// 公式 show = cell.getCellFormula(); break; case Cell.CELL_TYPE_NUMERIC:// 数字 show = String.valueOf(cell.getNumericCellValue()); break; case Cell.CELL_TYPE_STRING:// 字符串 show = cell.getStringCellValue(); break; default: show = null; } return show; } /** * 保存字符串到文本中 * * @param str */ public boolean save(String str) { boolean flag = false; // 声明操作标记 String fileName = "file/test.txt"; // 定义文件名 File f = new File(fileName); if(!f.exists()){ try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } FileWriter fw = null; // 用来写入字符文件的便捷类 PrintWriter out = null; // 向文本输出流打印对象的格式化表示形式类 try { fw = new FileWriter(f, true); // 创建一个FileWriter out = new PrintWriter(fw); // 创建一个PrintWriter,以追加方式将内容插入到最后一行 out.println(str); // 将字符串打印到文本中 out.flush(); // 刷新缓存 flag = true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { // 关闭PrintWriter if (out != null) { out.close(); out = null; } // 关闭FileWriter if (fw != null) { fw.close(); fw = null; } } catch (IOException e) { e.printStackTrace(); } } return flag; } }
Donate捐赠
如果我的文章帮助了你,可以赞赏我 6.66 元给我支持,让我继续写出更好的内容)
(微信) (支付宝)
微信/支付宝 扫一扫
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- JVM常见面试题解析 2020-06-11
- Spire.Cloud.SDK for Java 合并、拆分Excel单元格 2020-06-09
- 深入解析ThreadLocal和ThreadLocalMap 2020-06-08
- 「starter推荐」简单高效Excel 导出工具 2020-06-08
- Spring Boot 实现配置文件加解密原理 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash