- 浏览: 325057 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
libaogui777:
前辈,您好, 使用PDFbox 提取内容遇到一个问题,想请教您 ...
java进行pdf解析-----pdfbox -
xin_hany:
提示惊醒了一下,解决了一个让人惆怅的问题,
danga的MemcachedClient的几个缺陷 -
roroyangivan:
牛B啊。。。我觉得 这种 回答。。。阿里的的CTO 都 HOL ...
怎样才是一个好的架构? -
406657836:
今天知道了一个线程创建时会给stack分配1M内存?一个线程默 ...
jvm线程的stack -
linzx0212:
受教了……
danga的MemcachedClient的几个缺陷
Excel领域的Velocity:JXLS,强烈推荐!
我终于找到了导出excel视图的最好实现:JXLS
http://jxls.sourceforge.net/
使用JXLS,能够达到Velocity的效果.将excel视图"模板化"
.
而jxls不光能输出字符串,还能输出图像,公式计算,自动由sql生成报表等等.
实在是导出excel必备利器啊!
(实在是了不起的创意!如果Word也能有类似实现,哈哈,想想都爽.)
这种模板方式操作excel比POI,JExcelAPI优越之处:
可视化编辑,实现任意复杂的excel,精确控制版面;
使用简单,不需要调用任何API,能够保持与Velocity一致性.
jxls VS poi == velocity VS servlet
(当然,jxls内部其实是使用poi作为底层api)
实际应用技巧:
JXLS
项目里仅仅提供了与WebWork的集成,我针对Spring
MVC扩展了一个JxlsExcelView
,类似于Spring的VelocityView,有了这个,同一个模型的数据能够直接提供给
Velocity或者Jxls解析,分别显示出html和excel,而不需要写任何代码.最近在数据分析系统里成功使用了.
下面是源码,如何使用我就不多说了,可以参考Spring官方文档中视图部分。
package excel.view; import java.util.Locale; import java.util.Map; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.jxls.transformer.XLSTransformer; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.core.io.Resource; import org.springframework.core.io.support.LocalizedResourceHelper; import org.springframework.web.servlet.support.RequestContextUtils; import org.springframework.web.servlet.view.AbstractView; public class JxlsExcelView extends AbstractView { private static String content_type="application/vnd.ms-excel; charset=UTF-8"; private static String extension=".xls"; private String fileName; private String location; public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public JxlsExcelView() { setContentType(content_type); } protected void renderMergedOutputModel(Map map, HttpServletRequest request, HttpServletResponse response) throws Exception { HSSFWorkbook workbook; LocalizedResourceHelper helper=new LocalizedResourceHelper(getApplicationContext()); Locale userLocale=RequestContextUtils.getLocale(request); Resource inputFile=helper.findLocalizedResource(location, extension, userLocale); XLSTransformer transformer=new XLSTransformer(); workbook=transformer.transformXLS(inputFile.getInputStream(), map); response.setContentType(getContentType()); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); ServletOutputStream out=response.getOutputStream(); workbook.write(out); out.flush(); } }
后记:
使用时要注意内存,因为jxls不是基于流操作的。不能转换太大的excel,一般超过10M的xls可能造成OOM。
当需要导出的数据量逐渐增长时,我们就会看到任务管理器里的内存消耗量“蹭蹭蹭”往上涨,直如牛市一发不可收,轻轻松松就“涨停”——
OutOfMemery了。这种情况可以理解:jxls使用poi进行excel操作,这是要先生成一个完整的Workbook对象后再保存到文件的。这
样内存里就需要存放所有的row和cell对象,而且在最后一条数据对象化前内存是始终得不到释放的。
根据经验,导出的数据(纯文本形式)大小如果为1K,需要消耗内存60K。也就是说比率是1:60。(这个比率目前是我大概估计的)。初步估算一下:如果导出的数据一行为250字节,4000行约为1M,导出excel时就需要60M内存。
因此,内存增长是一个问题,还有一个问题就是excel的2^16行数限制。
解决办法需要多管齐下:
1.多sheet进行分页。
2.多workbook进行分文件存储然后合并。
通过两次动作分解,可以将内存消耗维持在一个稳定的水平上。
具体原理不讲了,就发一段测试代码:。。。
【2007-7 bbs】
评论
* Using SQL queries directly in XLS templates
* Simple property access notation
* Full expression language support
* Complex object graph export
* Flexible collection export
* Flow-Control Tags support
* Dynamic grouping of data
* Export of a single collection into multiple worksheets
* Adjacent tables support!
* Complex formulas support
* Charts, Macros and many other Excel features in XLS template
* Dynamic Outlines
* Dynamic Columns Hiding
* Dynamic Cell Style processing through custom Processors
* JDBC ResultSet export
* Merged Cells support
* Multiple bean properties in a single cell
* Reading XLS files
把excel作为视图层,excel本身是可以由你自定义的。这种方式是在excel里写java变量,然后直接输出。
发表评论
-
Ruby API代码技巧
2012-05-23 21:53 1129http://www.slideshare.net/ihowe ... -
怎样才是一个好的架构?
2012-05-18 17:37 3749关于软件设计的抽象思想 曾经被阿里的某CTO问过一个问题 ... -
nginx的编译选项
2012-04-25 17:30 1575下载nginx源码包,编译命令之一: ./co ... -
10 Core Architecture Pattern Variations for Achieving Scalability
2011-11-20 22:00 1091【转载】:http://highscalability.com ... -
wowza doc of multi-bitrate streaming
2011-11-06 11:49 2399http://www.wowza.com/forums/con ... -
今天回首
2011-09-01 22:13 1301突然发觉很久不上javaeye了,仿佛生活中遗忘了这一块。 每 ... -
你的邮件”被垃圾“了吗?
2010-11-30 20:37 1141最近在注册系统中使用邮件激活,用公司的邮箱服务器发送帐号激活邮 ... -
mongodb的map/reduce实属鸡肋
2010-11-24 22:47 1538曾经被mongodb的特性所吸引,没想到map/reduce却 ... -
[老博迁移2005-11-09]TeracMiracle反编译成功
2010-08-12 22:13 898TeracMiracle反编译成功 TM:中国人写 ... -
[老博迁移2005-11-09] 越是官大,越是懒
2010-08-12 22:11 1170越是官大,越是懒 小小的公司里就有官僚了,真 ... -
danga的MemcachedClient的几个缺陷
2010-08-11 16:19 17428最近实际用起来我发现,java版danga的memcached ... -
今天参加RubyConfChina的活动,见识了
2010-06-27 00:27 1225这次是RubyConfChina的 ... -
该死的CXF
2010-04-15 21:20 1186为了连https web services,初步选择以前用得还 ... -
jsp太大编译不了,原来是64k的方法限制
2010-02-11 12:04 2847昨天遇到一个诡异的问题,吓出一身冷汗。 20几个300k ... -
javascript技巧:(function(){})()
2010-02-11 12:03 1208javascript技巧:(function(){})() ... -
lucene搜索引擎简单应用
2010-02-11 12:02 1248还用lucene架了个搜索引擎,对pdf进行全文搜索(联合 ... -
java进行pdf解析-----pdfbox
2010-02-11 11:58 10549对pdf解析有不少成熟技术,经过选型,我最后选定用pdfb ... -
用flash动态上传文件
2010-02-11 11:52 1193用flash写了一个动态的文件上传功能,当然也用了jque ... -
不当家不知道柴米贵,不开发不知道重启费
2010-02-11 11:21 1165话说我开始逐渐脱离群众,开发得越来越少。还好最近做了 ... -
【转】Getting real
2010-02-11 11:18 922【转】Getting real 刚才偶然看到的, ...
相关推荐
赠送jar包:velocity-engine-core-2.3.jar; 赠送原API文档:velocity-engine-core-2.3-javadoc.jar; 赠送源代码:velocity-engine-core-2.3-sources.jar; 赠送Maven依赖信息文件:velocity-engine-core-2.3.pom;...
快速入门一些示例已为您准备好: $ git clone https://github.com/fool2fish/velocity.git$ cd examples尝试一个简单的命令: $ cd hello$ velocity 输出: Hello, velocity!更多例子方法查询查看依赖从模板中提取...
velocity-tools-2.0.jar velocity-tools-2.0.jar velocity-tools-2.0.jar velocity-tools-2.0.jar velocity-tools-2.0.jar
这些数据可以通过Spring的ModelAndView、Velocity的Context或者简单的Java对象传递给jxls。例如,如果你有一个User对象列表,你可以创建一个List并将其传递给jxls,它会自动将对象属性填充到模板对应的位置。 接...
本指南将演示如何结合RNA Velocity分析使用已处理/标准化的Seurat对象。 请记住,尽管Seurat是基于R的,但是所有可用的RNA Velocity软件/软件包都是Python,因此我们将在两者之间来回移动。 我们将使用以下程序: ...
Java Velocity 项目生成器使用 Jave Velocity 模板构建前端 Web 应用程序的生成器。特征CSS 自动前缀带有 LiveReload 的内置预览服务器自动编译 CoffeeScript & Sass 自动 lint 你的脚本自动将图像内联到 css 文件...
(1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以...
用于 Sublime 文本的 Java Velocity 片段瓦尔斯[设置] 设置变量描述:设置变量的方法回程:虚空#set($${ 1 : var } = ${ 2 : " " })[var] 使用 var 描述:写变量的方法$ ! {${ 2 : var }}大批[aa] array.add 描述:...
推荐使用此方法,特别是当判断集合对象是否为null时,非常实用。例如: ```velocity #if($null.isNull()) 变量为null #else 变量不为null #endif ``` ### 2. 判断Velocity变量是否为空 在Velocity中,"空"通常...
Velocity是Apache软件基金会的一个开源项目,它是一款Java模板引擎,用于生成动态Web内容。 Velocity的主要目的是将呈现逻辑从业务逻辑中分离出来,使得开发者可以专注于应用程序的后端处理,而设计师则可以自由地...
**Velocity 概述** Velocity 是一个基于 Java 的模板引擎,它设计用于生成静态网页或动态内容,如 HTML、XML、JavaScript、SQL 或者其他任何文本格式。Velocity 被广泛应用于 Apache Struts 和其他 Web 应用框架中...
mat-velocity 提供velocity模板的渲染功能 Installation npm install --save mat-velocity Usage var mat = require('mat') var velocity = require('mat-velocity') var rewrite = require('mat-rewrite') mat.task...
**Velocity EU 演示项目概览** "velocity:我在 Velocity EU 的演示项目"这个标题表明,这是一个在 Velocity EU 大会上展示的项目,重点可能在于速度优化或高性能的 JavaScript 应用。Velocity EU 是一个专注于 web ...
**标题解析:** "dropdown-menu-with-velocity" 这个标题表明我们将探讨一个与下拉菜单相关的主题,特别提到了 "Velocity.js",这是一款快速、轻量级的JavaScript动画库,它被用来实现下拉菜单的动态效果。...
script src =" bower_components/velocity/velocity.min.js " > </ script >< script src =" bower_components/velocity/velocity.ui.min.js " > </ script >< script src =" bower_...
使用 Meteor/Velocity 进行 InstantDEX 测试 InstantDEX Testing with Meteor+Velocity 先决条件 1) NXT must be running (http://nxt.org/) 2) BTCD must be running (https://github.com/jl777/btcd) 1 安装流星...
spring-boot-velocityvelocity 和spring boot 只要还是熟悉下velocity的基本使用方法开始接触下是spring boot 结合下vm模版引擎学习下。需要注意的是解决乱码问题#需要指定下编码格式spring.velocity.properties....
赠送jar包:velocity-1.7.jar; 赠送原API文档:velocity-1.7-javadoc.jar; 赠送源代码:velocity-1.7-sources.jar; 包含翻译后的API文档:velocity-1.7-javadoc-API文档-中文(简体)版.zip 对应Maven信息:...
** Velocity 模板引擎配置详解 ** Velocity 是一个开源的 Java 模板引擎,它允许开发者将业务逻辑与页面展示分离,使得 HTML 页面更专注于布局和设计,而将动态数据处理交由后端代码处理。Velocity 通过使用简单的...
### Velocity语法精析 Velocity是一种基于Java的模板引擎,它允许开发者通过简单的语法来动态生成HTML、XML或任何文本格式的文档。其语法简洁且功能强大,被广泛应用于Web开发中,尤其在Java企业级应用中表现突出。...