excelutil工具类[excelutil工具类导出数据最多多少条]

区块链3年前 (2023)发布 EditorY
7,146 0

最近有一位之前找过小编的用户问了我们小编的一个问题,我相信这也是很多币圈朋友经常会疑惑的问题:excelutil工具类相关问题,excelutil工具类导出数据最多多少条相关问题,带着这一个问题,让专业的小编告诉您原因。

EasyPoi是一款开源的软件,用于开发EXCEL表格的导入和导出功能,简单易上手,代码量也很少,非常适合初学者去使用。我们使用Java开发Excel导入导出功能,以前常用的是Poi,但是需要编写的代码量太多,使用EasyPoi仅需要在代码中添加注解,便可以完成大部分普通的Excel编辑工作。

工具/材料

IntelliJ IDEA

我们是使用Maven管理项目,首先我们需要添加开发EasyPoi所依赖的jar包,如下所示。

dependency

groupIdcn.afterturn/groupId

artifactIdeasypoi-base/artifactId

version3.1.0/version

/dependency

dependency

groupIdcn.afterturn/groupId

artifactIdeasypoi-web/artifactId

version3.1.0/version

/dependency

dependency

groupIdcn.afterturn/groupId

artifactIdeasypoi-annotation/artifactId

version3.1.0/version

/dependency

EasyPoi 可以自适应Excel的xls和xlsx两种格式,我们今天主要讲解使用注解进行导入和导出的功能,我们只要修改注解就可以修改Excel的字段和格式。我们需要编写实体和Excel表格的对应关系,在实体上添加注解。@Excel 注解作用到filed(列)上面,是对列的描述。@Excel注解的name属性即为列名,format用于设置时间的格式。我们创建一个PersonEntity,实现序列化接口,并添加如下的注解,另外该类需要getter和setter方法。

我们写一个测试类去测试导出功能,创建一个测试类,并在main方法中编写测试代码,我们使用easypoi工具类ExcelExportUtil 的exportExcel方法,其中new ExportParams()是标题和sheet的基本设置,当然这些设置有些不是必须的,可以根据需要自行修改。具体的导出代码如下图所示。

下面我们右键执行该方法,此时会生成一个excel文件,如下图所示,我们可以看到设置的标题和数据已存在该excel表格中。

下面我们编写导入的方法,将上面生成的excel表格导入,使用ExcelImportUtil工具类的importExcel方法,ImportParams用于设置导入参数。

下面我们测试导入功能,在执行方法后提示创建对象异常,我们需要检查异常的原因,此时发现我们上面创建的实体类没有无参构造方法,因为我们已经创建了一个有参的构造,就不会帮我们自动创建无参构造了,因此我们需要手动创建,如下图所示。

另外,我们在编写PersonEntity实体类时,步骤2的id字段上面没有@Excel注解,所以该字段不起任何作用,若不需要的话可以删除。

特别提示

EasyPoi注解作用的实体类一定要有无参构造,若实体类中存在有参构造,一定要手动创建一个无参构造。

excelutil工具类[excelutil工具类导出数据最多多少条]

导出

现在我们定义好对象了,如何导出Excel –ExcelExportUtil 这个导出工具类

public void testExportExcel_1() throws Exception {

ExportParams params = new ExportParams(“0328课程表”, “日期:2016-03-28”, “六年一班”);

Workbook workbook = ExcelExportUtil.exportExcel(params, CourseEntity.class,courseList);

FileOutputStream fos = new FileOutputStream(“D:/excel/0328课程表.xls”);

workbook.write(fos);

fos.close();

}

我们只要把我们定义好的对象的class传进去,以及对象的集合,Easypoi就可以返回一个Excel的workbook了,同时Easypoi是兼容03版本office和07版本office,你要穿个参数指定下类型及可以了,是不是不是比我们自己写代码简单多了,最少只需要2行代码就可以完成我们的office操作了

导入

我们把导出写完了,导入是不是很复杂呢,也不是,导入也是同样简单,定时实体和上面定义的方式一样

导入是用导入工具类

ImportParams params = new ImportParams();

params.setHeadRows(2);

ListCourseEntity list = ExcelImportUtil.importExcel(inputStream, CourseEntity.class, params);

定义下表头的参数,然后把流传入进去就可以得到我们的对象列表是不是so easy.赶快来使用吧

方法/步骤

一,??ExcelUtils?工具类(也就是解析EXCEL文件,判断EXCEL的类型以及数据的类型)

import??java.io.IOException;

import??java.io.InputStream;

import??java.math.BigDecimal;

import??java.text.SimpleDateFormat;

import??java.util.ArrayList;

import??java.util.Date;

import??java.util.List;

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.Row;

import??org.apache.poi.ss.usermodel.Sheet;

import??org.apache.poi.ss.usermodel.Workbook;

import??org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelUtils {

private?final?static??String excel2003L =?“.xls”?;????// 2003-版本的excel

private?final?static??String excel2007U =?“.xlsx”?;???// 2007 +版本的excel

/ **

*描述:获取IO流中的数据,组装成List List Object对象

* @param in,fileName

* @返回

* @throws IOException

* /

public???List List Object getBankListByExcel(InputStream in,String fileName)??throws??Exception {

列表List Object list =??null?;

//创建的Excel工作薄

Workbook work =??this?.getWorkbook(in,fileName);

if?(null??== work){

抛出新的?异常(“创建Excel工作薄为空!”?);

}

Sheet sheet =??null?;??//页数

行row =??null?;??//行数

Cell cell =??null?;??//列数

list =??new??ArrayList List Object ();

//遍历的Excel中所有的片

for??(int??i =??0?; i work.getNumberOfSheets(); i ++){

sheet = work.getSheetAt(i);

if?(sheet ==?null?){?continue?;}

//遍历当前片中的所有行

for??(int??j = sheet.getFirstRowNum(); j = sheet.getLastRowNum(); j ++){

row = sheet.getRow(j);

if?(row ==?null?|| row.getFirstCellNum()== j){?continue?;}

//遍历所有的列

列表Object li =??new??ArrayList Object();

for??(int??y = row.getFirstCellNum(); y row.getLastCellNum(); y ++){

cell = row.getCell(y);

li.add(this?.getValue(cell));

}

list.add(LI);

}

}

return 单

}

/ **

*描述:根据文件后缀,自适应上传文件的版本

* @param inStr,fileName

* @返回

* @throws异常

* /

public???Workbook getWorkbook(InputStream inStr,String fileName)??throws??Exception {

工作簿wb =??null?;

String fileType = fileName.substring(fileName.lastIndexOf(“。”?));

if?(excel2003L.equals(fileType)){

wb =??new??HSSFWorkbook(inStr);??// 2003-

}?else?if?(excel2007U.equals(fileType)){

wb =??new??XSSFWorkbook(inStr);??// 2007 +

}?else?{

抛出新的?异常(“解析的文件格式有误!”?);

}

返回?wb;

}

/ **

*描述:对表格中数值进行格式化

* @param单元格

* @返回

* /

//解决擅长类型问题,获得数值

public???String getValue(Cell cell){

String value =??“”?;

if?(null?== cell){

返回?值

}

switch??(cell.getCellType()){

//数值型

案例?Cell.CELL_TYPE_NUMERIC:

if??(HSSFDateUtil.isCellDateFormatted(cell)){

//如果是date类型则,获取该单元格的日期值

Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());

SimpleDateFormat format =??new??SimpleDateFormat(“yyyy-MM-dd”?);

value = format.format(date);;

}?else??{?//纯数字

BigDecimal big =?new??BigDecimal(cell.getNumericCellValue());

value = big.toString();

//解决1234.0去掉后面的.0

if?(null?!= value !“”.?equals(value.trim())){

String [] item = value.split(“[。]”?);

if?(1?item.length ?“0”?.equals(item [?1?])){

value = item [?0?];

}

}

}

break;

//字符串类型

案例?Cell.CELL_TYPE_STRING:

value = cell.getStringCellValue()。toString();

break;

//公式类型

案例?Cell.CELL_TYPE_FORMULA:

//读公式计算值

value = String.valueOf(cell.getNumericCellValue());

if??(value.equals(“NaN”?)){?//如果获取的数据值为非法值,则转换为获取字符串

value = cell.getStringCellValue()。toString();

}

break;

//布尔类型

案例?Cell.CELL_TYPE_BOOLEAN:

value =??“”?+ cell.getBooleanCellValue();

break;

默认值:

value = cell.getStringCellValue()。toString();

}

if?(“null”?.endsWith(value.trim())){

value =?“”?;

}

返回?值

}

}

二,定义两个实体类,一个是对于的Excel文件,解析它的数据(ExcelBean),另一个是导入数据库表的实体类(人)

ExcelBean.java

strong span style =?“font-size:18px;”??import??org.apache.poi.xssf.usermodel.XSSFCellStyle;

公共类?ExcelBean??实现?java.io.Serializable {

private??String headTextName;?//列头(标题)名

private??String propertyName;?//对应字段名

私有?整数列;?//合并单元格数

私人?XSSFCellStyle cellStyle;

public??ExcelBean(){

}

public??ExcelBean(String headTextName,String propertyName){

这个.headTextName = headTextName;

这个.propertyName = propertyName;

}

public??ExcelBean(String headTextName,String propertyName,Integer cols){

super?();

这个.headTextName = headTextName;

这个.propertyName = propertyName;

这个.cols = cols;

}

public??String getHeadTextName(){

return??headTextName;

}

public?void??setHeadTextName(String headTextName){

这个.headTextName = headTextName;

}

public??String getPropertyName(){

return??propertyName;

}

public?void??setPropertyName(String propertyName){

这个.propertyName = propertyName;

}

public??Integer getCols(){

返回列?;

}

公共无效???setCols(Integer cols){

这个.cols = cols;

}

上市??XSSFCellStyle getCellStyle(){

返回??cellStyle;

}

公共无效???setCellStyle(XSSFCellStyle cellStyle){

这个?.cellStyle = cellStyle;

}

} / span / strong

people.java

import??java.util.Date;

公共课?人

私有?整数id

private??String userName;

私人?字符串密码;

私人?整数年龄;

私人?日期;

public??Integer getId(){

返回??id

}

public?void??setId(Integer id){

这个.id = id;

}

public??String getUserName(){

return??userName;

}

public?void??setUserName(String userName){

这个.userName = userName ==??null????null??:userName.trim();

}

public??String getPassword(){

返回?密码

}

public?void??setPassword(String password){

这个.password = password ==??null????null??:password.trim();

}

public??Integer getAge(){

回归?年龄

}

public?void??setAge(Integer age){

这个.age = age

}

public??Date getDate(){

退货?日期

}

public?void??setDate(Date date){

这个.date = date

}

}

首先了解以下excel文件怎么和poi中的组件对应起来的。

基于以上几条,如果想对excel文件进行读写的话就要

基于以上原理就可以轻松对Excel文件进行读写,这里以XSSFWorkbook(对应.xlsx文件即office2007以上版本,如果是.xls文件即office2003以下版本需要使用HSSFWorkbook)为例进行Excel的简单读写。

maven依赖

写操作

读操作和写操作类似,把create的地方换成get即可

当然也可以根据文件扩展名自动选择使用哪个子类生成Workbook对象,这里直接封一个util工具类,方便以后直接使用

以上就是小编小编对excelutil工具类和excelutil工具类导出数据最多多少条的总结,更多excelutil工具类导出数据最多多少条方面的知识可以关注我们,在网站首页进行搜索你想知道的!

© 版权声明

相关文章