最近有一位之前找过小编的用户问了我们小编的一个问题,我相信这也是很多币圈朋友经常会疑惑的问题: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工具类导出数据最多多少条]插图 excelutil工具类[excelutil工具类导出数据最多多少条]](https://picossdata.oss-cn-shenzhen.aliyuncs.com/KeyDatas/2023/03/649780215315012938.jpeg)
导出
现在我们定义好对象了,如何导出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工具类导出数据最多多少条方面的知识可以关注我们,在网站首页进行搜索你想知道的!