struts2结合poi-3.7实现excel文件数据导入

   我们也可能会实现这样的功能,将excel中的数据导入到数据库中,同样可以实现,所需的jar包以及相关文档参见我的前一篇博客:struts2结合poi-3.7实现将数据导出为excel,环境变量和框架都搭建好了,那么我们就开始吧,同样和struts2实现文件上传的方式差不多,只不过在读取到excel后,poi对excel文件有了自己的处理方式!

1、页面jsp页面:

  <body>
    <form action="<%=basePath%>uploadExcel.do" method="post" enctype="multipart/form-data">
       <!-- name名称和Action中File对象的取名要一样哦 -->
       <input type="file" name="excelFile"/><input type="submit" value="导入数据"/>
    </form>
  </body>


2、编写我们的用来封装接收处理的excel的bean类文件:ExcelWorkSheet

package com.repair.query.action;

import java.util.ArrayList;
import java.util.List;

/**
 * 处理excel导入bean类
 * @author Administrator
 *
 * @param <T>
 */
public class ExcelWorkSheet<T> {
	
    private String sheetName;   
    private List<T> data = new ArrayList<T>();  //数据行   
    private List<String> columns; //列名   
    
	public String getSheetName() {
		return sheetName;
	}
	public void setSheetName(String sheetName) {
		this.sheetName = sheetName;
	}
	public List<T> getData() {
		return data;
	}
	public void setData(List<T> data) {
		this.data = data;
	}
	public List<String> getColumns() {
		return columns;
	}
	public void setColumns(List<String> columns) {
		this.columns = columns;
	}

}


3、编写我们处理的action类:

package com.repair.query.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

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;

import com.repair.common.pojo.JCZXFixRec;

/**
 * 导入excel数据
 * @author Administrator
 *
 */
public class UploadExcelAction {
	
	private File excelFile;//与jsp页面的file标签的name属性一样
	private String excelFileFileName;//File对象的名称+FileName,一定要这样写,不然名称获取不到
	private ExcelWorkSheet<JCZXFixRec> excelWorkSheet;//将数据记录封装为我们需要的对象
	
	public String execute() throws Exception{
		Workbook workBook=createWorkbook(new FileInputStream(excelFile));
		Sheet sheet=workBook.getSheetAt(0);//得到第一个sheet
		excelWorkSheet=new ExcelWorkSheet<JCZXFixRec>();
		Row firstRow=sheet.getRow(0);//得到第一行,也就是列名
		Iterator<Cell> iterator=firstRow.cellIterator();//得到第一行的一个迭代器
		List<String> cellNames=new ArrayList<String>();
		//将列名取出来
		while(iterator.hasNext()){
			cellNames.add(iterator.next().getStringCellValue());
		}
		excelWorkSheet.setColumns(cellNames);
		JCZXFixRec jczxFixRec=null;
		//遍历各列数据,并将其取出来放到excelWorkSheet中
		for(int i=1;i<=sheet.getLastRowNum();i++){
			Row row=sheet.getRow(i);
			jczxFixRec=new JCZXFixRec();
			jczxFixRec.setUnitName(row.getCell(0).getStringCellValue());
			jczxFixRec.setItemName(row.getCell(1).getStringCellValue());
			jczxFixRec.setFixSituation(row.getCell(3).getStringCellValue());
			excelWorkSheet.getData().add(jczxFixRec);
		}
		for(int j=0;j<excelWorkSheet.getData().size();j++){
			JCZXFixRec rec=excelWorkSheet.getData().get(j);
			System.out.println(rec.getItemName());//或者插入到数据库中
		}
		return "success";
	}
	
	//判断文件类型创建Workbook对象
    public Workbook createWorkbook(InputStream is) throws IOException{
    	if(excelFileFileName.toLowerCase().endsWith("xls")){
    		return new HSSFWorkbook(is);
    	}
    	if(excelFileFileName.toLowerCase().endsWith("xlsx")){
    		return new XSSFWorkbook(is);
    	}
    	return null;
    }

	public File getExcelFile() {
		return excelFile;
	}
	public void setExcelFile(File excelFile) {
		this.excelFile = excelFile;
	}
	public String getExcelFileFileName() {
		return excelFileFileName;
	}

	public void setExcelFileFileName(String excelFileFileName) {
		this.excelFileFileName = excelFileFileName;
	}

	public ExcelWorkSheet<JCZXFixRec> getExcelWorkSheet() {
		return excelWorkSheet;
	}

	public void setExcelWorkSheet(ExcelWorkSheet<JCZXFixRec> excelWorkSheet) {
		this.excelWorkSheet = excelWorkSheet;
	}
	
}

示列中只是将excel文件中的数据取出来,然后将其打印出来了,要执行插入到数据库,我们可以编写我们处理的dao类,将其插入到数据库中即可,这样我们的数据就轻松的从excel文件中导入到数据库里面了,大家可以尝试一下!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值