Java读取excel的两种方式(jxl及poi)对比

1.区别1:jxl只能支持后缀名为xls的文件

  poi不仅支持xls还支持xlsx格式;提供API对Microsoft Office格式档案读和写的功能。

   区别2:数据较小时两者没有明显差别;数据量过大时,jxl相对poi来说对jvm虚拟机内存的消耗不高,如果只是简单的单个excel的读写操作网上建议说是用jxl,对于复杂的建议使用poi(本条区别是网上查的资料总结的,目前自己还没有研究,而我目前需要的只是对excel做简单的读取操作,而且数据量不大,所以我用的是poi模型,仅仅是因为它支持xlsx格式)

 

2.jxl常规读取excel操作代码示例:

读取某个cell的内容:

/*
jxl只能操作读写excel且仅支持excel:95-2000的所有版本 
--读取excel某个单元格的操作如下:
                             选择特定excel文件得到工作簿workbook
                             从工作簿中选择某个工作表sheet
                             选择该sheet的某个单元格cell
                             读取单元格信息
 */

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import java.io.File;
import java.io.IOException;

public class ReadExcelByJXL {

    public static void readExcel(String filePath){
        File file = new File(filePath);
        Workbook workbook = null;
        try {
            //读取工作簿workbook
            workbook = Workbook.getWorkbook(file);
            //选择工作表sheet-通过下标或工作表名称
            Sheet sheet = workbook.getSheet(0);
            //选择单元格cell--列,行
            Cell cell = sheet.getCell(2,1);
            //读取单元格内容
            String content = cell.getContents();
            System.out.println(content);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (BiffException e) {
            e.printStackTrace();
        } finally {
            workbook.close();
        }
    }

    public static void main(String args []){
        //拿到第一行第二列的数据(从0开始)
        String filePath  = "D:/data.xls";
        readExcel(filePath);
    }
}

把所有单元格内容读取出来全部放到List对象中:

import com.xinji.dto.UserDTO;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ReadExcelByJXL {

    public static List readExcel(String filePath){
        File file = new File(filePath);
        Workbook workbook = null;
        try {
            //读取工作簿workbook
            workbook = Workbook.getWorkbook(file);
            //选择工作表sheet-通过下标或工作表名称
            Sheet sheet = workbook.getSheet(0);
            //选择一行
            int rowNo = sheet.getRows();
            List userDTOList = new ArrayList<>();
            for (int i = 0 ; i userDTOS = readExcel(filePath);
        for (UserDTO userDTO :userDTOS){
            System.out.println("user数据:\n");
            System.out.println(userDTO.getCaseInfo());
            System.out.println(userDTO.getCaseNo());
            System.out.println(userDTO.getName());

        }
    }
}

3.poi常规读取excel操作代码示例:

 结构:

  • HSSF - 提供读写Microsoft Excel格式档案的功能。
  • XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
  • HWPF - 提供读写Microsoft Word格式档案的功能。
  • HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
  • HDGF - 提供读写Microsoft Visio格式档案的功能。
package com.xinji.util;

import com.xinji.dto.UserDTO;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**

poi不仅可以操作读写excel还支持所有office格式
--读取excel某个单元格的操作如下:
                             选择特定excel文件得到工作簿HSSFWorkbook
                             从工作簿中选择某个工作表HSSFSheet
                             选择该sheet中的某行数据Row
                             选择该行中的某个单元格Cell
                             读取单元格信息getStringCellValue()--注意单元格的格式不能为数字可                                                                
                                                                以全部设置为文本格式

 */
public class ReadExcelByPOI {

    public static List readExcel(String filePath){

       List userDTOList = new ArrayList<>();
       try {
           //1、获取文件输入流
           InputStream inputStream = new FileInputStream(filePath);
           //2、选择特定excel文件得到工作簿HSSFWorkbook
           HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
           //3、从工作簿中选择某个工作表HSSFSheet
           HSSFSheet sheetAt = workbook.getSheetAt(0);
           //4、循环读取该sheet下的所有行数据HSSFRow
           for (Row row : sheetAt) {
               UserDTO userDTO = new UserDTO();
               //首行(即表头)不读取
               if (row.getRowNum() == 0) {
                   continue;
               }
               //读取当前行中单元格数据,索引从0开始
               userDTO.setJiraNo( row.getCell(0).getStringCellValue());
               userDTO.setCaseNo( row.getCell(1).getStringCellValue());
               userDTO.setCaseInfo( row.getCell(2).getStringCellValue());
               userDTO.setGender(row.getCell(3).getStringCellValue());
               userDTO.setName( row.getCell(4).getStringCellValue());
               userDTO.setCardNo( row.getCell(5).getStringCellValue());
               userDTOList.add(userDTO);
           }
           //5、关闭流
           workbook.close();
       } catch (FileNotFoundException f){
           f.printStackTrace();
       } catch (IOException io){
           io.printStackTrace();
       }
        return userDTOList;
    }

    public static void main(String args []){
        String filePath  = "D:/data1.xls";
        List userDTOS = readExcel(filePath);
        for (UserDTO userDTO :userDTOS){
            System.out.println("user数据:\n");
            System.out.println(userDTO.getCaseInfo());
            System.out.println(userDTO.getCaseNo());
            System.out.println(userDTO.getName());

        }
    }


}

 

你可能感兴趣的:(工作)