Poi
文档读写
先导入jar包
下载地址:https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-4.0.0-20180907.tar.gz
写一个poi工具类读写excle文件
package com.zhiyou100.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import com.zhiyou100.entity.Car;
public class PoiUtil<E>{
public static void main(String[] args) throws Exception{
PoiUtil<Car> pu=new PoiUtil<>();
List<Car> list=new ArrayList<>();
list.add(new Car("car_011", "大众", "豫A1111", new Date(), 2, "黑", 30001f, "11.jpg", 1));
list.add(new Car("car_012", "本田", "豫A1114", new Date(), 1, "白", 30002f, "12.jpg", 1));
list.add(new Car("car_013", "丰田", "豫A1112", new Date(), 3, "红", 30003f, "13.jpg", 1));
list.add(new Car("car_014", "日产", "豫A1113", new Date(), 4, "黑", 30004f, "14.jpg", 1));
pu.createExcel(list, "D:\\poi");
list=pu.readExcel(new FileInputStream(new File("D:\\poi\\Car.xls")), new Car());
System.out.println(list);
}
public void createExcel(List<E> list,String path)throws Exception{
Class cla=list.get(0).getClass();
HSSFWorkbook book=new HSSFWorkbook();
HSSFSheet sheet=book.createSheet(cla.getSimpleName());
HSSFRow row0=sheet.createRow(0);
Field[] fields=cla.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field=fields[i];
field.setAccessible(true);
String fieldName=field.getName();
row0.createCell(i).setCellValue(fieldName);
}
for (int i = 0; i <list.size(); i++) {
Object obj=list.get(i);
HSSFRow rowi=sheet.createRow(i+1);
for (int j = 0; j < fields.length; j++) {
Field field=fields[j];
Object fieldValue=field.get(obj);
HSSFCell cellij=rowi.createCell(j);
if(field.getType()==Date.class){
CellStyle dateStyle=book.createCellStyle();
dateStyle.setDataFormat(book.createDataFormat().getFormat("yyyy-MM-dd"));
cellij.setCellStyle(dateStyle);
}
setCellValue(field,fieldValue,cellij);
}
}
book.write(new File(path,cla.getSimpleName()+".xls"));
book.close();
}
private static void setCellValue(Field field,Object value,HSSFCell cell){
Class type=field.getType();
if(type==int.class||type==Integer.class){
cell.setCellValue((Integer)value);
}else if(type==short.class||type==Short.class){
cell.setCellValue((Short)value);
}else if(type==long.class||type==Long.class){
cell.setCellValue((Long)value);
}else if(type==boolean.class||type==Boolean.class){
cell.setCellValue((Boolean)value);
}else if(type==float.class||type==Float.class){
cell.setCellValue((Float)value);
}else if(type==char.class||type==Character.class){
cell.setCellValue((Character)value);
}else if(type==String.class){
cell.setCellValue((String)value);
}else if(type==byte.class||type==Byte.class){
cell.setCellValue((Byte)value);
}else if(type==double.class||type==Double.class){
cell.setCellValue((Double)value);
}else if(type==Date.class){
cell.setCellValue((Date)value);
}else{
throw new RuntimeException(type+"是不支持的类型!");
}
}
public List<E> readExcel(InputStream in,E e)throws Exception{
Class cla=e.getClass();
HSSFWorkbook book=new HSSFWorkbook(in);
HSSFSheet sheet=book.getSheet(cla.getSimpleName());
HSSFRow row1=sheet.getRow(0);
List<String> fieldNames=new ArrayList<>();
Iterator<Cell> it=row1.cellIterator();
while(it.hasNext()){
Cell cell=it.next();
fieldNames.add(cell.getStringCellValue());
}
List<E> listObj=new ArrayList<>();
for (int i = 1; i < sheet.getLastRowNum(); i++) {
HSSFRow rowi=sheet.getRow(i);
E obj=(E)cla.newInstance();
for (int j = 0; j <rowi.getLastCellNum(); j++) {
Object fieldValue;
HSSFCell cellij=rowi.getCell(j);
if(cellij.getCellType()==CellType.BOOLEAN){
fieldValue=cellij.getBooleanCellValue();
}else if(cellij.getCellType()==CellType.NUMERIC){
fieldValue=cellij.getNumericCellValue();
}else{
fieldValue=cellij.getStringCellValue();
}
Field fieldj=cla.getDeclaredField(fieldNames.get(j));
fieldj.setAccessible(true);
fieldValue=changeValue(fieldj,fieldValue);
fieldj.set(obj, fieldValue);
}
listObj.add(obj);
}
book.close();
return listObj;
}
private static Object changeValue(Field field,Object value){
Class type=field.getType();
if(type==int.class||type==Integer.class){
return (int)((double)value);
}
if(type==short.class||type==Short.class){
return (short)((double)value);
}
if(type==byte.class||type==Byte.class){
return (byte)((double)value);
}
if(type==long.class||type==Long.class){
return (long)((double)value);
}
if(type==float.class||type==Float.class){
return (float)((double)value);
}
if(type==java.util.Date.class){
return new Date((long)((double)value));
}
return value;
}
}
写个页面验证一下
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Car implements Serializable{
private String carId;
private String carLogo;
private String carNumber;
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date carTime;
private Integer carZuo;
private String carColor;
private Float carPrice;
private String carPhoto;
private Integer carStatus;
}
@RequestMapping("/car")
@Controller
public class CarController {
@Autowired
private CarService carService;
@RequestMapping("/excel/createFile.action")
public ResponseEntity<byte[]> excelCreateFileMethod(HttpServletRequest req)throws Exception{
List<Car> list=carService.getAll();
PoiUtil<Car> poi=new PoiUtil<>();
String path=req.getServletContext().getRealPath("/");
poi.createExcel(list, path);
File file=new File(path,"Car.xls");
String type=req.getServletContext().getMimeType(file.getName());
byte[] arr=FileUtils.readFileToByteArray(file);
HttpHeaders headers=new HttpHeaders();
headers.set("Content-Type", type);
headers.set("Content-Disposition", "attachment;filename="+URLEncoder.encode(file.getName(), "utf-8"));
ResponseEntity<byte[]> entity=new ResponseEntity<byte[]>(arr,headers,HttpStatus.OK);
return entity;
}
@RequestMapping("/excel/readFile.action")
public String excelReadFileMethod(@RequestParam("excel")MultipartFile excel,HttpServletRequest req)throws Exception{
PoiUtil<Car> poi=new PoiUtil<>();
List<Car> list=poi.readExcel(excel.getInputStream(), new Car());
for (Car car : list) {
carService.addOne(car);
}
req.setAttribute("message", "读取excel成功!");
return "car_manager";
}
}
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<div class="div_a">
<a href="<c:url value='/car/excel/createFile.action'/>">导出excel</a> |
<form action="<c:url value='/car/excel/readFile.action'/>" method="post" enctype="multipart/form-data" style="display: inline;">
<input type="file" name="excel"/>
<input type="submit" value="读取excel"/>
</form>
</div>
结果展示
- 读数据库数据到excel