poi解析excel简单小例子

package com.test;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ParseExcel {
	public static void main(String[] args) {
		Map<String, List<List<String>>> sheetsMap = getExcelData("D:/aaa.xlsx");
		System.out.println("sheet total:"+sheetsMap.size());
		Set<String> keys = sheetsMap.keySet();
		//查看解析记录
		for(String key : keys){
			List<List<String>> sheets = sheetsMap.get(key);
			System.out.println("====================="+key+"=======================");
			for (int j = 0; j < sheets.size(); j++) {
				List<String> cellList = sheets.get(j);
				for (int k = 0; k < cellList.size(); k++) {
					System.out.print(cellList.get(k)+" ");
				}
				System.out.println();
			}
			System.out.println();
		}
	}

	/**
	 * 根据指定sheet名获取数据
	 * @param sheetName sheet名称
	 * @param path	指定excel文件
	 * @return 返回指定sheetName的sheet数据
	 */
	public static List<List<String>> getSheetByName(String sheetName,String path){
		// 获取所有数据
		Map<String, List<List<String>>> sheetsMap = getExcelData(path);
		// 获取指定的数据
		List<List<String>> list = sheetsMap.get(sheetsMap);
		return list;
	}
	
	/**
	 * 获取excel数据
	 * @param path excel文件的路径
	 * @return 返回整个excel的数据,可根据sheet名在map中获取每个sheet的数据, 
	 * 			可根据map中的list获取每行的列表数据
	 */
	public static Map<String,List<List<String>>> getExcelData(String path) {
		// 总数据
		Map<String,List<List<String>>> sheetsMap = new HashMap<String,List<List<String>>>();
		// 页数据
		List<List<String>> rowsList = null;
		// 行数据
		List<String> cellList = null;
		XSSFWorkbook workbook = null;
		File file = new File(path);
		try {
			workbook = new XSSFWorkbook(file); 
			int sheetTotal = workbook.getNumberOfSheets(); 
			// 1.循环遍历每一个sheet
			for (int i = 0; i < sheetTotal; i++) {
				XSSFSheet sheet = workbook.getSheetAt(i);
				int rowTotal = sheet.getLastRowNum(); 
				rowsList = new ArrayList<List<String>>(); 
				// 2.循环遍历每一行row
				for (int j = 0; j < rowTotal; j++) {
					XSSFRow row = sheet.getRow(j);
					if (row != null) {
						int cellTotal = row.getLastCellNum(); 
						cellList = new ArrayList<String>(); 
						// 3.循环遍历每一列cell
						for (int k = 0; k < cellTotal; k++) {
							if (row.getCell(k) != null) {
								// 4.判断日期,也可以用HSSFDataFormat.getBuiltinFormat("m/d/yy")替换14
								if(row.getCell(k).getCellStyle().getDataFormat()==14){
									SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
									Date date = row.getCell(k).getDateCellValue();
									if(date!=null){
										cellList.add(format.format(date).toString());
									}
								}else{
									cellList.add(row.getCell(k).toString());
								}
							}
						}
						rowsList.add(cellList);
					}
				}
				// 可很据sheet名获得数据
				sheetsMap.put(sheet.getSheetName(), rowsList);
			}
		} catch (InvalidFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				// 关闭工作簿
				workbook.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return sheetsMap;
	}
}

 

日期格式源码

 static
  {
    List m = new ArrayList();
    putFormat(m, 0, "General");
    putFormat(m, 1, "0");
    putFormat(m, 2, "0.00");
    putFormat(m, 3, "#,##0");
    putFormat(m, 4, "#,##0.00");
    putFormat(m, 5, "\"$\"#,##0_);(\"$\"#,##0)");
    putFormat(m, 6, "\"$\"#,##0_);[Red](\"$\"#,##0)");
    putFormat(m, 7, "\"$\"#,##0.00_);(\"$\"#,##0.00)");
    putFormat(m, 8, "\"$\"#,##0.00_);[Red](\"$\"#,##0.00)");
    putFormat(m, 9, "0%");
    putFormat(m, 10, "0.00%");
    putFormat(m, 11, "0.00E+00");
    putFormat(m, 12, "# ?/?");
    putFormat(m, 13, "# ??/??");
    putFormat(m, 14, "m/d/yy");
    putFormat(m, 15, "d-mmm-yy");
    putFormat(m, 16, "d-mmm");
    putFormat(m, 17, "mmm-yy");
    putFormat(m, 18, "h:mm AM/PM");
    putFormat(m, 19, "h:mm:ss AM/PM");
    putFormat(m, 20, "h:mm");
    putFormat(m, 21, "h:mm:ss");
    putFormat(m, 22, "m/d/yy h:mm");

    for (int i = 23; i <= 36; i++)
    {
      putFormat(m, i, "reserved-0x" + Integer.toHexString(i));
    }

    putFormat(m, 37, "#,##0_);(#,##0)");
    putFormat(m, 38, "#,##0_);[Red](#,##0)");
    putFormat(m, 39, "#,##0.00_);(#,##0.00)");
    putFormat(m, 40, "#,##0.00_);[Red](#,##0.00)");
    putFormat(m, 41, "_(\"$\"* #,##0_);_(\"$\"* (#,##0);_(\"$\"* \"-\"_);_(@_)");
    putFormat(m, 42, "_(* #,##0_);_(* (#,##0);_(* \"-\"_);_(@_)");
    putFormat(m, 43, "_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)");
    putFormat(m, 44, "_(\"$\"* #,##0.00_);_(\"$\"* (#,##0.00);_(\"$\"* \"-\"??_);_(@_)");
    putFormat(m, 45, "mm:ss");
    putFormat(m, 46, "[h]:mm:ss");
    putFormat(m, 47, "mm:ss.0");
    putFormat(m, 48, "##0.0E+0");
    putFormat(m, 49, "@");
    String[] ss = new String[m.size()];
    m.toArray(ss);
    _formats = ss;
  }

 

 

你可能感兴趣的:(poi,excel解析,excel日期转换,解析excel,poi解析excel)