此文章是基于  搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台

一. jar包介绍

  1. commons-collections-3.2.jar

  2. commons-digester-2.1.jar

  3. commons-jexl-2.1.1.jar

  4. jxls-core-1.0.jar

  5. poi-3.8-20120326.jar

  6. poi-ooxml-3.8-20120326.jar

二. 相关文件介绍

  1. TestController.java

package com.ims.web.controller;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import net.sf.jxls.transformer.XLSTransformer; import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView; @Controller
@RequestMapping("test")
public class TestController extends BaseController{ @RequestMapping("view")
public ModelAndView test(){
ModelAndView view = new ModelAndView("test.jsp");
return view;
} @RequestMapping("export!excel")
public void export(){
String templateFileName = "runRecord.xls";
String webrootPath = System.getProperty("webapp.root");
String templateFilePath = webrootPath + "view\\iot\\";
String destFileName= "设备运行记录卡.xls"; Map<String, Object> beans = new HashMap<String, Object>(); // 设备信息
Map<String, Object> product = new HashMap<String, Object>();
product.put("model", "XG2016");
product.put("version", "V1.0");
beans.put("product", product); // 年、月、日
beans.put("year", "2016");
beans.put("month", "08");
beans.put("day", "08"); // 运行记录
Map<String, Object> record = new HashMap<String, Object>();
record.put("inputVoltage", "200");
record.put("inputVoltageStatus", 0);
record.put("inputCurrent", "50");
record.put("inputCurrentStatus", 0);
beans.put("record", record); // 异常处理
List<Map<String, Object>> exceptions = new ArrayList<Map<String, Object>>();
Map<String, Object> e1 = new HashMap<String, Object>();
e1.put("detail", "输入电压过大");
e1.put("handle", "降低输入电压");
e1.put("handleMode", 1);
exceptions.add(e1); Map<String, Object> e2 = new HashMap<String, Object>();
e2.put("detail", "输入电流过大");
e2.put("handle", "降低输入电流");
e2.put("handleMode", 1);
exceptions.add(e2); beans.put("exceptions", exceptions); InputStream in = null;
OutputStream out = null; try {
XLSTransformer transformer = new XLSTransformer();
in = new BufferedInputStream(new FileInputStream(templateFilePath+templateFileName));
Workbook workbook=transformer.transformXLS(in, beans);
HSSFSheet sheet = (HSSFSheet) workbook.getSheetAt(0); int startMergeLine = 7; // 开始合并的行数
// 合并异常处理清单单元格
if(exceptions.size()>0){
sheet.addMergedRegion(new CellRangeAddress(startMergeLine, startMergeLine+exceptions.size()-1, 0, 0));
} //将内容写入输出流并把缓存的内容全部发出去
// out = new FileOutputStream(templateFilePath+destFileName);
request.setCharacterEncoding("UTF-8");
response.setContentType("application/x-download;charset=GBK");
response.setHeader("Content-Disposition", "attachment;filename="+new String(destFileName.getBytes("GBK"),"ISO8859_1")); out=response.getOutputStream();
workbook.write(out);
out.flush();
} catch (Exception e) {
e.printStackTrace();
} finally{
try{
if(out!=null)
out.close();
if(in!=null)
in.close();
}catch(Exception e){
e.printStackTrace();
}
}
} }

  2. excelModelExport.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试</title>
<%@ include file="/common/basePath.jsp"%>
</head>
<body>
~~~~~~~~~~~~~~~~~~~~~~excel模板导出~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<br><br>
<button type="button" onclick="exportExl();">导出</button> <script type="text/javascript" src="content/js/jquery/jquery-1.8.1.min.js"></script>
<script type="text/javascript" src="content/js/core/utils.js"></script>
<script type="text/javascript" src="content/js/core/common.js"></script>
<script type="text/javascript">
function exportExl(){
var exporter = com.exporter();
exporter.params.action = rootPath+"/test/export!excel.do";
exporter.download('xls');
}
</script>
</body>
</html>

  3. utils.js

/**
* 模块名:共通脚本
* 程序名: 通用工具函数
**/ var utils = {}; /**
* 格式化字符串
* 用法:
.formatString("{0}-{1}","a","b");
*/
utils.formatString = function () {
for (var i = 1; i < arguments.length; i++) {
var exp = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
arguments[0] = arguments[0].replace(exp, arguments[i]);
}
return arguments[0];
};

  4. common.js

/// <reference path="utils.js" />

/**
* 模块名:共通脚本
* 程序名: 通用方法common.js
**/
var com = {}; com.exporter = function (opt) {
var self = this; var defaultOptions = {
action: "",
dataAction: "",
dataParams: {},
titles: [[]],
fileType: 'xls',
compressType: 'none'
}; this.paging = function (page,rows) {
self.params.dataParams.page = page;
self.params.dataParams.rows = rows;
return self;
}; this.compress = function () {
self.params.compressType = 'zip';
return self;
}; this.title = function (filed,title) {
self.params.titles[filed] = title;
return self;
}; this.download = function (suffix) {
self.params.fileType = suffix || "xls";
self.params.dataParams = JSON.stringify(self.params.dataParams);
self.params.titles = JSON.stringify(self.params.titles); //创建iframe
var downloadHelper = $('<iframe style="display:none;" id="downloadHelper"></iframe>').appendTo('body')[0];
var doc = downloadHelper.contentWindow.document;
if (doc) {
doc.open();
doc.write('')//微软为doc.clear();
doc.writeln(utils.formatString("<html><body><form id='downloadForm' name='downloadForm' method='post' action='{0}'>", self.params.action));
for (var key in self.params) doc.writeln(utils.formatString("<input type='hidden' name='{0}' value='{1}'>", key, self.params[key]));
doc.writeln('<\/form><\/body><\/html>');
doc.close();
var form = doc.forms[0];
if (form) {
form.submit();
}
}
}; initFromGrid = function (grid) {
var options = grid.$element().datagrid('options');
if (grid.treegrid)
options.url = options.url || grid.treegrid('options').url; var titles = [[]], length = Math.max(options.frozenColumns.length, options.columns.length);
for (var i = 0; i < length; i++)
titles[i] = (options.frozenColumns[i] || []).concat(options.columns[i] || []) self.params = $.extend(true, {}, defaultOptions, {
dataAction: options.url,
dataParams: options.queryParams,
titles: titles
});
}; if (opt && opt.$element)
initFromGrid(opt);
else
self.params = $.extend(true, {}, defaultOptions, opt); return self;
};

  5. excel模板可参考: jxls实现动态图表

三. 运行测试

  访问:http://localhost:8080/ims/test/excelModelExport.do,点击  导出  按钮,就有"设备运行记录卡.xls"导出到浏览器

  

  

java实现excel模板导出的更多相关文章

  1. 14. java基于excel模板导出excel=>使用jxls最新版(注意点)

    注意点:如下: jxls官网:http://jxls.sourceforge.net/getting_started.html

  2. 关于Java中excel表格导出的总结(Java程序导出模板和Java根据模板导出表格两种实现方式)

    导出excel通用模板(程序定义模板导出) 转载原文:https://www.jianshu.com/p/5c7b359a159c 如下代码,本方法主要用于程序定义模板格式,并导出文件.该方法将定义和 ...

  3. java实现Excel数据导出

    java实现Excel数据导出: 目前,比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel Jakarta POI 是一套用于访问微软格式文档的Java ...

  4. .Net NPOI 根据excel模板导出excel、直接生成excel

    一.根据Excel模板导出excel 1.导入NPOI.dll  2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...

  5. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

  6. JAVA实现Excel导入/导出【转】

    JAVA实现Excel导入/导出[转] POI的下载与安装 请到网站http://www.apache.org/dyn/closer.cgi/poi/右击超链接2.5.1.zip下载压缩包poi-bi ...

  7. kettle 使用excel模板导出数据

    通过excel进行高速开发报表: 建设思路: 1.首先制订相关的execl模板. 2.通过etl工具(kettle)能够高速的 将数据库中的数据按excel模板导出成新的excel就可以. 当中ket ...

  8. Magicodes.IE之Excel模板导出教材订购表

    说明 本教程主要说明如果使用Magicodes.IE.Excel完成教材订购表的Excel模板导出. 要点 本教程使用Magicodes.IE.Excel来完成Excel模板导出 需要通过创建Dto来 ...

  9. JAVA生成EXCEL模板

    JAVA生成excel模板,支持1.必填字段前加 红色 * 2.定义可选值下拉列表 valList3.定义名称并通过名称设置可选值 refName(名称在sheet2,sheet2自动隐藏)4.支持设 ...

随机推荐

  1. Linux process vs thread

    Linux process vs thread Question I have a query related to the implementation of threads in Linux. L ...

  2. springMVC学习笔记(二)-----注解和非注解入门小程序

    最近一直在做一个电商的项目,周末加班,忙的都没有时间更新博客了.终于在上周五上线了,可以轻松几天了.闲话不扯淡了,继续谈谈springMvc的学习. 现在,用到SpringMvc的大部分使用全注解配置 ...

  3. 【Python实战】Scrapy豌豆荚应用市场爬虫

    对于给定的大量APP,如何爬取与之对应的(应用市场)分类.描述的信息?且看下面分解. 1. 页面分析 当我们在豌豆荚首页搜索框输入微信后,会跳转到搜索结果的页面,其url为http://www.wan ...

  4. Autofac - 装配

    从容器中的可用服务中, 选取一个构造函数来创造对象, 这个过程就是自动装配. 一.选择构造函数 默认情况下, autofac会使用无参构造函数, 去创建对象. 我将Person类稍微修改了下. pub ...

  5. 【C#】 异常处理

    异常是在程序执行期间出现的问题.C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零等异情况. 异常提供了一种把程序控制权从某个部分转移到另一个部分的方式. C# 异常处理时建立在四个 ...

  6. linux系统下make & make install

    make,make install都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤. make是用来编译的,在命令行输入make命令之后,系统会在当前目录下搜索Makefi ...

  7. java 字符串操作和日期操作

    一.字符串操作 创建字符串 String s2 = new String("Hello World"); String s1 = "Hello World"; ...

  8. 转载:《TypeScript 中文入门教程》 8、函数

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 函数是JavaScript应用程序的基础. 它帮助你实现抽象层,模拟类,信息隐藏 ...

  9. Dumpbin 工具的使用

    dumpbin用法:dumpbin /exports /out:d:\mfc90.txt d:\mfc90.lib 在使用VC时,可以用DUMPBIN.EXE来得到某个DLL中所输出的符号的清单.如下 ...

  10. JAVA理解逻辑程序的书上全部重要的习题

    今天随便翻翻看以前学过JAVA理解逻辑程序的书上全部练习,为了一些刚学的学弟学妹,所以呢就把这些作为共享了. 希望对初学的学弟学妹有所帮助! 例子:升级“我行我素购物管理系统”,实现购物结算功能 代码 ...