`

java poi 创建excel 兼容2003\2007 模拟数据库导出 解决自动调整宽度、日期格式

    博客分类:
  • java
阅读更多
必须依赖poi包




结果:



package best.utils;

import java.util.Map;

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

public interface ExcelTemplate {
	
	public final static String EXCEL_03="2003";
	
	public final static String EXCEL_07="2007";
	
	/**
	 * 可选
	 * 设置excel日期样式
	 * @param dataFormat
	 */
	public void setDateFormat(String dataFormat);
	/**
	 * 可选
	 * 设置工作薄名称
	 * @param sheetName
	 */
	public void setSheetName(String sheetName) ;
	/**
	 * 可选
	 * 是否自动调整列宽
	 * @param b
	 */
	public void isAutoSizeColumn(boolean b);
	/**
	 * 转换 中应为呼唤
	 * @param mess
	 */
	public void setMess(Map<String, String> mess);
	/**
	 * 同时创建excel 03、07版
	 * @return key=2003或2007 对应为excel2003、excel2007
	 */
	public Map<String,Workbook> createExcel();
	
	/**
	 * 创建excel 具体版
	 * @param excelVerson 2003或2007
	 * @return 
	 */
	public Workbook createExcel(String excelVerson);
	
}



package best.utils;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

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.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelTemplateImpl implements ExcelTemplate {
	
	private List<Map<String, Object>> datas;
	
	private final Map<String,Workbook> wbmap = new HashMap<String, Workbook>(2);
	
	private String dataFormat = "yyyy-MM-dd";
	
	private String sheetName;
	
	private boolean isAutoSizeColumn=false;
	
	private Map<String,String> mess;
	
	
	public ExcelTemplateImpl(List<Map<String, Object>> datas){
		init(datas);
	}
	
	/**
	 * 初始化
	 * @param datas
	 */
	private void init(List<Map<String, Object>> datas){
		this.datas = datas;
		//构造2003、2007版excel
		wbmap.put(ExcelTemplate.EXCEL_03, new HSSFWorkbook());
		wbmap.put(ExcelTemplate.EXCEL_07, new XSSFWorkbook());

	}
	
	public void setDateFormat(String dataFormat){
		
		this.dataFormat = dataFormat;
	}
	
	public Workbook createExcel(String excelVerson){
		Workbook wb = wbmap.get(excelVerson);
		initExcel(wb);
		return wb;
	}

	public Map<String,Workbook> createExcel(){

		Set<Entry<String, Workbook>> wbset = wbmap.entrySet();
		Iterator<Entry<String, Workbook>> eit = wbset.iterator();
		
		while(eit.hasNext()){
			Entry<String, Workbook> workEntry = eit.next();
			Workbook wb = workEntry.getValue();
			initExcel(wb);
		}
		return wbmap;
	}
	
	private void initExcel(Workbook wb){
		//设置样式
		CellStyle cellStyle = wb.createCellStyle();//创建样式
		cellStyle.setDataFormat(wb.createDataFormat().getFormat(dataFormat));//日期格式
		cellStyle.setAlignment(CellStyle.ALIGN_CENTER);//居中
		
		//创建一个新的表\并创建名称
		Sheet s = null==sheetName?s = wb.createSheet():wb.createSheet(sheetName);
		
		
		for(int i=0; i<datas.size(); i++){ //遍历数据
			
			Map<String,Object> map = datas.get(i);
			
			//定义列(列名第一行)
			Row titleColl = s.createRow(0);
	
			//定义行(内容第二行起)
			Row row = s.createRow(i+1);
			
			Set<Entry<String, Object>> set = map.entrySet();
			
			Iterator<Entry<String, Object>> it = set.iterator();
			int x = 0;
			while(it.hasNext()){
				//列名
				Entry<String, Object> entry = it.next();
				Cell titleCell = titleColl.createCell(x);
				String titleName = entry.getKey();
				titleCell.setCellValue(null==mess||null==mess.get(titleName)?titleName:mess.get(titleName));
				//设置列名样式
				titleCell.setCellStyle(cellStyle);
				//内容
				Cell cell = row.createCell(x);
				
				Object value = entry.getValue();
				
				if(value instanceof String){
					cell.setCellValue(value.toString());
				}else if(value instanceof  Double){
					cell.setCellValue((Double)value);
				}else if(value instanceof Integer){
					cell.setCellValue((Integer)value);
				}else if(value instanceof Float){
					cell.setCellValue((Float)value);
				}else if(value instanceof Boolean){
					cell.setCellValue((Boolean)value);
				}else if(value instanceof java.util.Date|value instanceof java.sql.Date){
					cell.setCellValue((Date)value);
				}
				//设置内容样式
				cell.setCellStyle(cellStyle);
				
				
				x++;
				
			}
			//自动调整列宽
			if(isAutoSizeColumn) s.autoSizeColumn(i);
			
		}
	}

	public List<Map<String, Object>> getDatas() {
		return datas;
	}

	public void setDatas(List<Map<String, Object>> datas) {
		this.datas = datas;
	}

	public String getSheetName() {
		return sheetName;
	}

	public void setSheetName(String sheetName) {
		this.sheetName = sheetName;
	}

	
	public Map<String, String> getMess() {
		return mess;
	}
	public void setMess(Map<String, String> mess) {
		this.mess = mess;
	}
	public void isAutoSizeColumn(boolean b) {
		// TODO Auto-generated method stub
		this.isAutoSizeColumn = b;
	}

}



测试
package best.utils;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

public class Test {

	/**
	 * @param args
	 */
public static void main(String[] args){
		//	模拟数据
		List<Map<String,Object>> datas = new ArrayList<Map<String,Object>>();
		
		Map<String,Object> map = new HashMap<String,Object>();
		
		map.put("用户名", "xiaomaha");
		map.put("密码", "1234567qq");
		map.put("创建日期", new Date());
		
		Map<String,Object> map2 = new HashMap<String,Object>();
		
		map2.put("用户名", "xiaomaha21111111111111111111111111111111111111中文11111112");
		map2.put("密码", "1-1234567qq11111111111111111111111111111111111111中文111111111113");
		map2.put("创建日期", new Date());
		
		Map<String,Object> map3 = new HashMap<String,Object>();
		map3.put("用户名", "xiaomaha3");
		map3.put("密码", "2-1234567qq");
		map3.put("创建日期", new Date());
		
		datas.add(map);
		datas.add(map2);
		datas.add(map3);
		for(int i=0;i<500;i++){
			Map<String,Object> maps = new HashMap<String,Object>();
			maps.put("用户名", "xiaomaha3"+i);
			maps.put("密码", "2-1234567qq"+i);
			maps.put("创建日期", new Date());
			datas.add(maps);
		}
		
		//创建excel
		ExcelTemplate et = new ExcelTemplateImpl(datas);
		et.setSheetName("测试");
		Map<String, String> mess = new HashMap<String, String>();
		mess.put("用户名","userName");
		mess.put("密码","pw");
		mess.put("创建日期","createDate");
		et.setMess(mess);
		et.isAutoSizeColumn(true);
		//		同时生成2003、2007版
//		Map<String, Workbook> workMap = et.createExcel();
//		Workbook wb = workMap.get(ExcelTemplate.EXCEL_07); //获取excel2007
		Workbook wb = et.createExcel(ExcelTemplate.EXCEL_03);		
		
		//如果愿意英汉转换

		
//		1:最好的方法是写一个xml! 然后解析
//      2:json格式,当然需要相对应的json插件
//		3:Map实现
//		---------------------------------------
//		Map例子
//		Map<String,Object> map3 = new HashMap<String,Object>();
//		map3.put("userName", "xiaomaha3");
//		map3.put("passWord", "2-1234567qq");
//		map3.put("createDate", new Date());
//		Map<String,String> m = new HashMap<String,String>();
//		m.put("userName", "用户名");
//		m.put("passWord", "密码");
//		m.put("createDate", "创建日期");
//		然后ExcelTemplate 加入一个方法就可以实现了
		
		
		
		//测试  写入磁盘
		String filename = "d://workbook2.xls";
		if (wb instanceof XSSFWorkbook) {
		    filename = filename + "x";
		}
		
		
		FileOutputStream out;
		try {
			out = new FileOutputStream(filename);
			
			try {
				wb.write(out);
				out.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

}





页面下载例子
			String contenttype = "application/msexcel"  
			response.setContentType(contenttype);   
			response.setHeader("Content-Disposition", "attachment;Filename=" + filename + ".xls");//03为.xls  07为.xlsx   
			OutputStream os = response.getOutputStream();   
			//创建excel   
			ExcelTemplate et = new ExcelTemplateImpl(datas);   
			Map<String, Workbook> workMap = et.createExcel();   
			Workbook wb = workMap.get("2003"); //获取excel2003   
			wb.write(os);   
			  
			os.flush();   
			os.close();


下载
  • 大小: 4.1 KB
  • 大小: 4.8 KB
分享到:
评论
4 楼 zhangzi 2013-07-17  
Integer类型的,导出的Excel中是日期,怎么解决?
3 楼 xiaomaha 2012-08-21  
tuoxinzhou 写道
yylovelei 写道
您好,您写的很不错,但是在大量数据的情况下会报
java.lang.OutOfMemoryError: Java heap space
有什么好的办法解决吗?
http://www.iteye.com/problems/78916
这里到是有,但是我按他的操作也一样报异常。

可以采用分批进行处理大数据量的问题,意思就是查询出总共要导出的行数,根据自己的需求确定多少进行一次导出,在生成excel到服务器的时候,记录所有文件名称,然后最后打成zip格式发送回客户端下载,这样就可以避免一次生成过多,导致对象生成过多内存溢出

一次性取大数据本身就会内存溢出,这个哥们说的很正确
2 楼 tuoxinzhou 2012-05-08  
yylovelei 写道
您好,您写的很不错,但是在大量数据的情况下会报
java.lang.OutOfMemoryError: Java heap space
有什么好的办法解决吗?
http://www.iteye.com/problems/78916
这里到是有,但是我按他的操作也一样报异常。

可以采用分批进行处理大数据量的问题,意思就是查询出总共要导出的行数,根据自己的需求确定多少进行一次导出,在生成excel到服务器的时候,记录所有文件名称,然后最后打成zip格式发送回客户端下载,这样就可以避免一次生成过多,导致对象生成过多内存溢出
1 楼 yylovelei 2012-05-01  
您好,您写的很不错,但是在大量数据的情况下会报
java.lang.OutOfMemoryError: Java heap space
有什么好的办法解决吗?
http://www.iteye.com/problems/78916
这里到是有,但是我按他的操作也一样报异常。

相关推荐

    使用poi从数据库导出excel表的示例

    总结起来,"使用poi从数据库导出excel表的示例"是一个结合了Struts1 MVC框架和Apache POI库的Java编程任务,它涉及数据库连接、SQL查询、Excel文件生成以及Web应用响应。这个过程不仅有助于数据的高效管理和分享,也...

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    POI的EXCEL导出,自动换行

    ### POI的EXCEL导出,自动换行 在日常工作中,经常需要处理大量的数据导入导出任务,尤其是在企业级应用开发中,Excel文件的处理成为了一项必不可少的能力。Apache POI项目提供了一系列用于读写Microsoft Office...

    java poi导出excel

    Java POI库是Apache软件基金会开发的一个开源项目,专门用于读写Microsoft Office格式的文件,包括Excel。在Java中,如果你需要导出Excel文件,Java POI是一个非常实用的工具。下面将详细介绍如何使用Java POI来实现...

    JAVA poi 做EXCEL导出(包含图片) 完整版

    本教程将详细介绍如何使用JAVA POI库来创建一个包含图片的完整Excel导出功能。 首先,你需要在项目中引入Apache POI依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache....

    java操作数据库 导出excel

    在导出数据库数据到Excel时,通常会遍历结果集,为每一行创建一个新的行对象,然后将每列数据设置到对应的单元格。 总结来说,完成"java操作数据库导出excel"的任务,你需要掌握以下关键点: 1. 使用JDBC连接数据库...

    java poi导出图片到excel示例代码

    Java POI导出图片到Excel示例代码详解 Java POI是Java开发中常用的开源库,用于读写Microsoft Office文件格式,包括Excel、Word、PowerPoint等。今天,我们将介绍如何使用Java POI将图片导出到Excel中。 标题解释 ...

    Java poi导入导出EXCEL工具类(兼容各版本)

    概述:Java poi导入导出EXCEL工具类(兼容各版本) 一、功能说明 允许同时导入或导出多个sheet,同一sheet可同时存在多个数据块,按数据块划分处理数据。 二、配置文件示例及详细说明 1、导入xml配置示例如下(见...

    java导出excel POI jar包

    Apache POI库是Java领域中广泛使用的工具,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本篇文章将深入讲解如何使用POI库在Java中实现Excel的导出功能,以及涉及到的相关jar包及其作用...

    Java POI 生成Excel时显示货币格式

    本文将深入探讨如何使用Java POI生成带有货币格式的Excel文件,这在财务报告和其他需要精确货币显示的应用场景中尤为关键。 ### 一、Java POI简介 Java POI是一个开源的API,用于读写Microsoft Office格式的文件,...

    Java POI EXCEL导入导出

    Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出Java POI EXCEL导入导出...

    POI实现Excel导入导出并附带加载进度条

    Apache POI是一个强大的库,它允许开发者使用Java来读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx, .xls)。本项目通过Apache POI实现了Excel的导入与导出功能,并在操作过程中加入了进度条展示,...

    java的poi生成excel图表demo

    Java的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,尤其是Excel(.xlsx)文档。在本示例中,我们将深入探讨如何利用POI库来生成Excel中的图表曲线,这对于数据可视化和报告生成...

    java使用POI导出 Excel工具类

    java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。

    Java poi 实现excel导入导出

    在Java编程环境中,Apache POI库是一个非常重要的工具,它允许开发者读取、写入和修改Microsoft Office格式的文件,尤其是Excel(.xlsx 和 .xls)文件。本教程将深入探讨如何利用Java POI库来实现Excel的导入与导出...

    JAVA POI导出EXCEL代码

    Java POI库是Apache软件基金会的一个项目,专门用于读写Microsoft Office格式的文件,包括Excel。在Java开发中,我们经常使用POI库来处理Excel数据,如读取、写入和修改Excel文件。本篇文章将详细介绍如何使用JAVA ...

    Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)

    Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)

    Java实现POI导出Excel

    Java实现POI导出Excel是Java开发者常用的一种技术,用于生成和操作Microsoft Office Excel文件。在Java中,Apache POI库提供了对微软Office文档格式的支持,包括读取和写入Excel文件。这篇博客文章...

    JAVA实现数据库数据导入导出到Excel(POI)所需jar包

    在Java开发中,有时我们需要将数据库中的数据导出到Excel文件,或者从Excel文件导入数据到数据库。Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何...

    Java POI 导出Excel 2007 实例源代码

    本实例将重点介绍如何使用Java POI来导出Excel 2007(xlsx格式)文件。 一、Java POI简介 Java POI项目始于2001年,由Apache软件基金会维护。它提供了API,使得Java开发者可以读取、写入和修改Microsoft Office格式...

Global site tag (gtag.js) - Google Analytics