`
suhongliang5332
  • 浏览: 23709 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Struts2 Excel导入,导出!支持hashMap和Model作为参数

阅读更多
导入包
dom4j-1.6.1.jar
poi-3.9-20121203.jar
poi-ooxml-3.9-20121203.jar
poi-ooxml-schemas-3.9-20121203.jar
stax-api-1.0.1.jar
xmlbeans-2.3.0.jar
------------Excel导出------------------
Excel接口类
package com.XXX.lib.global.excel;

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

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

import com.XXXX.lib.fintface.IdentiIntface;

public interface ExcelObjIntface {
	/**
	 * excel下载
	 */
	public void excelDownLoad();
	/**
	 * 创建一个Excel
	 * @return
	 */
	public Workbook creatWorkBook();
	/**
	 * 创建一个sheet数组
	 * @param sheetNames
	 * @return
	 */
	public ArrayList<Sheet> creatSheet(ArrayList<String> sheetNames);
	/**
	 * 创建一个sheet
	 * @param sheetName
	 * @return
	 */
	public Sheet creatSheet(String sheetName);
	/**
	 * 创建一个简单头部
	 * @param sheet
	 * @param headValues
	 * @return
	 */
	public int creatSheetHeads(Sheet sheet,List<String> headValues);
	/**
	 * 根据HashMap生成数据
	 * @param sheet sheet
	 * @param cellValues
	 * @return
	 */
	public int creatSheetCellsByMap(Sheet sheet, List<Map<Object, Object>> cellValues);
	/**
	 * 根据模型生成数据
	 * @param sheet sheet
	 * @param model 模型列表
	 * @return 生成最后一条数据所在的行数
	 */
	public int creatSheetCellsByModel(Sheet sheet,List<IdentiIntface> model);
	/**
	 * 结束并生成Excel
	 * @param ExcelName,Excel的名称
	 */
	public void finishWorkBook(String ExcelName);
	
	
	
	/**
	 * 获得一个workBook;
	 * @param ExcelFullName
	 * @return
	 */
	public Workbook getReadExcel(String ExcelFullName);
	/**
	 * 获得一个sheet
	 * @param readwb
	 * @return
	 */
	public Sheet getReadSheet(int sheetAt);
	/**
	 * 获得一个制定的值
	 * @param sheet
	 * @param row
	 * @param cell
	 * @return
	 */
	public String getReadCellValue(Sheet sheet,int rowNum,int cellNum);
	
	
	public void init();
}


Excel抽象类
package com.XXX.lib.global.excel;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
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.ss.usermodel.WorkbookFactory;

import com.XXX.lib.fintface.IdentiIntface;
import com.XXX.lib.global.constant.ExcelConstant;
import com.XXX.lib.global.util.ClassUtil;

/**
 * http://poi.apache.org/spreadsheet/quick-guide.html#NewSheet
 * Excel父类,抽象类
 */
public abstract class ExcelObjAbstract implements ExcelObjIntface{
	protected Workbook wb;
	private Workbook readwb;
	private List<Object> heads;
	private int startCols;//输出开始列
	private int startRows;//输出开始行
	private int headHeight;//设置头部高度
	private int bodyHeight;//设置身体高度
	private String Suffix;
	public ExcelObjAbstract(){
		this.excelDownLoad();
	}
	@Override
	public ArrayList<Sheet> creatSheet(ArrayList<String> sheetNames) {
		ArrayList<Sheet> sheetArray = new ArrayList<Sheet>();
		for (String sheetName : sheetNames) {
			Sheet tmpsheet = wb.createSheet(sheetName);
			sheetArray.add(tmpsheet);
		}
		return sheetArray;
	}
	@Override
	public Sheet creatSheet(String sheetName) {
		Sheet sheet = wb.createSheet(sheetName);
		return sheet;
	}
	@Override
	public int creatSheetHeads(Sheet sheet, List<String> headValues) {
		HashMap<String, CellStyle> styles = this.headStyle();
		heads = new ArrayList<Object>();
		Row row = sheet.createRow(startRows);//第一行
		if(headHeight!=0){
			row.setHeight((short)headHeight);
		}
		for(int i=0;i<headValues.size();i++) {
			String[] keys = headValues.get(i).split(",");
			heads.add(keys[0]);//把列名放到集合中
			Cell cell = row.createCell(i+startCols);
			cell.setCellStyle(styles.get("headBlack4"));  
			if(keys.length>=2){//第二项存在[并且语言为中文]
				cell.setCellValue(keys[1]);
			}
//			else if(keys.length>=3){//第三项存在[并且语言为韩文]
//				cell.setCellValue(keys[2]);
//			}
			if(keys.length>=4){//第四项存在,就设置列宽[注:第四个字段为最大字符串长度]
				sheet.setColumnWidth(i+startCols, Integer.parseInt(keys[3])*256);
			}
			//默认
		}
		return headValues.size();
	}
	@Override
	public int creatSheetCellsByMap(Sheet sheet, List<Map<Object, Object>> cellValues) {
		HashMap<String, CellStyle> styles = this.bodyStyle();
		for(int i=0;i<cellValues.size();i++) {
			Row row = sheet.createRow(startRows+i+1);//因为第一行为题目,故从第二行开始输出正文
			if(bodyHeight!=0){
				row.setHeight((short)bodyHeight);
			}
			for(int j=0;j<cellValues.get(i).size();j++) {
				Cell cell = row.createCell(j);
				Object eValue = cellValues.get(i).get(heads.get(j));
				if(eValue==null){
					eValue = "  ";
				}
				cell.setCellValue(eValue.toString());
				cell.setCellStyle(styles.get("bodyBlack4"));
			}
		}
		return cellValues.size();
	}
	@Override
	public int creatSheetCellsByModel(Sheet sheet,List<IdentiIntface> modelList){
		HashMap<String, CellStyle> styles = this.bodyStyle();
		for(int i=0;i<modelList.size();i++) {
			Row row = sheet.createRow(startRows+i+1);//因为第一行为题目,故从第二行开始输出正文
			if(bodyHeight!=0){
				row.setHeight((short)bodyHeight);
			}
			for(int j=0;j<heads.size();j++) {
				Cell cell = row.createCell(startCols+j);
				//通过字符串获得属性值
				Object eValue = ClassUtil.getFieldValueByName(heads.get(j).toString(),modelList.get(i));
				if(eValue==null){
					eValue = "  ";
				}
				cell.setCellValue(eValue.toString());
				cell.setCellStyle(styles.get("bodyBlack4"));
			}
		}
		return modelList.size();
	}
	@Override
	public void finishWorkBook(String ExcelName) {
		String realExcelName = ExcelConstant.DEFAULT_OUT_PATH+ExcelName+Suffix;
		try {
			 FileOutputStream fileOut = new FileOutputStream(realExcelName);
			 wb.write(fileOut);
			 fileOut.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//内容样式集合
	private HashMap<String, CellStyle> bodyStyle(){
		 HashMap<String, CellStyle> styles = new HashMap<String, CellStyle>();
		//内容样式一: 四个边框 黑色,无底色,上下居中,左右居中
	    CellStyle style = wb.createCellStyle();
	    //设置字体
        Font headFont = wb.createFont();
        headFont.setFontHeightInPoints((short)9);
        headFont.setColor(IndexedColors.BLACK.getIndex());
        headFont.setFontName("宋体");
        style.setFont(headFont);
        //设置边框
	    style.setBorderBottom(CellStyle.BORDER_THIN);
	    style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
	    style.setBorderLeft(CellStyle.BORDER_THIN);
	    style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
	    style.setBorderRight(CellStyle.BORDER_THIN);
	    style.setRightBorderColor(IndexedColors.BLACK.getIndex());
	    style.setBorderTop(CellStyle.BORDER_THIN);
	    style.setTopBorderColor(IndexedColors.BLACK.getIndex());
	    //设置居中
	    style.setAlignment(CellStyle.ALIGN_CENTER);
	    style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
	    styles.put("bodyBlack4", style);
	  
	    return styles;
	}
	//头部样式集合
	private HashMap<String, CellStyle> headStyle(){
		HashMap<String, CellStyle> styles = new HashMap<String, CellStyle>();
		//	头部样式一: 四个边框 黑色,深灰色底色,上下居中,左右居中
	    CellStyle style = wb.createCellStyle();
	    //设置字体
        Font headFont = wb.createFont();
        headFont.setFontHeightInPoints((short)11);
        headFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
        headFont.setColor(IndexedColors.BLACK.getIndex());
        headFont.setFontName("宋体");
        style.setFont(headFont);
	    //设置边框
	    style.setBorderBottom(CellStyle.BORDER_THIN);
	    style.setBottomBorderColor(IndexedColors.BLACK.getIndex());
	    style.setBorderLeft(CellStyle.BORDER_THIN);
	    style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
	    style.setBorderRight(CellStyle.BORDER_THIN);
	    style.setRightBorderColor(IndexedColors.BLACK.getIndex());
	    style.setBorderTop(CellStyle.BORDER_THIN);
	    style.setTopBorderColor(IndexedColors.BLACK.getIndex());
	    //设置背景颜色
        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
        //设置居中      
	    style.setAlignment(CellStyle.ALIGN_CENTER);
	    style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
	    styles.put("headBlack4", style);
	    
	    return styles;
	}
	@Override
	public Workbook getReadExcel(String ExcelFullName) {
		try{
			InputStream inp = new FileInputStream(ExcelFullName);
			readwb = WorkbookFactory.create(inp);
		}catch (Exception e) {
			e.printStackTrace();
		}
		return readwb;
	}
	@Override
	public Sheet getReadSheet(int sheetAt) {
		return readwb.getSheetAt(sheetAt);
	}
	@Override
	public String getReadCellValue(Sheet sheet, int rowNum, int cellNum) {
		Row row = sheet.getRow(rowNum);
		Cell cell = row.getCell(cellNum);
		return cell.toString();
	}
	@Override
	public void excelDownLoad() {
		this.init();
		this.creatWorkBook();
		this.setStartColsRows(1, 1);
	}
	
	/**
	 * 集中设置开始行列
	 * @param startCols
	 * @param startRows
	 */
	public void setStartColsRows(int startCols,int startRows){
		this.setStartCols(startCols);
		this.setStartRows(startRows);
	}
	/**
	 * 集中设置高度
	 * @param headHeight
	 * @param bodyHeight
	 */
	public void setHeadBodyHeight(int headHeight,int bodyHeight){
		this.setHeadHeight(headHeight);
		this.setBodyHeight(bodyHeight);
	}
	public int getStartCols() {
		return startCols;
	}
	public void setStartCols(int startCols) {
		this.startCols = startCols;
	}
	public int getStartRows() {
		return startRows;
	}
	public void setStartRows(int startRows) {
		this.startRows = startRows;
	}
	public String getSuffix() {
		return Suffix;
	}
	public void setSuffix(String suffix) {
		Suffix = suffix;
	}
	public int getHeadHeight() {
		return headHeight;
	}
	public void setHeadHeight(int headHeight) {
		this.headHeight = headHeight;
	}
	public int getBodyHeight() {
		return bodyHeight;
	}
	public void setBodyHeight(int bodyHeight) {
		this.bodyHeight = bodyHeight;
	}
	
	
}

Excel2007
package com.XXX.lib.global.excel;

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Excel2007 extends ExcelObjAbstract{
	public Excel2007(){
		super();
	}
	
	@Override
	public Workbook creatWorkBook() {
		wb = new XSSFWorkbook();
		return wb;
	}
	public void init(){
		super.setSuffix(".xlsx");
	}
	
}


Excel2003
package com.XXX.lib.global.excel;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;

public class Excel2003  extends ExcelObjAbstract{
	public Excel2003(){
		super();
	}
	
	@Override
	public Workbook creatWorkBook() {
		wb = new HSSFWorkbook();
		return wb;
	}
	public void init(){
		super.setSuffix(".xls");
	}
	
}


调用
		String fj = excelDate.format(new Date());
		List<String> headMas= new ArrayList<String>();
		headMas.add("lodging_id,xx,i,20");
		headMas.add("room_count,xx,i");
		String fileName = "xx"+fj;
		Excel2007 excel2007 = new Excel2007();
		Sheet sheet = excel2007.creatSheet("xx");
		excel2007.creatSheetHeads(sheet,headMas);
		excel2007.creatSheetCellsByModel(sheet, result);
		excel2007.finishWorkBook(fileName);
		


------------Excel导入------------------
上传Excel文件
	public String fileUpload(){
	 	File[] srcfiles = updExcel;
		if( srcfiles != null ){
			for(int i=0;i<srcfiles.length;i++){
				int fileId = lodgService.seqkey();//唯一id
		        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); 
		        String tmpStr = sdf.format(new Date());
			    String tmpYyyymm = tmpStr;
				String fileName = updExcelFileName[i];//文件名称
				String extension = FileUtil.getFileExtension(fileName);//类型
				if(extension.equals(".xlsm")){
					String newFileName = "xxxx"+fileId+".xlsm";//新文件名
					String filePath =  Constant.FILE_DEFAULT_UPLOAD + tmpYyyymm + "_" + newFileName;
					File file = new File(filePath);
					FileUtil.copy(updExcel[i], file);
					if(excelInAppoint(filePath)){
						this.setInfoString("Excel导入成功");
					}else{
						this.setInfoString("Excel导入失败");
					}
				}
			}
		}
		search();
		return "fileUpload";
	}

读取Excel文件
	private boolean excelInAppoint(String filePath){
		Excel2007 excel2007 = new Excel2007();
		excel2007.getReadExcel(filePath);
		Sheet sheet = excel2007.getReadSheet(0);
		//TODO 生成服务器端校验码
		String testStr = excel2007.getReadCellValue(sheet, 1, 2);//获得客户端校验码
		String[] testArr = testStr.split("-");
        SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd"); 
        String tmpStr = sdf.format(new Date());
        int totleCols = Integer.parseInt(testArr[4]);
		if( tmpStr.equals(testArr[0]) && testArr[1].equals("0")){
			for(int i=4;i<totleCols;i++){//遍历所有行
				//TODO 插入数据
				lodgModel.setLodging_id(excel2007.getReadCellValue(sheet, i, 1));
				lodgModel.setAp_date(excel2007.getReadCellValue(sheet, i, 2));
				lodgModel.setAp_code(excel2007.getReadCellValue(sheet, i, 3));
				lodgModel.setCuser(excel2007.getReadCellValue(sheet, i, 4));
				lodgModel.setStatus(excel2007.getReadCellValue(sheet, i, 5));
				lodgModel.setEmpno(excel2007.getReadCellValue(sheet, i, 6));
				empInto();
			}
			return true;
		}else{
			return false;
		}
	}	
	
分享到:
评论

相关推荐

    jexcelapi_2_6_12用java实现excel导入导出

    Java中的Excel操作是许多开发人员在处理数据时经常会遇到的需求,尤其在数据分析、报表生成或者数据导入导出的场景中。jExcelAPI是一款强大的开源Java库,它允许开发者使用Java来读取、写入和修改Microsoft Excel...

    注解式excel导出/导入(poi)

    自己封装的excel导出/导入,可以根据注解来导出excel.本项目一共有13个类,里面还包含了一个反射工具,一个编码工具,10分值了。下面是测试代码 public class Test { public static void main(String[] arg) throws ...

    excel工具类,excel导入,excel导出各种格式

    poi操作excel工具类,excel导入,excel导出各种格式,如List&lt;HashMap,Object&gt;&gt;,List格式,使用方法见:https://blog.csdn.net/lingyancangqiong中的excel工具类

    Excel导入例子 java版

    后台方法使用Java语言实现,使用了 Struts 2 框架的Action类来处理文件上传和导入操作。方法名为importExcelData,返回类型为Renderer,用于处理文件上传和导入结果。 文件上传和导入过程 文件上传和导入过程可以...

    java excl 导入导出

    "java excl 导入导出"这个主题主要涉及到如何使用Java来实现Excel文件的导入和导出功能。在这个示例中,我们有三个关键组件:`ImportExl.java`、`ExportExl.java`和API说明文档,以及可能用到的一些第三方库的jar包...

    Struts2 支持REST 代码

    Struts2是一款强大的Java Web框架,它为开发者提供了一种结构化的MVC(Model-View-Controller)开发模式,使得Web应用的构建更加简洁、高效。REST(Representational State Transfer)是一种架构风格,用于构建可...

    java编写根据模板导出excel

    根据excel模板动态导出数据库数据 package text; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.servlet....

    jsp导出excel并支持分sheet导出的方法.docx

    ### JSP导出Excel并支持分Sheet导出的方法详解 #### 概述 在Web开发领域,特别是使用Java Server Pages (JSP)进行后端处理的应用程序中,经常需要将数据库中的数据导出到Excel文件中供用户下载或进一步处理。这种...

    安卓加载excel数据并导出

    2. **第三方库支持**:由于Android原生不支持直接读写Excel文件,通常需要依赖第三方库,如Apache POI库的Android版本(如Apache POI-OOXML-Schemas和Apache POI-ASSEMBLY)。不过,这些库体积较大,不适合对内存和...

    HashMap和HashTable的区别和不同

    - **HashMap**: 支持一个`null`键和任意数量的`null`值。这意味着`HashMap`允许用户更加灵活地处理可能存在的`null`值情况。 #### 3. 数组大小与扩容策略 - **HashMap**: - 默认大小为16,且大小总是2的幂。这是...

    Android导入导出txt通讯录工具.zip

    总的来说,这个"Android导入导出txt通讯录工具"涵盖了Android开发中的多个关键知识点,包括但不限于ContentProvider和ContentResolver的使用、文件I/O操作、Java数据结构、用户界面设计、权限管理等。对于想要深入...

    java实现Excel的导入、导出

    Java 实现 Excel 的导入和导出 Java 实现 Excel 的导入和导出是 Java 开发中常见的需求,特别是在企业级应用中,需要将数据导入或导出到 Excel 表格中。下面将详细介绍 Java 实现 Excel 的导入和导出的相关知识点。...

    完整的上传,excel 导入mysql 数据库

    综上所述,实现“完整的上传,excel导入mysql数据库”涉及到一系列技术步骤,包括使用POI处理Excel文件,SpringMVC处理文件上传请求,分批导入和性能优化,以及数据库操作和错误处理。掌握这些技能对于构建高效且...

    使用jasperreports制作报表(导出pdf excel html)

    4. **导出报表**:`JasperExportManager.exportReportToPdfFile()`, `JasperExportManager.exportReportToHtmlFile()` 和 `JasperExportManager.exportReportToXlsFile()` 分别用于导出报表为PDF、HTML和Excel格式。...

    maven-web项目 Struts2 Struts注解 Struts2返回json

    在这个“maven-web项目”中,我们将会深入探讨如何利用Struts2框架,结合Maven构建工具,以及Struts2的注解和JSON支持来开发Web应用。 首先,Maven是一个项目管理和综合工具,它简化了Java项目的构建、依赖管理和...

    struts2和json的jar包

    Struts2是一个基于MVC(Model-View-Controller)架构的开源框架,用于构建高效、可扩展且易于维护的企业级Web应用程序。JSON(JavaScript Object Notation)则是一种轻量级的数据交换格式,它允许在服务器和客户端...

    json struts2转换

    而`struts2-json-plugin-2.1.8.jar`则是Struts2的JSON插件,它提供了对JSON的支持,允许我们在Struts2应用中轻松地生成和消费JSON数据。 1. **配置JSON支持**:要在Struts2中启用JSON响应,首先需要在`struts.xml`...

    struts2整合jasperreport

    Struts2是一个流行的Java Web应用程序框架,它提供了MVC(模型-视图-控制器)架构,而JasperReport则是一个强大的报表生成库,可以生成多种格式的报表,如PDF、HTML、Excel等。iReport是JasperReport的可视化设计...

    SSM框架使用POI技术导出Excel.pdf

    POI 框架是 Apache 开源的可以导出导入 Excel 表的,本博客介绍在 SSM(Spring+SpringMVC+Mybatis)项目里,如何使用 POI 框架,导出 Excel 表。下面是相关知识点的详细解释: 1. POI 框架简介 POI 框架是一个...

Global site tag (gtag.js) - Google Analytics