java读取Excel的方法,解析xls、xlsx两种格式
来源:互联网 发布:vb多线程实例 编辑:程序博客网 时间:2024/06/05 03:07
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.Date;import java.util.HashMap;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.xssf.usermodel.XSSFWorkbook;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * 读取Excel * * @author zengwendong */public class ReadExcelUtils {private Logger logger = LoggerFactory.getLogger(ReadExcelUtils.class);private Workbook wb;private Sheet sheet;private Row row;public ReadExcelUtils(String filepath) {if(filepath==null){return;}String ext = filepath.substring(filepath.lastIndexOf("."));try {InputStream is = new FileInputStream(filepath);if(".xls".equals(ext)){wb = new HSSFWorkbook(is);}else if(".xlsx".equals(ext)){wb = new XSSFWorkbook(is);}else{wb=null;}} catch (FileNotFoundException e) {logger.error("FileNotFoundException", e);} catch (IOException e) {logger.error("IOException", e);}}/** * 读取Excel表格表头的内容 * * @param InputStream * @return String 表头内容的数组 * @author zengwendong */public String[] readExcelTitle() throws Exception{if(wb==null){throw new Exception("Workbook对象为空!");}sheet = wb.getSheetAt(0);row = sheet.getRow(0);// 标题总列数int colNum = row.getPhysicalNumberOfCells();System.out.println("colNum:" + colNum);String[] title = new String[colNum];for (int i = 0; i < colNum; i++) {// title[i] = getStringCellValue(row.getCell((short) i));title[i] = row.getCell(i).getCellFormula();}return title;}/** * 读取Excel数据内容 * * @param InputStream * @return Map 包含单元格数据内容的Map对象 * @author zengwendong */public Map<Integer, Map<Integer,Object>> readExcelContent() throws Exception{if(wb==null){throw new Exception("Workbook对象为空!");}Map<Integer, Map<Integer,Object>> content = new HashMap<Integer, Map<Integer,Object>>();sheet = wb.getSheetAt(0);// 得到总行数int rowNum = sheet.getLastRowNum();row = sheet.getRow(0);int colNum = row.getPhysicalNumberOfCells();// 正文内容应该从第二行开始,第一行为表头的标题for (int i = 1; i <= rowNum; i++) {row = sheet.getRow(i);int j = 0;Map<Integer,Object> cellValue = new HashMap<Integer, Object>();while (j < colNum) {Object obj = getCellFormatValue(row.getCell(j));cellValue.put(j, obj);j++;}content.put(i, cellValue);}return content;}/** * * 根据Cell类型设置数据 * * @param cell * @return * @author zengwendong */private Object getCellFormatValue(Cell cell) {Object cellvalue = "";if (cell != null) {// 判断当前Cell的Typeswitch (cell.getCellType()) {case Cell.CELL_TYPE_NUMERIC:// 如果当前Cell的Type为NUMERICcase Cell.CELL_TYPE_FORMULA: {// 判断当前的cell是否为Dateif (DateUtil.isCellDateFormatted(cell)) {// 如果是Date类型则,转化为Data格式// data格式是带时分秒的:2013-7-10 0:00:00// cellvalue = cell.getDateCellValue().toLocaleString();// data格式是不带带时分秒的:2013-7-10Date date = cell.getDateCellValue();cellvalue = date;} else {// 如果是纯数字// 取得当前Cell的数值cellvalue = String.valueOf(cell.getNumericCellValue());}break;}case Cell.CELL_TYPE_STRING:// 如果当前Cell的Type为STRING// 取得当前的Cell字符串cellvalue = cell.getRichStringCellValue().getString();break;default:// 默认的Cell值cellvalue = "";}} else {cellvalue = "";}return cellvalue;}public static void main(String[] args) {try {String filepath = "F:test.xls";ReadExcelUtils excelReader = new ReadExcelUtils(filepath);// 对读取Excel表格标题测试//String[] title = excelReader.readExcelTitle();//System.out.println("获得Excel表格的标题:");//for (String s : title) {//System.out.print(s + " ");//}// 对读取Excel表格内容测试Map<Integer, Map<Integer,Object>> map = excelReader.readExcelContent();System.out.println("获得Excel表格的内容:");for (int i = 1; i <= map.size(); i++) {System.out.println(map.get(i));}} catch (FileNotFoundException e) {System.out.println("未找到指定路径的文件!");e.printStackTrace();}catch (Exception e) {e.printStackTrace();}}}
阅读全文
0 0
- java读取Excel的方法,解析xls、xlsx两种格式
- java读取Excel的方法,解析xls、xlsx两种格式
- java读取Excel的方法,解析xls、xlsx两种格式
- Java 读取 Excel(xls、xlsx格式)
- Java 读取Excel格式xls、xlsx数据工具类
- java使用poi读取xls格式和xlsx格式的excel文件
- POI读取加密的EXCEL(兼容XLS,XLSX格式)
- Java中通过POI读取Excel 2003 - 2007的xls,xlsx格式
- Java实现不同excel格式(*.xls、*.xlsx)文件的读取
- java读写excel(POI,支持xls和xlsx两种格式)
- java读写excel(POI,支持xls和xlsx两种格式)
- c#读取excel的xls和xlsx文件的方法
- POI技术处理Excel表 .xls ..xlsx两种格式的导入操作
- java的poi技术读取Excel[xls,xlsx]
- Java 实现导出excel表 POI/Java实现不同excel格式(*.xls、*.xlsx)文件的读取
- Java 读取excel xls以及xlsx文件
- java读取与写入excel(.xls .xlsx)
- java使用poi读取存储excel表格,包括xls和xlsx格式
- hdu 5833 Zhu and 772002
- QT编写cmd工具
- 区分数据库(database)和实例(instance)的概念
- 当Activity的launchMode设为singleTask的时候,你要注意了!
- 输入10个数求每个不同的数出现的次数算法
- java读取Excel的方法,解析xls、xlsx两种格式
- R语言读取xlsx文件
- Spring Boot 热部署
- 常用命令总结
- 数据挖掘中的关联规则
- Android中常见的内存泄漏汇总
- sas统计分析学习笔记(五)
- MAC上读出usb
- Lucene搜索引擎+HDFS+MR完成垂直搜索