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. [简历] PHP 技能关键字列表

    本技能关键字列表是从最近招聘PHP的数百份JD中统计出来的,括号中是出现的词频.如果你的简历要投递给有机器(简历分选系统)和不如机器(不懂技术的HR)筛选简历环节的地方,请一定从下边高频关键词中选择5 ...

  2. IE8下String的Trim()方法失效的解决方法

    String的Trim()方法失效,在ie8下是有这样的情况的,解决方法也很简单使用$.trim(str)即可,需要的朋友可以了解下 用jquery的trim()方法,$.trim(str)就可以了.

  3. 【LA 5713 】 Qin Shi Huang's National Road System (MST)

    [题意] 秦始皇要在n个城市之间修路,而徐福声可以用法术位秦始皇免费修1条路,每个城市还有人口数,现要求徐福声所修之路的两城市的人口数之和A尽量大,而使n个城市互通需要修的路长B尽量短,从而使得A/B ...

  4. [转贴]怎样在LINQ实现 LEFT JOIN 或者RIGHT JOIN

    In this post let us see how we can handle Left Join and Right Join when using LINQ. There are no key ...

  5. perl 面向对象demo

    Vsftp:/root/perl/17# cat Critter.pm package Critter; sub new { my $self = {}; my $invocant = shift; ...

  6. 【HDOJ】2853 Assignment

    最小费用最大流可解最优解.至于dif如何解,可以把w扩大100倍,如果mission编号和排列P相等则对w+1,然后建立网络流.对结果取模100可以得到没有改变mission的company数目,用c ...

  7. 【转】windows7 64位系统认不出8g内存显示只有3G可用

    原文网址:http://www.jb51.neos/windows/93721.html   我的电脑安装的是Win7 64位系统,当时内存是用的8G的,系统里面显示出来只有3.00G可用,真是崩溃啊 ...

  8. Android——监听开机启动,自启动应用程序

    1.首先继承一个broadcastreceiver public class ConnectBroadCastReceiver extends BroadcastReceiver { @Overrid ...

  9. oracle全托管驱动Oracle.ManagedDataAccess

    oracle官方的托管驱动,发布只需一个6M多的dll,支持EF 支持分布式事务,使用步骤如下: 1,Download ODP.NET, Managed Driver .zip file to a d ...

  10. ATL ActiveX 非管理员权限发布(支持vs2005)

    在win7系统中,vs2005开发的atl activex需要管理员权限才能注册. 解决方法: PerUserRegistration.h #pragma once class PerUserRegi ...