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;

 }

}

类结束================

解析xlsx与xls--使用2012poi.jar的更多相关文章

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

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

  2. java 关于xlsx(xls) 和 csv 文件的数据解析

    1.适用于xlsx 和 xls  <!--xlsx和xls文件pom依赖--> <dependency> <groupId>org.apache.poi</g ...

  3. Java 导出Excel xlsx、xls, CSV文件

    通用导出功能: 1.支持Excel xlsx.xls 2.支持CSV文件导出 3.数据库查询分页导出.内存导出 4.支持大批量数据导出 使用步骤如下 导入jar <dependency> ...

  4. 使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar

    使用XStream解析MXL文件用到的jar包---xpp3_min-1.1.3.4.O.jar和xstream-1.3.1.jar

  5. 把当前文件夹的xlsx或xls文件合并到一个excel文件中的不同sheet中

    把当前文件夹的xlsx或xls文件合并到一个excel文件中的不同sheet中步骤如下: 把需要合并的文件放到同一个文件夹 在该文件夹中新建一个excel文件 打开新建的excel问价,把鼠标放到sh ...

  6. 判断上传的Excel为.xlsx还是.xls

    这个问题其实蛮简单的,具体操作如下 判断获取到上传的文件id后下载文件,然后拿到文件名称,截取文件名称后缀,判断是.xlsx还是.xls进行不同的操作即可

  7. 在线预览(pptx、ppt、pps、docx、doc、xlsx、xls)

    http://view.officeapps.live.com/op/view.aspx?src=<文档位置> 示例文档https://www.dujin.org/file/ppt/duj ...

  8. java解析Excel(xls、xlsx两种格式)

    https://www.cnblogs.com/hhhshct/p/7255915.html ***************************************************** ...

  9. 解析xlsx文件---Java读取Excel2007

    关于Java读取Excel2007的文章在Google.百度上搜索一下,没有太好的例子,实现的也不算太好.查看了一下Poi,最新的 POI 3.5 beta 4 支持读写 Excel2007和PPT2 ...

随机推荐

  1. 重复数据插入unique列时,锁加在哪?

    1.测试目的 当插入重复数据到有unique索引的表中时,采用何种加锁机制. 2.测试思路 利用10046确定是什么操作导致加锁阻塞了进程: dump锁定前最近一次操作的块结构来分析加锁机制. 3.测 ...

  2. 【资料目录收藏】.NET开发必看资料53个 经典源码77个

    简单描述:为大家整理了下载中心.net资料,都是比较热的,好评率比较高的,做了一个可收藏的下载目录,希望大家喜欢~ 基于.net构架的留言板项目大全源码 http://down.51cto.com/z ...

  3. C++引用作为函数的参数

    引用也可以作为一个函数的参数,如:我们定义交换两个数的函数swap,将函数的参数定义成引用的形式: void swap(int &p1, int &p2) //此处函数的形参都是引用 ...

  4. NOI冲刺计划

    省选过了,剩下大概是NOI冲刺了吧.中间还有一大堆诸如会考,CTSC,APIO等东西. 最近先不急着天天刷八中了吧,多在不同网站见一些题,然后再着重提高一下代码准确性.重点把DP这个板块多练习一下,八 ...

  5. 靓号正则表达式(前后向查找等) 和 apache正则包使用

    一般公司在开发一类对的号码时,会预留一些号码给以后升级的会员使用,比如旺旺靓号,QQ号等,采用正则表达式实现较好,通过规则引擎的后台页面做成实时可配置的也是不错的选择. 一. 一般会有如下的正则需求 ...

  6. 网络安装CentOS 5.3

    转自网络安装CentOS 5.3 0. 基本要求 (1) 需要使用至少两台服务器:其中一台没有操作系统,是我们即将安装的服务器;另外一台是已经安装好操作系统的服务器,我们用来存储CentOS的安装文件 ...

  7. 3G? 2G? 2.5G? 4G? 与 WIFI, GPRS,CDMA 3G无线上网

    首先说说无线上网有哪几种形式? WIFI, GPRS, CDMA 3G无线上网 1>wifi全称wireless fidelity,是当今使用最广的一种无线网络传输技术.实际上就是把有线网络信号 ...

  8. AQuery简介:jQuery for Android

    jQuery的流行已经成为了事实,它极大地减少了执行异步任务和操作DOM所需要的代码数量.新项目AQuery想要为Android开发者提供同样的功能.为了向你展示Android Query能够够为用户 ...

  9. asp.net 163邮件发送

    <table id="> <tr> <td style="width: 393px"> 收信:<asp:TextBox ID=. ...

  10. [wikioi]没有上司的舞会

    树形DP.用F[k][0]和F[k][1]表示某节点不选和选了之后子树的最大值.那么:f[i][0]=sigma(max(f[k][0],f[k][1]))f[i][1]=sigma(f[k][0]) ...