POI解析1997-2003、2007版本excel

来源:互联网 发布:mac什么输入法最好用 编辑:程序博客网 时间:2024/06/07 14:50

本文就poi解析1997-2003/2007版本进行总结,走统一接口。

maven引入:
这里写图片描述

sheet存储模型

import java.util.HashMap;import java.util.Map;/** * excel sheet 模型抽象 * Created by xieyang@e6yun.com on 2016年11月2日. * */public class SheetCollection {    /**     *sheet 名称      */    private String sheetName;    /**     * key :行号     * value: [key:名称;value:单元格的值]     */    private Map<String, Map<String, String>> sheetMapCollection=new HashMap<String, Map<String,String>>();    /**     * sheet 集合中新增一行     * Created by xieyang@e6yun.com on 2016年11月2日.     * @param rowId 行号     * @param rowValues 行中单元格集合     */    public void insertRow(String rowId,Map<String, String> rowValues){        sheetMapCollection.put(rowId, rowValues);    }    public String getSheetName() {        return sheetName;    }    public void setSheetName(String sheetName) {        this.sheetName = sheetName;    }    public Map<String, Map<String, String>> getSheetMapCollection() {        return sheetMapCollection;    }    public void setSheetMapCollection(            Map<String, Map<String, String>> sheetMapCollection) {        this.sheetMapCollection = sheetMapCollection;    }    @Override    public String toString() {        return "SheetCollection [sheetName=" + sheetName                + ", sheetMapCollection=" + sheetMapCollection + "]";    }}

excel存储模型,多个sheet集合

import java.util.ArrayList;import java.util.List;/** * excel sheet集合 * Created by xieyang@e6yun.com on 2016年11月2日. * */public class ExcelCollection {    /**     * excel 描述     */    private String excelDesc;    /**     * 多个sheet集合     */    private  List<SheetCollection> sheetCollections=new ArrayList<SheetCollection>();    /**     * 添加一个sheet数据集合     * Created by xieyang@e6yun.com on 2016年11月2日.     * @param sheetCollection     */    public void insertSheet(SheetCollection sheetCollection){        sheetCollections.add(sheetCollection);    }    public String getExcelDesc() {        return excelDesc;    }    public void setExcelDesc(String excelDesc) {        this.excelDesc = excelDesc;    }    public List<SheetCollection> getSheetCollections() {        return sheetCollections;    }    public void setSheetCollections(List<SheetCollection> sheetCollections) {        this.sheetCollections = sheetCollections;    }    @Override    public String toString() {        return "ExcelCollection [excelDesc=" + excelDesc                + ", sheetCollections=" + sheetCollections + "]";    }}

excel 解析助手

import java.io.FileInputStream;import java.io.IOException;import java.util.HashMap;import java.util.Map;import org.apache.log4j.Logger;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;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 com.e6yun.routeOptimize.common.Constants;import com.e6yun.routeOptimize.utils.excel.model.ExcelCollection;import com.e6yun.routeOptimize.utils.excel.model.SheetCollection;/** * excel助手 * excel 03,07版本解析与写入 * Created by xieyang@e6yun.com on 2016年11月2日. * */public class ExcelUtils {    private static Logger logger=Logger.getLogger(ExcelUtils.class);    /**     * 解析excel     * Created by xieyang@e6yun.com on 2016年11月2日.     * @param fileName     * @return     */    public static ExcelCollection parseExcel(String fileName){        ExcelCollection excelCollection=null;        try {            //excel Poi顶层抽象            Workbook workbook=null;            if(fileName.endsWith(Constants.EXCEL_03_SURFIX)){                workbook=new HSSFWorkbook(new FileInputStream(fileName));            }else if(fileName.endsWith(Constants.EXCEL_07_SURFIX)){                workbook=new XSSFWorkbook(fileName);            }else{                return excelCollection;            }            //解析excel            excelCollection=getExcelFromWorkBook(workbook);            //关闭excel文件释放资源            workbook.close();        } catch (IOException e) {            logger.error(String.format("Parse Excel [%s] fail!,The Reason Is [%s]", fileName,e));        }        return excelCollection;    }    /**     * 从WorkBook中获取数据     * Created by xieyang@e6yun.com on 2016年11月2日.     * @param workbook     * @return     */   private static ExcelCollection getExcelFromWorkBook(Workbook workbook){       ExcelCollection excelCollection=new ExcelCollection();       //获取sheet数量       int sheetNums=workbook.getNumberOfSheets();       //遍历sheet       for (int i=0;i<sheetNums;i++) {           Sheet sheet=workbook.getSheetAt(i);           SheetCollection sheetCollection=new SheetCollection();           //获取sheet名称           String sheetName=sheet.getSheetName();           sheetCollection.setSheetName(sheetName);           //sheet中总行数           int rowNums=sheet.getLastRowNum();           Map<String, String> tempTitleMap=new HashMap<String, String>();           for (int rowIndex = 0; rowIndex < rowNums; rowIndex++) {              Map<String, String> rowMap=new HashMap<String, String>();              Row row=sheet.getRow(rowIndex);              //获取每行的列数              short columnNums=row.getLastCellNum();              for (int columnIndex = 0; columnIndex < columnNums; columnIndex++) {                  Cell cell=row.getCell(columnIndex);                  if(cell!=null){                      cell.setCellType(HSSFCell.CELL_TYPE_STRING);                      if(rowIndex==0){                          //加入到临时表头中                          tempTitleMap.put(columnIndex+"", cell.getStringCellValue());                      }                      rowMap.put(tempTitleMap.get(columnIndex+""), cell.getStringCellValue());                  }              }              sheetCollection.insertRow(rowIndex+"", rowMap);           }           excelCollection.insertSheet(sheetCollection);       }       return excelCollection;   }}
常量

这里写图片描述

0 0
原创粉丝点击