您的位置:首页 > 编程语言 > Java开发

java解析excel方法(包括.xlsx格式和.xls格式)

2018-01-16 16:15 483 查看
package test;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFDataFormat;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CellStyle;

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;

/**

 * java解析excel方法(包括.xlsx格式和.xls格式)

 * 

 * */
public class Test {

    //主方法

    public static void main(String[] args) throws Exception {

          String filePath = "D:\\新建 Microsoft Excel 工作表.xlsx";
          String[] columns = {"全宗号","全宗名称","序号","档号","年度","月份","成文日期","文件标题","保管期限","密                           级","备注"};
         unExcel(filePath,columns);
    }

 /**

     * 调用解析excel方法

     * 参数:filePath excel文件路径

     */    

    public static void unExcel(String filePath,String[] columns) {

        Workbook wb =null;

        Sheet sheet = null;

        Row row = null;

        List<Map<String,String>> list = null;

        String cellData = null;

       

        wb = readExcel(filePath);

        if(wb != null){

            //用来存放表中数据

            list = new ArrayList<Map<String,String>>();

            //获取第一个sheet

            sheet = wb.getSheetAt(0);

            //获取最大行数

            int rownum = sheet.getPhysicalNumberOfRows();

            //获取第一行

            row = sheet.getRow(0);

            //获取最大列数

            int colnum = row.getPhysicalNumberOfCells();

            for (int i = 1; i<rownum; i++) {

                Map<String,String> map = new LinkedHashMap<String,String>();

                row = sheet.getRow(i);

                if(row !=null){

                    for (int j=0;j<colnum;j++){

                        cellData = (String) getCellFormatValue(row.getCell(j));

           
4000
            map.put(columns[j], cellData);

                    }

                }else{

                    break;

                }

                list.add(map);

            }

        }

          System.out.println("list===="+list);

        //遍历解析出来的list

        for (Map<String,String> map : list) {

            for (Entry<String,String> entry : map.entrySet()) {

                System.out.print(entry.getKey()+":"+entry.getValue()+",");

            }

            System.out.println();

        }
    }

    /**
      * 读取excel
      * */

    public static Workbook readExcel(String filePath){

        Workbook wb = null;

        if(filePath==null){

            return null;

        }

        String extString = filePath.substring(filePath.lastIndexOf("."));

        InputStream is = null;

        try {

            is = new FileInputStream(filePath);

            if(".xls".equals(extString)){

                return wb = new HSSFWorkbook(is);

            }else if(".xlsx".equals(extString)){

                return wb = new XSSFWorkbook(is);

            }else{

                return wb = null;

            }

            

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

        return wb;
    }

   /** 

    * POI对Excel自定义日期格式的读取

    * */

    private static Object getCellFormatValue(Cell cell) {  

    Object cellValue = null;

        switch (cell.getCellType()) {  

        case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型  

            if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式  

                SimpleDateFormat sdf = null;  

                if (cell.getCellStyle().getDataFormat() == HSSFDataFormat  

                        .getBuiltinFormat("h:mm")) {  

                    sdf = new SimpleDateFormat("HH:mm");  

                } else {// 日期  

                    sdf = new SimpleDateFormat("yyyy-MM-dd");  

                }  

                Date date = cell.getDateCellValue();  

                cellValue = sdf.format(date);  

            } else if (cell.getCellStyle().getDataFormat() == 58) {  

                // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)  

                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");  

                double value = cell.getNumericCellValue();  

                Date date = org.apache.poi.ss.usermodel.DateUtil  

                        .getJavaDate(value);  

                cellValue = sdf.format(date);  

            } else {  

                double value = cell.getNumericCellValue();  

                CellStyle style = cell.getCellStyle();  

                DecimalFormat format = new DecimalFormat();  

                String temp = style.getDataFormatString();  

                // 单元格设置成常规  

                if (temp.equals("General")) {  

                    format.applyPattern("#");  

                }  

                cellValue = format.format(value);  

            }  

            break;  

        case HSSFCell.CELL_TYPE_STRING:// String类型  

        cellValue = cell.getRichStringCellValue().toString();  

            break;  

        case HSSFCell.CELL_TYPE_BLANK:  

        cellValue = "";  

        default:  

        cellValue = "";  

            break;  

        }  

        return cellValue;  

    }

}

解析前如下图:



解析后如下图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: