1.导入Jar包:poi-3.8-20120326.jar、poi-ooxml-3.8-20120326.jar、poi-ooxml-schemas-3.8-20120326.jar、xbean.jar、dom4j-1.6.1.jar
类开始================
package servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
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.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ReadExcleTest {
 public static void main(String[] args) {
  String path = "E:/yy.xls";
  //String path = "E:/yy.xlsx";
  Map<String, List<String[]>> map = getExcle(path);
  List<String[]> list = map.get("Sheet1");
  for (int i = 0; i < list.size(); i++) {
   String[] str = list.get(i);
   for (int j = 0; j < str.length; j++) {
    System.out.print(str[j] + "   |   ");
   }
   System.out.println("");
  }
 }
 /**
  *获得excle的数据
  *
  * @param pathname
  * @return
  */
 public static Map<String, List<String[]>> getExcle(String pathname) {
  InputStream fs = null;
  Workbook wb = null;
  Map<String, List<String[]>> map = new HashMap<String, List<String[]>>();
  try {
   // excle的类型
   String readType = pathname.substring(pathname.lastIndexOf("."));
   File file = new File(pathname);
   if (file.exists()) {
    fs = new FileInputStream(file);
   } else {
    System.out.println("文件不存在!");
   }
   if (readType.equals(".xls")) {
    wb = new HSSFWorkbook(fs);
   } else  {
    wb = new XSSFWorkbook(fs);
   }
   map = getExcleData_xls(wb);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return map;
 }
 /**
  * 获得excle xls格式的数据
  *
  * @param wb
  * @return
  */
 public static Map<String, List<String[]>> getExcleData_xls(Workbook wb) {
  Map<String, List<String[]>> map = new HashMap<String, List<String[]>>();
  try {
   if (wb != null) {
    // sheet个数
    int numSheet = wb.getNumberOfSheets();
    for (int i = 0; i < numSheet; i++) {
     Sheet sheet = wb.getSheetAt(i);
     String sheetname = sheet.getSheetName();
     List<String[]> listData = getSheetData(sheet); // 读取sheet里的数据
     listData = setMergedRegion(sheet, listData);
     map.put(sheetname, listData);
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return map;
 }
 /**
  * 获得sheet 里的数据
  *
  * @param sheet
  * @return
  */
 public static List<String[]> getSheetData(Sheet sheet) {
  List<String[]> listData = new ArrayList<String[]>();
  try {
   if (sheet != null) {
    for (int i = 0; i <= sheet.getLastRowNum(); i++) {
     Row row = sheet.getRow(i);
     String[] rowData = getRowData(row);
     listData.add(rowData);
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return listData;
 }
 /**
  * 获得row 的数据
  *
  * @param row
  * @return
  */
 public static String[] getRowData(Row row) {
  String[] rowData = null;
  try {
   if (row != null) {
    int numcell = row.getLastCellNum();
    rowData = new String[numcell];
    for (int i = 0; i < numcell; i++) {
     Cell cell = row.getCell(i);
     rowData[i] = getCellData(cell);
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return rowData;
 }
 /**
  * 获得单元格的值
  * @param cell
  * @return
  */
 public static String getCellData(Cell cell) {
  String value = null;
  try {
   if (cell != null) {
    switch (cell.getCellType()) {
    case Cell.CELL_TYPE_NUMERIC: // 数值型
     if (DateUtil.isCellDateFormatted(cell)) {
      // 如果是Date类型则 ,获取该Cell的Date值
      value =new SimpleDateFormat("yyyy-MM-dd").format(DateUtil
        .getJavaDate(cell.getNumericCellValue()));
     } else {// 纯数字,这里要判断是否为小数的情况,因为整数在写入时会被加上小数点
      String t = cell.getNumericCellValue() + "";
      BigDecimal n = new BigDecimal(cell
        .getNumericCellValue());
      // 判断是否有小数点
      if (t.indexOf(".") < 0) {
       value = n.intValue() + "";
      } else {
       // 数字格式化对象
       NumberFormat nf = NumberFormat.getInstance();
       // 小数点最大两位
       nf.setMaximumFractionDigits(2);
       // 执行格式化
       value = nf.format(n.doubleValue());
      }
     }
     break;
    case Cell.CELL_TYPE_STRING: // 字符串型
     value = cell.getRichStringCellValue().toString();
     break;
    case Cell.CELL_TYPE_FORMULA:// 公式型
     // 读公式计算值
     value = String.valueOf(cell.getNumericCellValue());
     break;
    case Cell.CELL_TYPE_BOOLEAN:// 布尔
     value = " " + cell.getBooleanCellValue();
     break;
    /* 此行表示该单元格值为空 */
    case Cell.CELL_TYPE_BLANK: // 空值
     value = " ";
     break;
    case Cell.CELL_TYPE_ERROR: // 故障
     value = " ";
     break;
    default:
     value = cell.getRichStringCellValue().toString();
    }
   }
  } catch (Exception e) {
    e.printStackTrace();
  }
  return value;
 }
 /**
  * 处理单元格值相等的单元格
  *
  * @param sheet
  */
 @SuppressWarnings("unused")
 public static List<String[]> setMergedRegion(Sheet sheet,
   List<String[]> list) {
  int num = sheet.getNumMergedRegions();
  List<String[]> listDate = new ArrayList<String[]>();
  try {
   for (int i = 0; i < num; i++) {
    CellRangeAddress rangeAddress = sheet.getMergedRegion(i);
    int firstcell = rangeAddress.getFirstColumn();
    int firstrow = rangeAddress.getFirstRow();
    int lastcell = rangeAddress.getLastColumn();
    int lastrow = rangeAddress.getLastRow();
    // 处理合并行的值
    if (firstcell == lastcell) {
     for (int j = firstrow; j <= lastrow; j++) {
      list.get(j)[firstcell] = list.get(firstrow)[firstcell];
     }
    }
    // 处理合并列的值
    if (firstrow == lastrow) {
     for (int j = firstcell; j <= lastcell; j++) {
      list.get(firstrow)[j] = list.get(firstrow)[j];
     }
    }
    // 处理合并行列
    if (firstcell != lastcell && firstrow != lastrow) {
     for (int j = firstrow; j <= lastrow; j++) {
      for (int k = firstcell; k <= lastcell; k++) {
       list.get(j)[k] = list.get(firstrow)[firstcell];
      }
     }
    }
   }
   listDate = list;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return list;
 }
}
类结束================

转载于:https://www.cnblogs.com/pangblog/p/3362381.html

解析xlsx与xls--使用2012poi.jar相关推荐

  1. EXCEL解析:使用poi解析xlsx和xls后缀的excel文件

    1.pom依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency><g ...

  2. Java利用poi解析xlsx和xls文件

    遇到过处理excel的问题,在网上找了很久,感觉他们的代码太乱太复杂,这是我精简版的excel处理代码,简单暴力. 首先,为什么使用poi?jxl只能处理03版之前的excel,也就是xls结尾的,不 ...

  3. Java 解析Excel(xls、xlsx两种格式)

    Java 解析Excel(xls.xlsx两种格式) 一.环境 JDK 1.8 二.JAR 1.commons-collections4-4.1.jar 2.poi-3.9-20121203.jar ...

  4. android解析doc,docx,xls,xlsx文件

    导读:有的时候我们在开发android中需要解析一些我们比较常用的格式,比如doc.docx.xls.xlsx,那么我们要是正常的话就解析不了.这时我们就要用tm-extractors-0.4.jar ...

  5. Python|excel表格数据一键转json格式小工具|支持xlsx、xls格式转json|【源码+解析】

    背景    最近在使用JavaScript编写一些浏览器RPA脚本,脚本使用过程中遇到一些问题,脚本使用的数据往往存放在excel表,但运行时只能读取json数据,导致频繁人工excel转json,效 ...

  6. POI导入,兼容xlsx 和 xls

    气死了,之前遇到一个感觉比较好用的poi导入,谁知道现在用起来,各种bug,干脆使用最新的api模仿实现了一个,使用模版方法模式回调,只需要实现接口,处理每一行数据,就ok了.此实现只支持单页shee ...

  7. 利用XLSX工具库实现xlsx或xls的上传

    在实际的业务需求有很多是需要进行导入导出功能的.XLSX是一个十分方便且功能完善的工具库.今天便利用其先介绍一下导入功能. 一.XLSX工具库 XLSX是一个简单快捷易上手的xlsx.xls文件上传的 ...

  8. java 给图片、pdf、docx、doc、wps、xlsx、xls添加水印(均测试通过)

    java 添加水印(均亲自测试通过) 前言 本地开发环境:jdk1.8 涉及jar: 1)图片:jdk自带的rt.jar 2)pdf:itextpdf-5.5.9.jar.itext-asian.ja ...

  9. Python解析xlsx文件库(xlrd与openpyxl)详细对比

    序言 之前项目的脚本一直在用xlrd解析xlsx文件,后来出了点问题,以为是xlrd版本过时,就用openpyxl重写一下,写完之后发现问题并不是出在xlrd本身,后来就用这两个库同时解析,相当于互相 ...

最新文章

  1. 2022-2028年中国棕刚玉行业市场运营模式及未来发展潜力报告
  2. Python3 与 C# 并发编程之~ Net篇
  3. BCH网络成功发布第一个商业级别的Token
  4. [PYTHON] xml.etree.ElementTree 实例
  5. robot framework环境搭建
  6. [Embeding-2]文本表示学习-词嵌入入门理解
  7. 一个微服务网关的设计
  8. php替代eval_PHP:需要eval()的替代方法来动态构建多维数组
  9. 实践线性模型对于大规模一类别协同过滤
  10. 疯狂的html css,疯狂Html+CSS+JS 中JS总结
  11. 学习git: 忽略某些文件(夹)的跟踪
  12. YML格式(java 常用配置文件格式)
  13. 智能水杯设计方案_智能水杯的设计与营销
  14. 将一个3x4阶矩阵转置。
  15. 3D打印机DIY之五------切片软件Cura的使用
  16. watchdog(看门狗)
  17. vi之列操作——步步为营+实例
  18. 小学英语与计算机技术整合,小学英语课程与信息技术的整合
  19. dhu 数据科学与技术 第2次作业
  20. 犀牛Rhino 4.0-6.5 安装说明

热门文章

  1. 用汇编语言与C语言实验其他排序,微机原理实验报告冒泡排序
  2. 商业智能BI和报表的区别?
  3. BootstrapTable单元格宽度调整:colResizable()方法
  4. 前端界面根据条件动态显示图片
  5. Object-C使用NSLog打印日志
  6. 惠斯通电桥信号调理芯片_基于精密分流电阻器的惠斯通电桥校准
  7. 马尔可夫决策过程(MDP)
  8. 国内搭建vite vue和国外的不一样的,跟着教程会踩很多坑
  9. input回车触发事件_JavaScript学习笔记(十五)-- Event事件(上)
  10. HNU 程序设计课 函数公式题