此文章是基于  搭建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"导出到浏览器

  

  

jxls实现基于excel模板的报表的更多相关文章

  1. NPOI之使用EXCEL模板创建报表

    因为项目中要用到服务器端创建EXCEL模板 无法直接调用EXCEL 查了下发现NPOI很方便很简单就实现了 其中走了点弯路 第一次弄的时候发现输出的值是文本不是数字型无法直接计算公式 然后又发现打开报 ...

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

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

  3. 10月12号 晚八点 Speed-BI 云平台-基于Excel数据源的管理驾驶舱构建全过程,腾讯课堂开课啦

    认真地做了一大摞一大摞的报表,老板没时间看?努力把能反馈的内容都融汇进图表里,老板嫌复杂?做了几个简单的报表,老板一眼就觉得信息不全面?每个报表都用了各种各样的图表,老板却毫无兴趣?明明很努力了,为什 ...

  4. Chimm.Excel —— 使用Java 操作 excel 模板文件生成 excel 文档

    Chimm.Excel -- 设置模板,填充数据,就完事儿了~ _____ _ _ _____ _ / __ \ | (_) | ___| | | | / \/ |__ _ _ __ ___ _ __ ...

  5. 报表中的Excel操作之Aspose.Cells(Excel模板)

    原文:报表中的Excel操作之Aspose.Cells(Excel模板) 本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导 ...

  6. c#操作Excel模板,替换命名单元格或关键字形成报表

    c#操作Excel模板,替换命名单元格或关键字形成报表 http://blog.sina.com.cn/s/blog_45eaa01a0102vqma.html一 建立Excel 模板文件 templ ...

  7. python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...

  8. java实现excel模板导出

    一. 准备工作 1. 点击此下载相关开发工具 2. 将poi-3.8.jxls-core-1.0两个jar包放到工程中,并引用 3. 将excel模板runRecord.xls放到RunRecordB ...

  9. 使用Aspose.Cell控件实现Excel高难度报表的生成(三)

    在之前几篇文章中,介绍了关于Apsose.cell这个强大的Excel操作控件的使用,相关文章如下: 使用Aspose.Cell控件实现Excel高难度报表的生成(一) 使用Aspose.Cell控件 ...

随机推荐

  1. CSS3过渡效果 兼容IE6、IE7、IE8

    <style> .box{ width:120px;height:40px;background:yellowgreen;line-height:40px;transition:width ...

  2. centos下部署NFS

        一. NFS简介   NFS---Network File System:主要功能是通过网络让不同的linux主机系统间可以彼此共享文件和目录.NFS客户端可以通过挂载的方式将NFS服务器端共 ...

  3. linux修改用户名

      貌似只需要改红色的就行了,要保险就都改,比如阿里云服务器就要2个都改   ubuntu:修改 /etc/hostname               修改 /etc/hosts  比如:127.0 ...

  4. ResourceBundle和Locale

    一.认识国际化资源文件   这个类提供软件国际化的捷径.通过此类,可以使您所编写的程序可以:          轻松地本地化或翻译成不同的语言          一次处理多个语言环境          ...

  5. Kettle入门及性能优化FAQ

    1.安装 配置Java环境 Java环境配置问题 java_home:D:\Program Files\Java\jdk1.7.0_25(安装jdk路径) classpath:.;%java_home ...

  6. HTML-★★★★★表单★★★★★

    表单 <form id="" name="" method="post/get" action="负责处理的服务端" ...

  7. MUI 滚动插件使用

    在Vue中 使用MUI滚动插件 官方文档地址:http://dev.dcloud.net.cn/mui/ui/#scroll 示例:初始化scroll控件: mui('.mui-scroll-wrap ...

  8. JAVA中 this关键字的用法

    this 在类中就是代表当前对象,可以通过 this 关键字完成当前对象的成员属性.成员方法和构造方法的调用. 那么何时用 this? 当在定义类中的方法时,如果需要调用该类对象,就可以用 this来 ...

  9. Vue.js路由跳转带参数到模板组件。

    从SalesOrderQuery组件跳到SalesOrder组件,并且通过params属性携带数据. handleClick(row) { //alert(row.FSaleName);//获取该行F ...

  10. yield return 的使用方法

    以下代码,返回List,list内容为大于60的项 public Form1() { InitializeComponent(); } private void Form1_Load(object s ...