`

java 导出excel,自己研究去吧!

    博客分类:
  • java
阅读更多
http://blog.csdn.net/cmtobby/article/details/1508647
http://blog.csdn.net/evangel_z/article/details/7332535


这里曾涉及到一个问题,在导出excel表格的时候如何弹出下载提示框并修改下载文件名称,解决方案见下文:

http://wenku.baidu.com/link?url=PdTPKaJC3ykNR9mQDYBOxbsxq2NIPtoKokT1-IThGpUgvvbPLLJrIlpxv1QDC0ygkAC_H_onvB0kaX5Iz7zwCkuve2YydOUggjlCtducRxi



曾经自己写的一个导出excel的方法:
	public String createExcel() {
		if (null == channelid) {
			yAllChannelSummary = true;
		}
		String filePath = ServletActionContext.getServletContext().getRealPath(File.separator) + "excel"+File.separator;
		File excelFile = new File(filePath);
		// 删除临时目录下的excel文件
		this.deleteFile(excelFile);
		if (!excelFile.isDirectory()) {
			excelFile.mkdirs();
		}
		List<Mall3AdSummary> summaryList = new ArrayList<Mall3AdSummary>();
		List<TreeMap<Integer,Mall3AdSummary>> summaryMapList = new ArrayList<TreeMap<Integer,Mall3AdSummary>>();
		if (!yAllChannelSummary) {// 非渠道全部查询
			summaryList = mall3AdSummaryManager.getList(channelid, startime, endtime, type, -1, -1, null, null);// 获得导出记录
		} else {// 渠道全部查询
			summaryList = mall3AdSummaryManager.getNoChannelList(startime, endtime, type, -1, -1, null, null);
			for (int i = 0; i < summaryList.size(); i++) {// 循环获取每条汇总数据下面每个渠道的详细数据
				Mall3AdSummary mall = summaryList.get(i);
				TreeMap<Integer,Mall3AdSummary> map = new TreeMap<Integer,Mall3AdSummary>();
				map.put(0, mall);// 第一条为汇总数据,后面的是渠道详细数据
				/////////////////////////////////////////////////////////////////////////////////////////////////////
				List<Mall3AdSummary> channDetail = new ArrayList<Mall3AdSummary>();
				channDetail = mall3AdSummaryManager.getNoChannelListDetail(mall.getChecktime(), null == mall.getCheckhour() ? null : String.valueOf(mall.getCheckhour()), type, -1, -1, null, null);
				for (int j = 0; j < channDetail.size(); j++) {
					map.put(j+1, channDetail.get(j));
				}
				summaryMapList.add(map);
			}
		}
		if (null == channelid) {
			yAllChannelSummary = true;
		}
		DecimalFormat df = new DecimalFormat("0.00");//格式化小数,不足的补0
		HSSFWorkbook wb = new HSSFWorkbook();
		
		// 汇总数据
		allAdSummary = mall3AdSummaryManager.getAllListAdd(channelid, startime, endtime, type);
		allAdSummary.setActiveretio(df.format(Double.parseDouble(allAdSummary.getActiveretio())*100));
		
		HandleExcel handleExcel = new HandleExcel();
		if (!yAllChannelSummary) {// 非渠道全部查询
			handleExcel.createExcel(wb, summaryList, type, yAllChannelSummary, allAdSummary);// 创建excel表格数据
		} else {// 渠道全部查询
			handleExcel.createExcelAsNoChannel(wb, summaryMapList, type, allAdSummary);
		}
		FileOutputStream fos = null;
		try {
			if(null == summaryList || summaryList.size() == 0){
				ServletActionContext.getResponse().getWriter().println("<script>alert('没有数据可供导出');location.href='/app30/mall3adsummary.action?type=1'</script>");
				return null;
			}
			ServletActionContext.getRequest().setCharacterEncoding("UTF-8");

			String filename = new SimpleDateFormat("yyyymmddhhmmss").format(new Date())+".xls";
			fos = new FileOutputStream(new File(filePath + filename),false);
			//ServletActionContext.getResponse().sendRedirect("excel/"+filename);
			wb.write(fos);
			ServletActionContext.getResponse().reset();//清空response的buffer
			ServletActionContext.getResponse().setContentType("application/vnd.ms-excel");//设置正确的输出类型
			
			ServletActionContext.getRequest().getContentType();
			// PrintWriter out = ServletActionContext.getResponse().getWriter(); 
			
			FileInputStream fis = new FileInputStream(
					new File(filePath + filename));
			OutputStream os = ServletActionContext.getResponse().getOutputStream();

			String fileName = "jifenqiang-" + new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()) + ".xls";
			ServletActionContext.getResponse().setHeader("Content-Disposition", "attachment;filename="
					+ new String(fileName.getBytes("gb2312"), "iso8859-1"));

			ServletActionContext.getResponse().setCharacterEncoding("utf-8");
			int j = 0;
			byte[] b = new byte[8192];
			while ((j = fis.read(b, 0, 8192)) != -1) {
				os.write(b, 0, j);
			}
			os.flush();
			fis.close();
			
			// ServletActionContext.getRequest().getRequestDispatcher("/excel/"+filename).forward(ServletActionContext.getRequest(), ServletActionContext.getResponse());
			// out.print("<a href='"+filePath+new SimpleDateFormat("yyyymmddhhmmss").format(new Date())+".xls' target='blank' >"+"下载"+title+"</a>"+"(右键单击另存为)");
			fos.close();
			return null;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		//exportExcel.outputExcel(filePath);
	}


这里面最重要的是下载提示框和修改下载文件的名称这一块的解决方案。

下面是标准的下载提示框和修改下载文件的名称的servlet示例:
package com.lwf.poi;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestUpload extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		FileInputStream fis = new FileInputStream(
				new File("C:/ererer.xlsx"));
		OutputStream os = response.getOutputStream();

		String fileName = "20160721.xlsx";
		response.setHeader("Content-Disposition", "attachment;filename="
				+ new String(fileName.getBytes("gb2312"), "iso8859-1"));

		response.setCharacterEncoding("utf-8");
		int j = 0;
		byte[] b = new byte[8192];
		while ((j = fis.read(b, 0, 8192)) != -1) {
			os.write(b, 0, j);
		}
		os.flush();
		fis.close();
	}

	@Override
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
分享到:
评论

相关推荐

    java导出excel超过65536条记录出错

    java导出excel超过65536条记录出错 java导出excel超过65536条记录出错 java导出excel超过65536条记录出错 java导出excel超过65536条记录出错

    java导出excel POI jar包

    Java导出Excel是Java开发中常见的需求,尤其是在数据处理和报表生成方面。Apache POI库是Java领域中广泛使用的工具,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本篇文章将深入讲解...

    java导出Excel 时候 相同行合并

    java导出Excel 时候 相同行合并(可合并多列); 已测试通过;

    java导出excel树结构工具类

    该工具类实现java导出树形结构的方法,并未采用excel分组功能实现,而是根据树节点显示层级设置excel样式。针对easyUi,treeGrid开发的导出excel功能。方法简便实用、性强、通俗易懂。项目中亲测,no problem。

    java导出Excel 玩玩吧!

    需用到的Excel包 博文链接:https://comeon-liming.iteye.com/blog/121959

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

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

    java导出excel复杂表头

    本示例涉及的主题是“java导出excel复杂表头”,这意味着我们要处理的不是简单的单级表头,而是包含多级或者多层次结构的表头。在描述中提到这是一个可以直接运行的Java工程,但需要进一步改造为Web下载服务。 首先...

    java导出excel复合表头简单实例

    本资源提供的"java导出excel复合表头简单实例"是针对Java开发者的一个实用教程,特别是对于那些刚开始接触Java Excel导出功能的新手。这个实例将帮助你理解如何在Excel中创建并设置复杂的表头结构,使得数据的呈现...

    java导出excel并生成折线图.java

    资源描述:一个使用java做的导出数据,并且可以在excel表生成折线图的工具类,使用简单操作方便。

    java导出到excel的工具类

    在Java编程中,导出数据到Excel是一种常见的需求,特别是在数据分析、报表生成或者数据交换的场景下。Apache POI是一个强大的库,专为处理Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。本篇文章将...

    java导出复杂Excel内容数据动态循环

    java导出复杂Excel内容数据动态循环

    java导出excel(写入到excel后再下载)示例

    通过阅读和学习这个示例,你可以掌握Java导出Excel的基本步骤,并将其应用到自己的项目中。此外,还可以了解如何在Web环境中优雅地处理文件下载,这对构建企业级应用非常有用。记住,实际使用时需要根据具体需求进行...

    java导出excel的jar包及例子代码

    总之,Java导出Excel涉及到的主要知识点包括:Apache POI库的使用,Workbook、Sheet、Row和Cell对象的创建和操作,以及数据写入和文件输出。希望这个示例能帮助你理解并开始在自己的项目中实现Excel导出功能。

    java操作数据库 导出excel

    Java操作数据库并导出Excel是一项常见的任务,尤其在数据分析、报表生成或数据迁移等领域。这里主要涉及两个核心技术:Java数据库连接(JDBC)用于与数据库交互,以及Apache POI库用于处理Excel文件。 首先,Java...

    java 导出excel,带图片的Excel导出

    在Java编程中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换等领域。而带图片的Excel导出则增加了复杂性,因为涉及到二进制数据的处理和Excel特定格式的支持。以下是一些关于如何在Java中实现...

    java 导出excel(方法二)

    在Java编程中,导出Excel数据是常见的任务,特别是在数据处理和报表生成的场景下。本教程将聚焦于使用jxl库来实现这一功能。jxl是一个流行且强大的Java库,能够读写Microsoft Excel文件。这里我们将介绍如何利用jxl...

    java导出图片到excel

    在Java编程中,导出数据到Excel是一种常见的需求,尤其当需要将图片与文本一起展示在电子表格中时。这个任务通常涉及到使用第三方库来处理Excel文件,因为Java标准库并未提供直接支持图像到Excel的功能。以下是一些...

    java导出excel的相关jar

    压缩包中的文件"java导出excel"很可能包含了使用这两种库的示例代码或教程资源,你可以通过解压并学习这些文件来深入理解如何在Java中实现数据到Excel的导出。记得在实际使用时,要根据项目需求选择合适的技术,并...

    Java 导出Excel.zip

    "Java 导出Excel.zip"这个压缩包文件提供了一个Java实现的解决方案,允许开发者以全泛型的方式方便地导出数据到Excel文件,而且支持动态创建不同数量的sheet页面,增强了灵活性。 1. **Java与Excel交互**:Java中...

    java导出excel2007

    在Java编程环境中,导出Excel 2007文件(也称为.xlsx文件)是一项常见的任务,主要用于数据报表、数据分析和数据交换。Excel 2007引入了Open XML格式,这是Microsoft Office的一项新标准,提供了更高效的数据存储...

Global site tag (gtag.js) - Google Analytics