java读取excel文件

java读取excel文件有相应的插件:jxl、easyexcel、poi

今天来讲jxl与easyexcel的实战!

jxl读取excel,只能是2003版的excel   读取2007 版的excel会报错

此时,如果你的excel是07版的,那么可以另存为03版的


jxl的应用

1.引入jar包

<dependency>
     <groupId>net.sourceforge.jexcelapi</groupId>
     <artifactId>jxl</artifactId>
     <version>2.6.10</version>
</dependency>

2.创建一个excel对应的实体类,类的属性对应excel的列(我这里起名为Demo)

class Demo {
		private String url;

		private String phone;

		private String contract_id;

		public String getUrl() {
			return url;
		}

		public void setUrl(String url) {
			this.url = url;
		}

		public String getPhone() {
			return phone;
		}

		public void setPhone(String phone) {
			this.phone = phone;
		}

		public String getContract_id() {
			return contract_id;
		}

		public void setContract_id(String contract_id) {
			this.contract_id = contract_id;
		}
	}

3.写读取方法(将excel数据转为list对象,以便对此处理)

public List readExcel(File file) {
    try {
         // 创建输入流,读取Excel
	InputStream is = new FileInputStream(file.getAbsolutePath());
	// jxl提供的Workbook类
	Workbook wb = Workbook.getWorkbook(is);
	// Excel的页签数量
	int sheet_size = wb.getNumberOfSheets();
	for (int index = 0; index < sheet_size; index++) {
	    List<Demo> outerList = Lists.newArrayList();
	    // 每个页签创建一个Sheet对象
	    Sheet sheet = wb.getSheet(index);
	    // sheet.getRows()返回该页的总行数
	    for (int i = 1; i < sheet.getRows(); i++) {
	    // sheet.getColumns()返回该页的总列数
	    Demo Demo = new Demo();
	    Demo.setContract_id(sheet.getCell(0, i).getContents());
	    Demo.setPhone(sheet.getCell(2, i).getContents());
	    Demo.setUrl(sheet.getCell(1, i).getContents());
	    outerList.add(Demo);
	}
	    return outerList;
	}
	} catch (FileNotFoundException e) {
			e.printStackTrace();
	} catch (BiffException e) {
			e.printStackTrace();
	} catch (IOException e) {
			e.printStackTrace();
	}
	    return null;
	}

esayexcel的应用

easyexcel使用起来更方便了,代码也更简洁了,其实相当于把一些方法给封装好,我们直接调用即可。

1.导入jar包

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>easyexcel</artifactId>
     <version>2.1.6</version>
</dependency>

2.建立实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PhoneAttachExcel{
    @ExcelProperty(index = 0,value = "联络标识")
    private String contract_id;

    @ExcelProperty(index = 1,value = "录音地址")
    private String url;

//    这个参数没有用到  存放什么都行
    @ExcelProperty(index = 2,value = "手机号")
    private String phone;
}

3.写一个类集成AnalysisEventListener,泛型填写步骤2创建的entity,重写invoke方法

public class ReadExcelUtil extends AnalysisEventListener<PhoneAttachExcel> {
//    定义一个list,存放excel解读出来的数据
    List<PhoneAttachExcel> list =new ArrayList<>();
//    解析完一行,就会执行这个方法
    @Override
    public void invoke(PhoneAttachExcel data, AnalysisContext context) {
        list.add(data);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {

    }
}

4.应用

public class Test {
    public static void main(String[] args) {
        ReadExcelUtil readExcelUtil = new ReadExcelUtil();
        File file = new File("D:/lldizhi1.xls");
        EasyExcel.read(file,ReadExcelUtil.class,readExcelUtil)
                .sheet()
                .headRowNumber(1)
                .doRead();
        List<PhoneAttachExcel> list = readExcelUtil.list;
    }
}

距离上一次写博客,既然还是2个月钱,我的knowledge呀~~~

知识只有学到自己脑子里,才是自己的

啥都一样,靠别人靠不来

所有的所有,只能靠自己!