`
kissuyoyo
  • 浏览: 15350 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

表格数据导出到Excel

    博客分类:
  • java
阅读更多

1、js方法

function exporterExcel(){
	var no=$("#serchNo").val();
	var machineImei=$("#serchMachineImei").val();
	var orderNo=$("#serchOrderNo").val();
	var status=$("#serchStatus").val();
	var dealResult=$("#serchDealResult").val();
	var url="../saleAfterMaintainAction/exporterExcel.shtml?queryParam['no']="+no+"&queryParam['machineImei']="+machineImei+"&queryParam['orderNo']="+orderNo+"&queryParam['status']="+status+"&queryParam['dealResult']="+dealResult;
	window.open(url);
}

 2、Action

@RequestMapping(value = "/exporterExcel")
	@ResponseBody
	public ResultVO exportExcel(QueryVO queryVO, HttpServletRequest request, HttpServletResponse response) {

		saleAfterMaintainService.exportExcel(queryVO, request, response);
		return success("导出成功");

	}

 3、Service

public void exportExcel(QueryVO queryVO, HttpServletRequest req, HttpServletResponse res) {

		int totalCount = saleAfterMaintainDao.queryCount(queryVO);//数据库查询数据条数
		int rows=10;
		long start = System.currentTimeMillis();
		try {
			LinkedHashMap<String, String> headMap = new LinkedHashMap<String, String>();
			headMap.put("no", "保修单号");
			headMap.put("name", "姓名");
			headMap.put("tel", "电话");
			headMap.put("address", "地址");
			headMap.put("reason", "保修原因");
			headMap.put("machineImei", "设备IMEI");
			headMap.put("orderNo", "对应订单号");
			headMap.put("status", "状态");
			headMap.put("dealResult", "处理结果");
			headMap.put("createTime", "创建时间");
			 
			// 开始excel生成
			SXSSFWorkbook wb = new SXSSFWorkbook(100);
			Sheet sh = wb.createSheet();
			// 表格样式
			CellStyle cellStyle = ExportExcel.getContentStyle(wb);
			// 设置表格宽度
			setShColumnWidth(sh);
			// 循环数据
			Row row = sh.createRow(0);
			int headNum = 0;
			for (String key : headMap.keySet()) {
				Cell cell = row.createCell(headNum);
				cell.setCellValue(headMap.get(key));
				cell.setCellStyle(cellStyle);
				headNum++;
			}
			rows = 1000;
			int pageCount = totalCount % rows == 0 ? totalCount / rows : totalCount / rows + 1;
			int rowNum = 1;
			for (int i = 0; i < pageCount; i++) {
				List<Map<String, Object>> pageList = saleAfterMaintainDao.findPageReturn(queryVO, pageCount, rows);//数据库查询数据
				for (Map<String, Object> map : pageList) {
					row = sh.createRow(rowNum);
					int index = 0;
					for (String key : headMap.keySet()) {
						Cell cell = row.createCell(index);
						ExportExcel.setCellValue(cell, map, key);
						cell.setCellStyle(cellStyle);
						index++;

					}
					rowNum++;

				}
			}

			String prePath = req.getSession().getServletContext().getRealPath("/");
			File file = new File(prePath);
			if (!file.exists())
				file.mkdirs();
			String filePath = prePath + "保修单.xlsx";
			FileOutputStream out = new FileOutputStream(filePath);
			wb.write(out);
			out.close();
			wb.dispose();
			ExportExcel.openExcel(req, res, "保修单.xlsx");
			LogUtil.writeLog("导出excel的时间:" + (System.currentTimeMillis() - start) / 1000 + "秒");
		} catch (Exception e) {
			LogUtil.writeErrorLog(e.getMessage(), e);
		}

	}

	/**
	 * 设置表格的宽度
	 * 
	 * @param sh
	 */
	private void setShColumnWidth(Sheet sh) {

		sh.setColumnWidth(0, 6000);
		sh.setColumnWidth(1, 4000);
		sh.setColumnWidth(2, 4000);
		sh.setColumnWidth(3, 4000);
		sh.setColumnWidth(4, 5000);
		sh.setColumnWidth(5, 5000);
		sh.setColumnWidth(6, 3000);
		sh.setColumnWidth(7, 2000);
		sh.setColumnWidth(8, 5000);
		sh.setColumnWidth(9, 2000);
		sh.setColumnWidth(10, 4000);
		sh.setColumnWidth(11, 6000);
		sh.setColumnWidth(12, 5000);
		sh.setColumnWidth(13, 5000);
		sh.setColumnWidth(14, 5000);
		sh.setColumnWidth(15, 5000);
		sh.setColumnWidth(16, 4000);
		sh.setColumnWidth(17, 5000);
	}

 4、ExportExcel 类

package com.xg.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

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

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

import com.pay.util.LogUtil;
import com.xg.dao.BaseDao;
import com.xg.framework.vo.query.QueryVO;

public class ExportExcel {

	/**
	 * 弹出打开框
	 * 
	 * @param request
	 * @param response
	 * @param downName
	 */
	public static void openExcel(HttpServletRequest request, HttpServletResponse response, String downName) {

		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		String filepath = null;
		try {
			filepath = request.getSession().getServletContext().getRealPath("/") + downName;

			bis = new BufferedInputStream(new FileInputStream(new File(filepath)));
			bos = new BufferedOutputStream(response.getOutputStream());
			response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(downName, "utf-8"));
			int bytesRead = 0;
			byte[] buffer = new byte[8192];
			while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
				bos.write(buffer, 0, bytesRead);
			}
			bos.flush();
		} catch (FileNotFoundException e) {
			LogUtil.writeErrorLog(e.getMessage(), e);
		} catch (IOException e) {
			LogUtil.writeErrorLog(e.getMessage(), e);
		} finally {
			if (null != bis)
				try {
					bis.close();
				} catch (IOException e) {
					LogUtil.writeErrorLog(e.getMessage(), e);
				}
			if (null != bos)
				try {
					bos.close();
				} catch (IOException e) {
					LogUtil.writeErrorLog(e.getMessage(), e);
				}
			new File(filepath).delete();
		}
	}

	public static CellStyle getContentStyle(SXSSFWorkbook wb) {

		CellStyle cellStyle = wb.createCellStyle();
		cellStyle.setBorderBottom(CellStyle.BORDER_THIN); // 下边框
		cellStyle.setBorderLeft(CellStyle.BORDER_THIN);// 左边框
		cellStyle.setBorderTop(CellStyle.BORDER_THIN);// 上边框
		cellStyle.setBorderRight(CellStyle.BORDER_THIN);// 右边框
		cellStyle.setAlignment(CellStyle.ALIGN_CENTER); // 水平居中
		cellStyle.setAlignment(CellStyle.VERTICAL_CENTER); // 垂直居中
		Font font = wb.createFont();
		font.setFontName("宋体");// 设置字体
		font.setFontHeightInPoints((short) 10);// 设置字体大小
		cellStyle.setFont(font);
		return cellStyle;
	}

	/**
	 * 表格赋值
	 * 
	 * @param cell
	 * @param map
	 * @param key
	 */
	public static void setCellValue(Cell cell, Map<String, Object> map, String key) {

		Object value = map.get(key);
		if (value == null) {
			cell.setCellValue("");
		} else if (value instanceof Double) {
			cell.setCellValue(((Double) value).doubleValue());
		} else if (value instanceof Date) {
			Date date = (Date) value;
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			cell.setCellValue(sdf.format(date));
		} else {
			String reg = "^\\d+$";
			String keyValue = value.toString();
			boolean isNum = keyValue.matches(reg);
			if (isNum) {
				cell.setCellValue(Double.valueOf(keyValue));

			} else {
				cell.setCellValue(value.toString());
			}

		}

	}

	/**
	 * excel导出
	 * 
	 * @param excelWith
	 * 
	 * @param machineComboOrderDao
	 * @param queryVO
	 * @param req
	 * @param res
	 * @param headMap
	 * @param excelName
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void doExportData(BaseDao baseDao, int[] excelWith, QueryVO queryVO, HttpServletRequest req, HttpServletResponse res, LinkedHashMap<String, String> headMap, String excelName) throws FileNotFoundException, IOException {

		// 总条数
		int totalCount = baseDao.queryCount(queryVO);
		int rows = 10;
		long start = System.currentTimeMillis();
		// 开始excel生成
		SXSSFWorkbook wb = new SXSSFWorkbook(100);
		Sheet sh = wb.createSheet();
		// 表格样式
		CellStyle cellStyle = getContentStyle(wb);
		// 设置表格宽度
		setShColumnWidth(sh, excelWith);
		// 循环数据
		Row row = sh.createRow(0);
		int headNum = 0;
		for (String key : headMap.keySet()) {
			Cell cell = row.createCell(headNum);
			cell.setCellValue(headMap.get(key));
			cell.setCellStyle(cellStyle);
			headNum++;
		}
		rows = 1000;
		int pageCount = totalCount % rows == 0 ? totalCount / rows : totalCount / rows + 1;
		int rowNum = 1;
		for (int i = 0; i < pageCount; i++) {
			List<Map<String, Object>> pageList = baseDao.findPageReturn(queryVO, pageCount, rows);
			for (Map<String, Object> map : pageList) {
				row = sh.createRow(rowNum);
				int index = 0;
				for (String key : headMap.keySet()) {
					Cell cell = row.createCell(index);
					ExportExcel.setCellValue(cell, map, key);
					cell.setCellStyle(cellStyle);
					index++;

				}
				rowNum++;

			}
		}

		String prePath = req.getSession().getServletContext().getRealPath("/");
		File file = new File(prePath);
		if (!file.exists())
			file.mkdirs();
		String filePath = prePath + excelName;
		FileOutputStream out = new FileOutputStream(filePath);
		wb.write(out);
		out.close();
		wb.dispose();
		openExcel(req, res, excelName);
		LogUtil.writeLog("导出excel的时间:" + (System.currentTimeMillis() - start) / 1000 + "秒");//记入日志
	}

	/**
	 * 设置表格宽度
	 * 
	 * @param sh
	 * @param excelWith
	 */
	private static void setShColumnWidth(Sheet sh, int[] excelWith) {

		for (int i = 0; i < excelWith.length; i++) {
			sh.setColumnWidth(i, excelWith[i]);
		}

	}
}

 5、jar包

poi-examples-3.13-20150929.jar

poi-excelant-3.13-20150929.jar

poi-ooxml-3.13-20150929.jar

poi-ooxml-schemas-3.13-20150929.jar

poi-scratchpad-3.13-20150929.jar

 

分享到:
评论

相关推荐

    delphi表格数据导出到excel的控件

    总的来说,"delphi表格数据导出到excel的控件"为Delphi开发人员提供了一种方便、高效的方法,使得在不深入研究Excel API的情况下也能完成复杂的表格数据导出任务。对于需要处理大量数据并要求与Excel交互的应用程序...

    java实现JSP表格数据导出到EXCEL文件

    在Java编程环境中,将JSP表格中的数据导出到Excel文件是一种常见的需求,尤其是在数据分析、报表生成和数据交换等场景中。本篇文章将详细介绍如何利用Java实现这一功能,主要涉及的技术包括Java Servlet、JSP以及...

    表格导出Excel_labview_Labview表格_Labview表格导出到excel表格_labview数据导入_labv

    “表格导出Excel.vi”是LabVIEW程序,其主要功能是实现从LabVIEW的表格数据导出到Excel文件。这个过程涉及到几个关键步骤: 1. 数据准备:首先,需要将LabVIEW中的表格数据转换成可以被Excel识别的格式。这通常意味...

    易语言高级表格快速导出EXCEL

    在"易语言高级表格快速导出EXCEL"这个项目中,开发者可能需要实现以下关键技术点: 1. **数据结构与表格对象**:首先,需要在易语言中创建合适的数据结构来存储表格数据,这通常涉及数组或链表等数据类型。同时,...

    MSFlexGrid表格数据导出到EXCEL

    本话题聚焦于如何高效地将MSFlexGrid中的数据导出到Excel文件,以适应大量数据处理的需求。 MSFlexGrid控件虽然功能强大,但在处理大量数据时,如果使用传统的FOR循环逐行逐列导出数据,效率会显著降低。为了解决这...

    将simulink示波器数据导出到excel表格教程

    在MATLAB Simulink环境中,将示波器数据导出到Excel表格是一项常见的需求,这有助于数据的存储、分析和进一步处理。以下是一份详细的步骤教程: 首先,我们需要准备一个Simulink模型,在模型中添加必要的组件。核心...

    easyui datagrid 数据导出到Excel

    在实际工作中,我们经常需要将这些展示的数据导出到Excel文件,以便进行进一步的分析或存储。下面将详细介绍两种有效的方法来实现EasyUI Datagrid数据导出到Excel的功能,并结合提供的文件名来推测具体实现步骤。 *...

    易语言高级表格导出EXCEL

    总的来说,"易语言高级表格导出EXCEL"涉及到了易语言的表格操作和数据导出能力,这对于需要处理大量数据和生成报表的项目非常实用。通过学习和实践,开发者可以提升自己在易语言环境下处理数据和与Excel交互的能力,...

    易语言高级表格快速导出EXCEL.7z

    《易语言高级表格快速导出EXCEL》是一个关于如何在易语言编程环境中高效地将数据导出为Excel格式的教程。易语言是中国本土开发的一种面向对象的、易学易用的编程语言,它旨在降低编程的难度,让更多人能够参与到程序...

    易语言高级表格数据导出Excel表格

    总的来说,易语言高级表格数据导出Excel表格涉及的知识点包括: 1. 易语言高级表格组件的使用,包括数据填充、读取和修改。 2. 文件操作命令的掌握,如打开、写入和关闭文件。 3. 数据序列化,特别是将表格数据转换...

    easyui+数据导出为Excel

    在IT行业中,前端数据处理和展示是至关重要的,特别是在企业级应用中,用户往往需要将大量数据导出为便于分析的格式,如Excel。本文将详细介绍如何在基于EasyUI的前端框架下实现数据导出为Excel的功能。 EasyUI是一...

    layui数据表格导出Excel插件

    layui数据表格导出Excel插件是一款为layui框架设计的实用工具,它允许用户方便地将layui数据表格中的数据导出到Excel文件中。layui是一款轻量级的前端UI框架,以其简洁、优雅的代码风格和丰富的组件库深受开发者喜爱...

    将listcontrl控件里的数据导出到excel表格里

    标题提到的"将listcontrl控件里的数据导出到excel表格里"就是这样一个需求。 要实现这个功能,你需要遵循以下步骤: 1. **数据获取**:首先,你需要从listctrl控件中读取所有数据。这通常通过遍历控件的所有行和列...

    从DBGrid导出到Excel表格 4种方法

    在该方法中,我们使用了第三方组件,例如报表组件或数据导出组件等,该组件提供了丰富的功能来将 DBGrid 的数据导出到 Excel 表格中。 總之,从 DBGrid 导出到 Excel 表格有多种方法,每种方法都有其优缺。开发者...

    C# 将数据导出到Excel汇总

    本文将基于给定的文件信息,深入探讨C#中将数据导出到Excel的几种方法,包括在ASP.NET环境中导出Excel的具体步骤。 #### ASP.NET中导出Excel的方法概览 在ASP.NET中导出数据到Excel主要分为两种基本策略:一是将...

    winform中将Datatable数据导出到Excel表格中

    winform中将Datatable数据导出到Excel表格中,该项目包含了例子,能使个人能更加了解winform将datatable数据导出到excel的整个流程,本资源也可拿来即用,只需要稍加修改即可。

    组态王历史数据导出EXCEL表格的方法.docx

    组态王历史数据导出EXCEL表格的方法 组态王是一种工业自动化软件,具有强大的数据采集和处理能力。为了更好地对历史数据进行分析和处理,需要将其导出到EXCEL表格中。本文将介绍组态王历史数据导出EXCEL表格的方法...

    delphi高效率导出数据到excel

    在这篇文章中,我们将介绍如何使用 Delphi 高效率地将数据导出到 Excel 中。 Delphi 中的 Excel 操作 在 Delphi 中,我们可以使用多种方式来操作 Excel,例如使用 OLE 自动化、ADO、DBGridEh 等。其中,使用 OLE ...

    简单实用网页表格数据导出Excel电子表格文件jQuery插件

    本项目"简单实用网页表格数据导出Excel电子表格文件jQuery插件"正是为了解决这一问题。 首先,我们来探讨jQuery的核心概念。jQuery简化了JavaScript的DOM操作,提供了统一的API来选择元素、添加事件处理程序、执行...

Global site tag (gtag.js) - Google Analytics