`
jayghost
  • 浏览: 436514 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

POI 后台生成Excel,在前台显示进度

    博客分类:
  • Java
阅读更多

使用Apache POI和DWR

poi用于在后台生成Excel,用DWR在前台显示后台生成Excel的进度

基本的生成Excel类:

ExcelHelper.java

public class ExcelHelper extends Thread{
	private int rowIndex=0;
	private int count;
	private String fileName;
	private String sheetName;
	private List<String[]> dataList;

	public ExcelHelper(String fileName, String sheetName, List<String[]> dataList) {
		this.fileName = fileName;
		this.sheetName = sheetName;
		this.dataList = dataList;
		this.count=dataList.size();
	}

	@Override
	public void run() {
		try {
			if (rowIndex==0) {
				generateWorkbook();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 生成Excel文件
	 * 
	 * @param fileName
	 *            要生成的Excel文件名(可用绝对或相对路径)
	 * @param sheetName
	 *            生成的Excel文件中的sheet名
	 * @param dataList
	 *            要放入Excel文件的内容
	 * @throws IOException
	 */
	public void generateWorkbook() throws IOException {
		Workbook wb = null;
		if (fileName.endsWith(".xlsx")) {
			wb = new XSSFWorkbook();
		} else if (fileName.endsWith(".xls")) {
			wb = new HSSFWorkbook();
		} else {
			fileName = fileName.concat(".xls");
			wb = new HSSFWorkbook();
		}
		
		CellStyle cellStyle = wb.createCellStyle();
		Font font = wb.createFont();
		font.setColor(HSSFColor.RED.index);
		cellStyle.setFont(font);
		
		Sheet sheet = wb.createSheet(sheetName);
		rowIndex = 0;
		for (String[] rowData : dataList) {
			Row row = sheet.createRow(rowIndex);
			rowIndex++;
			int cellIndex = 0;
			for (String cellData : rowData) {
				Cell cell = row.createCell(cellIndex);
				cell.setCellValue(cellData);
				cell.setCellStyle(cellStyle);
				cellIndex++;
			}
		}

		FileOutputStream fileOut = new FileOutputStream(fileName);
		wb.write(fileOut);
		fileOut.close();
	}
	
	public int getRowIndex() {
		return rowIndex;
	}

	public int getCount() {
		return count;
	}
}

 DWR操作类:

ExcelHelperDWR.java

public class ExcelHelperDWR {
	private static Map<Long, ExcelHelper> excelHelperMap;
	public ExcelHelperDWR() {
		if (excelHelperMap == null) {
			excelHelperMap = new HashMap<Long, ExcelHelper>();
		}
	}

	public int getRowIndex(long threadId) {
		ExcelHelper excelHelper = excelHelperMap.get(threadId);
		if (excelHelper.getRowIndex()<excelHelper.getCount()) {
			return excelHelper.getRowIndex();
		}else {
			return -1;
		}
	}

	public long beginProcess(String fileName, String sheetName) {
		//test case
		List<String[]> dataList = new ArrayList<String[]>();
		for (int i = 0; i < 1000; i++) {
			dataList.add(new String[] { "1", "2612601001", "学生1", "123", "3", null, "", "13712345678" });
			dataList.add(new String[] { "1", "2612601001", "学生2", "123", "3", "", "", "13712345678" });
			dataList.add(new String[] { "1", "2612601001", "学生3", "123", "3", "", "", "13712345678" });
			dataList.add(new String[] { "1", "2612601001", "学生4", "123", "3", "", "", "13712345678" });
		}
		//end test case
		
		ExcelHelper excelHelper = new ExcelHelper(fileName, sheetName, dataList);
		excelHelper.start();
		long threadId = excelHelper.getId();
		excelHelperMap.put(threadId, excelHelper);
		return threadId;
	}
}

 前台index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>My JSP 'index.jsp' starting page</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
		<script type='text/javascript' src='dwr/interface/ExcelHelperDWR.js'></script>
		<script type='text/javascript' src='dwr/engine.js'></script>
		<script type='text/javascript' src='dwr/util.js'></script>
		<script type="text/javascript">
		var generateProgress;
	function beginProcess()
	{
		ExcelHelperDWR.beginProcess("D://我的Excel.xlsx", "sheet1",invoke);
	}
	function invoke(threadId)
	{
		generateProgress=window.setInterval("ExcelHelperDWR.getRowIndex("+threadId+", invokeCB)", 500);
	}
	function invokeCB(data)
	{
		if (data==-1) {
			window.clearInterval(generateProgress);
			document.getElementById("data").innerHTML = "生成Excel ok!";
		} else {
			document.getElementById("data").innerHTML = data;
		}
	}
</script>
	</head>

	<body>
		<input type="button" onclick="beginProcess()" value="generateExcel" />
		<div id="data"></div>
	</body>
</html>

  OK了,很简易~

 

分享到:
评论
1 楼 sunwang810812 2018-03-26  
万分感谢中!!!!!这么多年终于看到一个可运行可解决的方案!!!!请收下我的膝盖!!

相关推荐

    java的poi生成excel图表demo

    在本示例中,我们将深入探讨如何利用POI库来生成Excel中的图表曲线,这对于数据可视化和报告生成非常有用。 1. **Apache POI介绍** Apache POI是一个开源项目,提供了API来处理Microsoft Office格式的文件。在Java...

    SpringMVC POI Excel 生成导出

    在这个描述中,我们可以看到 SpringMVC POI Excel 生成导出是一个完整的过程,从前台写法到 controller 写法再到 service 写法。这个过程涉及到多个技术点,包括 SpringMVC 框架、POI 库、Excel 文件格式等。 标签...

    POI生成Excel POI操作Excel POI读取Excel POI类库

    在这个场景中,我们关注的是如何使用POI来创建、读取和操作Excel文档。在Web项目中,这种功能通常用于数据导入导出,报表生成,或者任何需要与用户交换表格数据的场景。 **POI生成Excel** 生成Excel文件主要涉及...

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

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

    poi jxl 生成EXCEL 报表

    在Java编程环境中,生成Excel报表是一项常见的任务,尤其在数据处理和数据分析中。Apache POI 和 JExcelAPI(JXL)是两个广泛使用的库,分别用于处理Microsoft Office的POI格式(包括Excel)和Java环境中的Excel文件...

    使用poi生成Excel所需要的jar包

    在Java开发中,Apache POI 是一个非常流行的库,它允许程序员创建、修改和显示Microsoft Office格式的文件,特别是Excel工作簿。在这个场景中,"使用poi生成Excel所需要的jar包"指的是利用Apache POI库来生成Excel...

    android中poi生成word文档和excel文档

    在Android开发中,Apache POI 是一个非常实用的库,它允许程序员创建、修改和显示Microsoft Office格式的文件,如Word文档(.doc)和Excel工作簿(.xlsx或.xls)。这个工具对于需要在Android应用中处理这些文档的...

    poi生成excel表格

    在这个场景中,我们关注的是如何使用POI库在Java中生成Excel表格。以下是对标题、描述和标签所涉及知识点的详细说明: 1. **Apache POI 简介** Apache POI 是Java平台上的一个库,它允许开发者读写Microsoft ...

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

    在Java开发中,处理Excel数据是一项常见的任务,尤其是在数据分析、报表生成或批量数据操作的场景下。Apache POI是一个强大的库,它允许开发者使用Java来读取、写入和修改Microsoft Office格式的文件,包括Excel(....

    poi excel poi excel poi excel

    ### POI Excel知识点详解 #### 一、Jakarta POI简介与Apache POI的作用 Jakarta POI 是 Apache POI 的早期项目名称,它提供了一组 API 来处理 Microsoft Office 文件格式,特别是针对 Excel(`.xls` 和 `.xlsx`)...

    java后台利用Apache poi 生成excel文档提供前台下载示例

    Java 后台利用 Apache POI 生成 Excel 文档提供前台下载示例 本篇文章主要介绍了 Java 后台利用 Apache POI 生成 Excel 文档提供前台下载示例,非常具有实用价值。下面是文章的详细解释: Apache POI 简介 Apache...

    POI操作Excel完美生成水印

    本教程将深入探讨如何利用Apache POI来在Excel文件中完美地生成水印。水印通常用于标识文档的所有权或提供额外的安全层,而这里的水印是通过将文字转化为图片再添加到Excel工作表中实现的。 首先,我们需要了解...

    java poi 根据excel模板生成excel文件

    在本文中,我们将深入探讨如何使用Java POI库根据已有的Excel模板生成新的Excel文件。 首先,理解“模板”在Excel中的概念非常重要。模板通常包含预设的格式、样式、公式和数据结构,可以作为创建新文件的基础。在...

    Java POI根据模板生成Excel(xlsx)文件

    在本示例中,我们关注的是如何利用Java POI来根据模板生成.xlsx格式的Excel文件。这个过程涉及到对Excel模板的理解、读取、修改以及最终的保存。 首先,理解模板文件是关键。一个.xlsx模板文件实际上是由一系列XML...

    Java POI 生成Excel(xlsx)文件

    在Java中,如果你需要生成或操作Excel文件,尤其是.xlsx格式(这是Excel 2007及以上版本使用的Open XML格式),那么Apache POI库就是首选工具。下面将详细介绍如何使用Java POI库来生成Excel(xlsx)文件。 首先,...

    前台从java后台获取excel表格并下载

    本场景涉及的知识点主要集中在如何通过Java后台生成Excel表格,并将数据传递给前端进行下载。以下是对这些知识点的详细解析: 首先,标题"前台从java后台获取excel表格并下载"表明我们需要实现一个功能,即前端用户...

    图片缩略图以及poi生成excel文档

    平时工作中用到的一些技术点,拿出来和大家共享一下。 有些功能比较粗糙,如果大家有更加完善的示例或建议,欢迎交流。 1、jpg图片缩略图:ImageUtil ...2、poi创建excel:CDSHdlReport 3、计算表达式求值:Cal

    POI 生成EXCEL2007【含例子】

    标题 "POI 生成EXCEL2007【含例子】" 涉及到的知识点主要集中在Apache POI库的使用上,这是一个强大的Java API,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel文件。在这个场景中,重点是创建和操作...

    poi-3.0.2 生成excel表工具

    在使用Apache POI生成Excel表时,首先你需要创建一个`Workbook`对象,这代表Excel的工作簿。然后,可以在这个工作簿中添加`Sheet`,对应Excel中的工作表。每个工作表可以添加多个`Row`,行里面再包含`Cell`,即...

    java调用poi生成excel文件

    java代码调用poi架包, 把数据生成excel文件, 导出到文件

Global site tag (gtag.js) - Google Analytics