• ExcelReader(解析Excel的工具类)


    package cn.com.css.common.util;

    import java.io.IOException;
    import java.io.InputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;

    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;

    public class ExcelReader {
     
     private POIFSFileSystem fs;
     private HSSFWorkbook wb;
     private HSSFSheet sheet;
     private HSSFRow row;

     /**
      * 读取Excel表格表头的内容
      *
      * @param InputStream
      * @return String 表头内容的数组
      */
     public String[] readExcelTitle(InputStream is) {
      try {
       fs = new POIFSFileSystem(is);
       wb = new HSSFWorkbook(fs);
      } catch (IOException e) {
       e.printStackTrace();
      }
      sheet = wb.getSheetAt(0);
      row = sheet.getRow(0);
      // 标题总列数
      int colNum = row.getPhysicalNumberOfCells();
      String[] title = new String[colNum];
      for (int i = 0; i < colNum; i++) {
       title[i] = getCellFormatValue(row.getCell((short) i));
      }
      return title;
     }

     /**
      * 读取Excel数据内容
      *
      * @param InputStream
      * @return Map 包括单元格数据内容的Map对象
      */
     public Map<Integer, String> readExcelContent(InputStream is) {
      Map<Integer, String> content = new HashMap<Integer, String>();
      String str = "";
      try {
       fs = new POIFSFileSystem(is);
       wb = new HSSFWorkbook(fs);
      } catch (IOException e) {
       e.printStackTrace();
      }
      sheet = wb.getSheetAt(0);
      // 得到总行数
      int rowNum = sheet.getLastRowNum();
      row = sheet.getRow(0);
      int colNum1 = row.getPhysicalNumberOfCells(); // 获取有数据的列的个数
      int colNum = 15;
      // 正文内容应该从第二行開始,第一行为表头的标题
      for (int i = 1; i <= rowNum; i++) {
       row = sheet.getRow(i);
       int j = 0;

       while (j < colNum) {
        String cell = getCellFormatValue(row.getCell((short) j)).trim();
        if (cell == "") {
         j++;
         continue;
        }
        str += cell + " ";
        j++;
       }
       str.trim();
       // System.out.println(str);
       content.put(i, str);
       str = "";
      }
      return content;
     }

     /**
      * 获取单元格数据内容为字符串类型的数据
      *
      * @param cell
      *            Excel单元格
      * @return String 单元格数据内容
      */
     /*
      * private String getStringCellValue(HSSFCell cell) { String strCell = "";
      * switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: strCell =
      * cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC:
      * strCell = String.valueOf(cell.getNumericCellValue()); break; case
      * HSSFCell.CELL_TYPE_BOOLEAN: strCell =
      * String.valueOf(cell.getBooleanCellValue()); break; case
      * HSSFCell.CELL_TYPE_BLANK: strCell = ""; break; default: strCell = "";
      * break; } if (strCell.equals("") || strCell == null) { return ""; } if
      * (cell == null) { return ""; } return strCell; }
      */

     /**
      * 获取单元格数据内容为日期类型的数据
      *
      * @param cell
      *            Excel单元格
      * @return String 单元格数据内容
      */
     // private String getDateCellValue(HSSFCell cell) {
     // String result = "";
     // try {
     // int cellType = cell.getCellType();
     // if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {
     // Date date = cell.getDateCellValue();
     // result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)
     // + "-" + date.getDate();
     // } else if (cellType == HSSFCell.CELL_TYPE_STRING) {
     // String date = getStringCellValue(cell);
     // result = date.replaceAll("[年月]", "-").replace("日", "").trim();
     // } else if (cellType == HSSFCell.CELL_TYPE_BLANK) {
     // result = "";
     // }
     // } catch (Exception e) {
     // //System.out.println("日期格式不对!");
     // e.printStackTrace();
     // }
     // return result;
     // }

     /**
      * 依据HSSFCell类型设置数据
      *
      * @param cell
      * @return
      */
     private String getCellFormatValue(HSSFCell cell) {
      String cellvalue = "";
      if (cell != null) {
       // 推断当前Cell的Type
       switch (cell.getCellType()) {
       // 假设当前Cell的Type为NUMERIC
       case HSSFCell.CELL_TYPE_NUMERIC: {
        cellvalue = String.valueOf(cell.getNumericCellValue());
        break;
       }
       case HSSFCell.CELL_TYPE_FORMULA: {
        // 推断当前的cell是否为Date
        if (HSSFDateUtil.isCellDateFormatted(cell)) {
         // 假设是Date类型则,转化为Data格式

         // 方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00
         // cellvalue = cell.getDateCellValue().toLocaleString();

         // 方法2:这样子的data格式是不带带时分秒的:2011-10-12
         Date date = cell.getDateCellValue();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         cellvalue = sdf.format(date);

        }
        // 假设是纯数字
        else {
         // 取得当前Cell的数值
         cellvalue = String.valueOf(cell.getNumericCellValue());
        }
        break;
       }
        // 假设当前Cell的Type为STRIN
       case HSSFCell.CELL_TYPE_STRING:
        // 取得当前的Cell字符串
        cellvalue = cell.getRichStringCellValue().getString();
        break;
       // 默认的Cell值
       default:
        cellvalue = " ";
       }
      } else {
       cellvalue = "";
      }
      return cellvalue;

     }

    }

  • 相关阅读:
    分享memcache和memcached安装过程(转)
    ios画图总结
    mac os下通过命令行的方式编译c++代码并在xcode里引用
    ubuntu访问windows共享文件夹
    为iphone 及iphone simulator编译boost库
    ubuntu 11.10 x64 安装oracle 11gR2时碰到的问题及解决方法
    模拟器与真机下ffmpeg的编译方法(总结版)
    ios 在View里绘图
    memcached1.4.4在ubuntu下编译的注意事项
    Google Code 服务试用
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6722248.html
Copyright © 2020-2023  润新知