HSSFWorkbook读取97-2003格式 ,XSSFWorkbook读取2007-2013格式

  1. /**
  2. * 读取97-2003格式
  3. * @param filePath 文件路径
  4. * @throws java.io.IOException
  5. */
  6. public static List<Map> readExcel2003(String filePath) throws IOException{
  7. //返回结果集
  8. List<Map> valueList=new ArrayList<Map>();
  9. FileInputStream fis=null;
  10. try {
  11. fis=new FileInputStream(filePath);
  12. HSSFWorkbook wookbook = new HSSFWorkbook(fis);  // 创建对Excel工作簿文件的引用
  13. HSSFSheet sheet = wookbook.getSheetAt(0);   // 在Excel文档中,第一张工作表的缺省索引是0
  14. int rows = sheet.getPhysicalNumberOfRows(); // 获取到Excel文件中的所有行数­
  15. Map<Integer,String> keys=new HashMap<Integer, String>();
  16. int cells=0;
  17. // 遍历行­(第1行  表头) 准备Map里的key
  18. HSSFRow firstRow = sheet.getRow(0);
  19. if (firstRow != null) {
  20. // 获取到Excel文件中的所有的列
  21. cells = firstRow.getPhysicalNumberOfCells();
  22. // 遍历列
  23. for (int j = 0; j < cells; j++) {
  24. // 获取到列的值­
  25. try {
  26. HSSFCell cell = firstRow.getCell(j);
  27. String cellValue = getCellValue(cell);
  28. keys.put(j,cellValue);
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. }
  33. }
  34. // 遍历行­(从第二行开始)
  35. for (int i = 1; i < rows; i++) {
  36. // 读取左上端单元格(从第二行开始)
  37. HSSFRow row = sheet.getRow(i);
  38. // 行不为空
  39. if (row != null) {
  40. //准备当前行 所储存值的map
  41. Map<String, Object> val=new HashMap<String, Object>();
  42. boolean isValidRow = false;
  43. // 遍历列
  44. for (int j = 0; j < cells; j++) {
  45. // 获取到列的值­
  46. try {
  47. HSSFCell cell = row.getCell(j);
  48. String cellValue = getCellValue(cell);
  49. val.put(keys.get(j),cellValue);
  50. if(!isValidRow && cellValue!=null && cellValue.trim().length()>0){
  51. isValidRow = true;
  52. }
  53. } catch (Exception e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. //第I行所有的列数据读取完毕,放入valuelist
  58. if(isValidRow){
  59. valueList.add(val);
  60. }
  61. }
  62. }
  63. } catch (IOException e) {
  64. e.printStackTrace();
  65. }finally {
  66. fis.close();
  67. }
  68. return valueList;
  69. }
  1. /**
  2. * 读取2007-2013格式
  3. * @param filePath 文件路径
  4. * @return
  5. * @throws java.io.IOException
  6. */
  7. public static List<Map> readExcel2007(String filePath) throws IOException{
  8. List<Map> valueList=new ArrayList<Map>();
  9. FileInputStream fis =null;
  10. try {
  11. fis =new FileInputStream(filePath);
  12. XSSFWorkbook xwb = new XSSFWorkbook(fis);   // 构造 XSSFWorkbook 对象,strPath 传入文件路径
  13. XSSFSheet sheet = xwb.getSheetAt(0);            // 读取第一章表格内容
  14. // 定义 row、cell
  15. XSSFRow row;
  16. // 循环输出表格中的第一行内容   表头
  17. Map<Integer, String> keys=new HashMap<Integer, String>();
  18. row = sheet.getRow(0);
  19. if(row !=null){
  20. //System.out.println("j = row.getFirstCellNum()::"+row.getFirstCellNum());
  21. //System.out.println("row.getPhysicalNumberOfCells()::"+row.getPhysicalNumberOfCells());
  22. for (int j = row.getFirstCellNum(); j <=row.getPhysicalNumberOfCells(); j++) {
  23. // 通过 row.getCell(j).toString() 获取单元格内容,
  24. if(row.getCell(j)!=null){
  25. if(!row.getCell(j).toString().isEmpty()){
  26. keys.put(j, row.getCell(j).toString());
  27. }
  28. }else{
  29. keys.put(j, "K-R1C"+j+"E");
  30. }
  31. }
  32. }
  33. // 循环输出表格中的从第二行开始内容
  34. for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getPhysicalNumberOfRows(); i++) {
  35. row = sheet.getRow(i);
  36. if (row != null) {
  37. boolean isValidRow = false;
  38. Map<String, Object> val = new HashMap<String, Object>();
  39. for (int j = row.getFirstCellNum(); j <= row.getPhysicalNumberOfCells(); j++) {
  40. XSSFCell cell = row.getCell(j);
  41. if (cell != null) {
  42. String cellValue = null;
  43. if(cell.getCellType()==XSSFCell.CELL_TYPE_NUMERIC){
  44. if(DateUtil.isCellDateFormatted(cell)){
  45. cellValue = new DataFormatter().formatRawCellContents(cell.getNumericCellValue(), 0, "yyyy-MM-dd HH:mm:ss");
  46. }
  47. else{
  48. cellValue = String.valueOf(cell.getNumericCellValue());
  49. }
  50. }
  51. else{
  52. cellValue = cell.toString();
  53. }
  54. if(cellValue!=null&&cellValue.trim().length()<=0){
  55. cellValue=null;
  56. }
  57. val.put(keys.get(j), cellValue);
  58. if(!isValidRow && cellValue!= null && cellValue.trim().length()>0){
  59. isValidRow = true;
  60. }
  61. }
  62. }
  63. // 第I行所有的列数据读取完毕,放入valuelist
  64. if (isValidRow) {
  65. valueList.add(val);
  66. }
  67. }
  68. }
  69. } catch (IOException e) {
  70. e.printStackTrace();
  71. }finally {
  72. fis.close();
  73. }
  74. return valueList;
  75. }
  76. /**
  77. * 文件操作 获取文件扩展名
  78. *
  79. * @Author: sunny
  80. * @param filename
  81. *            文件名称包含扩展名
  82. * @return
  83. */
  84. public static String getExtensionName(String filename) {
  85. if ((filename != null) && (filename.length() > 0)) {
  86. int dot = filename.lastIndexOf('.');
  87. if ((dot > -1) && (dot < (filename.length() - 1))) {
  88. return filename.substring(dot + 1);
  89. }
  90. }
  91. return filename;
  92. }

HSSFWorkbook和XSSFWorkbook的区别的更多相关文章

  1. Java HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述

    Java HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述 一.HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述 用Java ...

  2. 关于poi导出excel方式HSSFWorkbook(xls).XSSFWorkbook(xlsx).SXSSFWorkbook.csv的总结

    1.HSSFWorkbook(xls) import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermo ...

  3. HSSFWorkbook 与 XSSFWorkbook

    刚开始使用new HSSFWorkbook(new FileInputStream(excelFile))来读取Workbook,对Excel2003以前(包括2003)的版本没有问题,但读取Exce ...

  4. [转载]Java读取Excel中的单元格数据

    目前网上能找到的读取Excel表格中数据的两种比较好的方案:PageOffice好用开发效率高:POI免费.供大家参考,针对具体情况选择具体方案. 1. PageOffice读取excel impor ...

  5. POI操作Excel的三种Workbook的发展和区别

    POI的一些使用方法: 创建流程:(上级为下级的载体) 1.创建Workbook(工作薄): 2.创建Sheet(表单,可以创建多个): 3.创建Row(行): 4.创建Cell(单元格) 接下来分别 ...

  6. java使用poi(XSSFWorkbook)读取excel(.xlsx)文件

    经过一番搜索发现,java操纵excel文件常用的有jxl和poi两种方式,孰好孰坏看自己需求而定.其中最主要的区别在于jxl不支持.xlsx,而poi支持.xlsx这里介绍的使用poi方式(XSSF ...

  7. Java使用POI的SXSSFWorkbook与HSSFWorkbook导出复杂表头

    一.HSSFWorkbook与SXSSFWorkbook的区别: HSSFWorkbook是对Excel2003以前的版本进行操作的,即后缀名为.xls SXSSFWorkbook时对Excel200 ...

  8. Asp.Net Core(.net内核)

    Asp.Net Core(.net内核) //----------------Day1----------------一章    Web基本原理 1节课程说明 web窗体--设计界面--加法使用Chr ...

  9. Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要

    Java_POI之MS-Excel2003(扩展名.xls)升级至MS-Excel2007及以上版本(扩展名.xlsx)技术过程概要 作者:Eric.Zhang(花名:穿越者7号) 日期:2015年1 ...

随机推荐

  1. SZU:D89 The Settlers of Catan

    Judge Info Memory Limit: 65536KB Case Time Limit: 3000MS Time Limit: 3000MS Judger: Number Only Judg ...

  2. android中自定义Theme以及TitleBar

    1.自定义Theme. 在res/values/styles.xml中的resources块中添加如下代码: <style name="StatusBarBackground" ...

  3. linux内核数据结构之链表

    linux内核数据结构之链表 1.前言 最近写代码需用到链表结构,正好公共库有关于链表的.第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域.后来看代码注释发现该 ...

  4. mac 下nginx加入开机启动

    通过brew install nginx后设置开机启动项 sudo cp /usr/local/opt/nginx/*.plist /Library/LaunchDaemonssudo launchc ...

  5. 不是技术牛人,如何拿到国内IT巨头的Offer【转】

    转:http://blog.csdn.net/lsldd/article/details/13506263 不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些牛人 ...

  6. mac os 上安装mysqldb血泪史

    昨天下午在mac上安装mysql-python一直未遂今天查了很多资料终于成功了 最后还是在stackoverflow点击打开链接(好网站啊,一般有什么技术问题在这都能找到)上找到了答案,废话少数: ...

  7. 替换__thread的一种方式,实现TLS功能

    TLS是由于多线程编程带来的产物,主要是为了解决线程资源局部化,具体内容网上有很多介绍.有很多地方已经支持了该功能,但有些地方没有,下面是GCC的一些介绍,反正具体看实际使用情况: 5.51 Thre ...

  8. 空格&nbsp在不同浏览器中显示距离不一致问题解决方法

      在ie.firefox.chrome浏览器上显示的效果不太一样,主要是前面的空格宽度不同. 网上资料说不同的浏览器会有不同的默认字体,一般 IE默认字体都是宋体,而firefox和chrome的默 ...

  9. asp.net做的网站账号登陆后注销不管用了

    最近做了个项目用到了数据库登录,A登陆后把登录状态保,个人信息存在Session里,但是奇怪的是,只要有一个用户登录后在其他电脑上打开上述页面,则也显示A登录状态,注销也不管用了.以前还号的.求大神啊 ...

  10. poj1872A Dicey Problem

    Home Problems Status Contest     284:28:39 307:00:00   Overview Problem Status Rank A B C D E F G H ...