Java 解析Excel(xls、xlsx两种格式)详解编程语言

Java 解析Excel(xls、xlsx两种格式)

一、环境

  JDK 1.8

二、JAR

  1.commons-collections4-4.1.jar

  2.poi-3.9-20121203.jar

  3.poi-examples-3.9-20121203.jar

  4.poi-excelant-3.9-20121203.jar

  5.poi-ooxml-3.9-20121203.jar

  6.poi-ooxml-schemas-3.9-20121203.jar

  7.poi-scratchpad-3.9-20121203.jar

  8.xmlbeans-2.3.0.jar

  注意:jar版本为3.9

三、主要API

  1.import org.apache.poi.ss.usermodel.Workbook,对应Excel文档;

  2.import org.apache.poi.hssf.usermodel.HSSFWorkbook,对应xls格式的Excel文档;

  3.import org.apache.poi.xssf.usermodel.XSSFWorkbook,对应xlsx格式的Excel文档;

  4.import org.apache.poi.ss.usermodel.Sheet,对应Excel文档中的一个sheet;

  5.import org.apache.poi.ss.usermodel.Row,对应一个sheet中的一行;

  6.import org.apache.poi.ss.usermodel.Cell,对应一个单元格。

四、示例

package poi; 
 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.LinkedHashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.Map.Entry; 
 
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; 
 
public class Testpoi { 
 
    public static void main(String[] args) { 
        Workbook wb =null; 
        Sheet sheet = null; 
        Row row = null; 
        List<Map<String,String>> list = null; 
        String cellData = null; 
        String filePath = "D://test.xlsx"; 
        String columns[] = {"name","age","score"}; 
        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)); 
                        map.put(columns[j], cellData); 
                    } 
                }else{ 
                    break; 
                } 
                list.add(map); 
            } 
        } 
        //遍历解析出来的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; 
    } 
    public static Object getCellFormatValue(Cell cell){ 
        Object cellValue = null; 
        if(cell!=null){ 
            //判断cell类型 
            switch(cell.getCellType()){ 
            case Cell.CELL_TYPE_NUMERIC:{ 
                cellValue = String.valueOf(cell.getNumericCellValue()); 
                break; 
            } 
            case Cell.CELL_TYPE_FORMULA:{ 
                //判断cell是否为日期格式 
                if(DateUtil.isCellDateFormatted(cell)){ 
                    //转换为日期格式YYYY-mm-dd 
                    cellValue = cell.getDateCellValue(); 
                }else{ 
                    //数字 
                    cellValue = String.valueOf(cell.getNumericCellValue()); 
                } 
                break; 
            } 
            case Cell.CELL_TYPE_STRING:{ 
                cellValue = cell.getRichStringCellValue().getString(); 
                break; 
            } 
            default: 
                cellValue = ""; 
            } 
        }else{ 
            cellValue = ""; 
        } 
        return cellValue; 
    } 
 
}

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/16632.html

(0)
上一篇 2021年7月19日 19:29
下一篇 2021年7月19日 19:29

相关推荐

发表回复

登录后才能评论