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;

 }

}

转载于:https://www.cnblogs.com/zhchoutai/p/6722248.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ExcelReaderExcelReaderBuilder是EasyExcel库中的两个类。ExcelReader用于读取.xls和.xlsx格式的Excel文件,并解析电子表格中的单元格值。ExcelReaderBuilder是ExcelReader的构建器类,用于构建ExcelReader对象并配置读取的参数。 在EasyExcel库中,通过ExcelReader对象可以对Excel文件进行读取并获取其中的数据。读取的数据类型是Object,实际上是LinkedHashMap的实例。LinkedHashMap是一种有序的Map实现,可以保持插入顺序。通过调试,我们可以发现EasyExcel返回的数据类型是LinkedHashMap。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ExcelReader:读取XLS和XLSX文件](https://download.csdn.net/download/weixin_42107374/18274081)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Excel相关操作(二)Springboot框架使用easyexcel工具](https://blog.csdn.net/weixin_45311418/article/details/123306861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [easyexcel详解+读取文件](https://blog.csdn.net/quietbxj/article/details/113766870)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值