- 浏览: 161577 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
semmy:
赞一个
displaytag的Excel导出实践 -
李君寻:
...
displaytag的Excel导出实践 -
xiaoz170:
不太明白为嘛包这一层 class ,反而使代码更复杂。难道是为 ...
试读《基于MVC的JavaScript Web富应用开发》— 不一样的JavaScript -
lingceng:
<mirror> <id>U ...
maven usage guide
前言
Displaytag官网有1.0, 1.1, 1.2等,注意找到对应的版本。源码和API可以在Maven库中找到。
常规的使用不是问题,这里说说关于Excel导出的问题,中文乱码,使用POI等。我使用的是Displaytag1.1。
基本导出功能
这种情况只需引入displaytag-1.1.jar。
设置column属性media="html"将不会导出,media="excel"不会页面显示,默认既显示又导出。
setProperty也可以写在displaytag.properties中应用于所有表格。
online demo
这时候导出的excel打开的时候office会报警,但是能够打开,因为这不是正真的excel,只是csv改了后缀的纯文本格式。可能出现中文乱码,通过重载ExcelView来解决。
修改displaytag.properties中对应条目:
export.excel.class=yourpackage.SimpleChineseExcelView
这样就勉强能用了,只要能够忍受每次都需要另存为excel来避免报警,不用中文文件名,不在bodycontent中使用中文。这样的实现只能是差强人意。中文问题解决
使用POI
需要引入额外的displaytag-export-excel-1.1.jar,使用Maven解决依赖。
修改displaytag.properties中对应条目:
export.excel.class=org.displaytag.export.excel.ExcelHssfView
配置export filter:
filter-mapping加在struts之前,acegi之后(如果有),放struts之后会出问题。
很好地解决各种中文问题,也是真正的excel。
实践Hack:
项目中已经有了poi3.6,而displaytag-export-excel-1.1依赖的是poi3.0,版本太高,需要重新写一个ExcelHssfView。其实很简单,找到ExcelHssfView的源码,删除其中的所有的setEncoding方法,setEncoding方法在poi3.6中没有。修改后的代码如下,当然记得修改export.excel.class:
Displaytag官网有1.0, 1.1, 1.2等,注意找到对应的版本。源码和API可以在Maven库中找到。
常规的使用不是问题,这里说说关于Excel导出的问题,中文乱码,使用POI等。我使用的是Displaytag1.1。
基本导出功能
这种情况只需引入displaytag-1.1.jar。
设置column属性media="html"将不会导出,media="excel"不会页面显示,默认既显示又导出。
setProperty也可以写在displaytag.properties中应用于所有表格。
online demo
<display:table name="test" export="true" id="currentRowObject"> <display:column property="id" title="ID" /> <display:column property="email" /> <display:column property="status" /> <display:column media="html" property="date" /> <display:setProperty name="export.excel" value="true" /> <display:setProperty name="export.excel.filename" value="export.xls" /> </display:table>
这时候导出的excel打开的时候office会报警,但是能够打开,因为这不是正真的excel,只是csv改了后缀的纯文本格式。可能出现中文乱码,通过重载ExcelView来解决。
Class SimpleChineseExcelView extends ExcelView { public String getMimeType(){ //原代码是return "application/vnd.ms-excel"; return "application/vnd.ms-excel;charset=gbk"; } }
修改displaytag.properties中对应条目:
export.excel.class=yourpackage.SimpleChineseExcelView
这样就勉强能用了,只要能够忍受每次都需要另存为excel来避免报警,不用中文文件名,不在bodycontent中使用中文。这样的实现只能是差强人意。中文问题解决
使用POI
需要引入额外的displaytag-export-excel-1.1.jar,使用Maven解决依赖。
修改displaytag.properties中对应条目:
export.excel.class=org.displaytag.export.excel.ExcelHssfView
配置export filter:
<!--Configure the Filter in your web.xml:--> <filter> <filter-name>ResponseOverrideFilter</filter-name> <filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class> </filter> <!--And add mappings for urls the filter will intercept, for example:--> <filter-mapping> <filter-name>ResponseOverrideFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <filter-mapping> <filter-name>ResponseOverrideFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>
filter-mapping加在struts之前,acegi之后(如果有),放struts之后会出问题。
很好地解决各种中文问题,也是真正的excel。
实践Hack:
项目中已经有了poi3.6,而displaytag-export-excel-1.1依赖的是poi3.0,版本太高,需要重新写一个ExcelHssfView。其实很简单,找到ExcelHssfView的源码,删除其中的所有的setEncoding方法,setEncoding方法在poi3.6中没有。修改后的代码如下,当然记得修改export.excel.class:
package com.lingceng; import java.io.OutputStream; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import javax.servlet.jsp.JspException; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.displaytag.Messages; import org.displaytag.exception.BaseNestableJspTagException; import org.displaytag.exception.SeverityEnum; import org.displaytag.export.BinaryExportView; import org.displaytag.model.Column; import org.displaytag.model.ColumnIterator; import org.displaytag.model.HeaderCell; import org.displaytag.model.Row; import org.displaytag.model.RowIterator; import org.displaytag.model.TableModel; /** * Excel exporter using POI HSSF. * @author Fabrizio Giustina * @author rapruitt * @version $Revision: 1.2 $ ($Author: fgiust $) */ public class MyExcelHssfView implements BinaryExportView { /** * TableModel to render. */ private TableModel model; /** * export full list? */ private boolean exportFull; /** * include header in export? */ private boolean header; /** * decorate export? */ private boolean decorated; /** * Generated sheet. */ private HSSFSheet sheet; /** * @see org.displaytag.export.ExportView#setParameters(TableModel, boolean, boolean, boolean) */ public void setParameters(TableModel tableModel, boolean exportFullList, boolean includeHeader, boolean decorateValues) { this.model = tableModel; this.exportFull = exportFullList; this.header = includeHeader; this.decorated = decorateValues; } /** * @return "application/vnd.ms-excel" * @see org.displaytag.export.BaseExportView#getMimeType() */ public String getMimeType() { return "application/vnd.ms-excel"; //$NON-NLS-1$ } /** * @see org.displaytag.export.BinaryExportView#doExport(OutputStream) */ public void doExport(OutputStream out) throws JspException { try { HSSFWorkbook wb = new HSSFWorkbook(); sheet = wb.createSheet("-"); int rowNum = 0; int colNum = 0; if (this.header) { // Create an header row HSSFRow xlsRow = sheet.createRow(rowNum++); HSSFCellStyle headerStyle = wb.createCellStyle(); headerStyle.setFillPattern(HSSFCellStyle.FINE_DOTS); headerStyle.setFillBackgroundColor(HSSFColor.BLUE_GREY.index); HSSFFont bold = wb.createFont(); bold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); bold.setColor(HSSFColor.WHITE.index); headerStyle.setFont(bold); Iterator iterator = this.model.getHeaderCellList().iterator(); while (iterator.hasNext()) { HeaderCell headerCell = (HeaderCell) iterator.next(); String columnHeader = headerCell.getTitle(); if (columnHeader == null) { columnHeader = StringUtils.capitalize(headerCell.getBeanPropertyName()); } HSSFCell cell = xlsRow.createCell((short) colNum++); cell.setCellValue(columnHeader); cell.setCellStyle(headerStyle); //cell.setEncoding(HSSFCell.ENCODING_UTF_16); } } // get the correct iterator (full or partial list according to the exportFull field) RowIterator rowIterator = this.model.getRowIterator(this.exportFull); // iterator on rows while (rowIterator.hasNext()) { Row row = rowIterator.next(); HSSFRow xlsRow = sheet.createRow(rowNum++); colNum = 0; // iterator on columns ColumnIterator columnIterator = row.getColumnIterator(this.model.getHeaderCellList()); while (columnIterator.hasNext()) { Column column = columnIterator.nextColumn(); // Get the value to be displayed for the column Object value = column.getValue(this.decorated); HSSFCell cell = xlsRow.createCell((short) colNum++); //cell.setEncoding(HSSFCell.ENCODING_UTF_16); if (value instanceof Number) { Number num = (Number) value; cell.setCellValue(num.doubleValue()); } else if (value instanceof Date) { cell.setCellValue((Date) value); } else if (value instanceof Calendar) { cell.setCellValue((Calendar) value); } else { cell.setCellValue(escapeColumnValue(value)); } } } wb.write(out); } catch (Exception e) { throw new ExcelGenerationException(e); } } // patch from Karsten Voges /** * Escape certain values that are not permitted in excel cells. * @param rawValue the object value * @return the escaped value */ protected String escapeColumnValue(Object rawValue) { if (rawValue == null) { return null; } String returnString = ObjectUtils.toString(rawValue); // escape the String to get the tabs, returns, newline explicit as \t \r \n returnString = StringEscapeUtils.escapeJava(StringUtils.trimToEmpty(returnString)); // remove tabs, insert four whitespaces instead returnString = StringUtils.replace(StringUtils.trim(returnString), "\\t", " "); // remove the return, only newline valid in excel returnString = StringUtils.replace(StringUtils.trim(returnString), "\\r", " "); // unescape so that \n gets back to newline returnString = StringEscapeUtils.unescapeJava(returnString); return returnString; } /** * Wraps IText-generated exceptions. * @author Fabrizio Giustina * @version $Revision: 1.2 $ ($Author: fgiust $) */ static class ExcelGenerationException extends BaseNestableJspTagException { /** * D1597A17A6. */ private static final long serialVersionUID = 899149338534L; /** * Instantiate a new PdfGenerationException with a fixed message and the given cause. * @param cause Previous exception */ public ExcelGenerationException(Throwable cause) { super(ExcelHssfView.class, Messages.getString("ExcelView.errorexporting"), cause); //$NON-NLS-1$ } /** * @see org.displaytag.exception.BaseNestableJspTagException#getSeverity() */ public SeverityEnum getSeverity() { return SeverityEnum.ERROR; } } }
发表评论
-
CoffeeScript notes: write less do more
2013-07-26 10:36 1071The Little Book on CoffeeScript ... -
使用jslint与qunit保障JS代码质量
2013-07-09 11:16 982使用jslint进行语法和风格的检查,可以预防错误。 ... -
jQuery几个实用的方法
2013-05-18 15:49 747有段时间没有碰jQuery,回来继续用的时候,发现几个方法很有 ... -
Vim find & replace
2013-04-10 17:59 1178Vim find & replace (RT) To ... -
Gson切面日志实践
2013-02-26 17:47 2405背景 应用切面做日志记录,记录操作实体详情时可以使用JSO ... -
vim fast move tip
2013-01-23 11:03 884search: * to search current ... -
Vim good Tip
2013-01-07 00:35 0Most time is spent reading, ... -
displaytag的汇总功能
2012-11-07 10:39 1090displaytag 有列汇总功能,以前不知道step1:需要 ... -
让maven打包快些
2012-10-25 10:20 1101Maven中打包常使用war:package,这个命令会编 ... -
修改Eclipse项目呈现
2012-10-22 15:01 803Eclipse的maven项目总是呈现一些不需要的试图,因为被 ... -
Ubuntu上使用SSH
2012-10-21 23:27 909ubuntu默认并没有安装ssh服务,如果通过ssh链接ubu ... -
Ubuntu安装 Apache
2012-10-21 13:23 861Ubuntu为我们提供了 su apt-get install ... -
常用eclipse插件
2012-10-16 21:27 773update at 2013-12-09 使用Eclipse ... -
jquery的表格插件,选择显示列
2012-10-16 16:59 2421git clone可以获取源码,选择显示列。 https:// ... -
vim coding
2012-10-16 15:32 754Vim和所有的流行文本编 ... -
vim tab
2012-10-16 15:16 720set autoindent "use backs ... -
install subeclipse on ubuntu
2012-09-09 12:30 977Ubuntu12.10, eclipse indigo i ... -
maven usage guide
2012-08-28 13:08 1470edit at 2012-12-09 学习全在于应用,实 ... -
win7笔记本建Android能够访问的WIFI
2012-08-18 01:03 1100使用软件可以方便的建立adhoc,但是Android目前不支持 ... -
Maven & resin
2012-07-28 17:11 2658Maven带来的变化 使用maven构建工程很方便,但 ...
相关推荐
3. `displaytag-export-poi`: 这部分代码可能与数据导出功能有关,特别是使用Apache POI库来生成Excel或Word文档。POI是一个流行的API,允许Java程序创建、修改和读取Microsoft Office格式的文件,这对于从Web应用中...
6. **导出功能**:可以将表格数据导出为CSV、Excel、PDF等格式,便于数据分析或打印。 在这个"displaytag简单项目"中,你可能需要关注以下几个关键点: 1. **配置DisplayTag**:在项目的web.xml中,你需要配置...
4. **下载功能**:DisplayTag支持导出表格数据到各种格式,如CSV、Excel或PDF,使得用户可以方便地保存和共享数据。 5. **国际化与本地化**:DisplayTag支持多种语言,可以根据用户浏览器的设置自动调整标签的文本...
DisplayTag内置了多种数据导出格式,包括CSV、Excel、PDF和XML。只需简单配置,用户就可以将表格数据导出为这些格式,这对于数据交换和备份具有很高的实用性。 5. **自定义样式和模板** DisplayTag允许开发者通过...
5. **导出功能**:DisplayTag允许将表格数据导出为CSV、Excel、PDF等多种格式,这在数据分析和报告生成时非常有用。 6. **自定义行为**:DisplayTag的标签可以扩展,允许开发者添加自定义的行为和样式,以满足特定...
6. **导出功能**:DisplayTag支持导出表格数据为CSV、Excel、PDF等格式。通过设置`export`属性为true并指定`exportNames`,可以开启导出功能。 7. **国际化与本地化**:DisplayTag允许开发者使用资源包来支持多语言...
5. **导出功能**:DisplayTag可以将表格数据导出为CSV、Excel、PDF等多种格式,便于数据分析和共享。 6. **可扩展性**:DisplayTag提供了丰富的扩展接口,可以添加自定义的行为和功能,如自定义列渲染、过滤器等。 ...
- **导出**:DisplayTag还支持将表格数据导出为CSV、Excel、PDF等多种格式。 4. **自定义和扩展**:DisplayTag提供了丰富的API和接口,允许开发者自定义显示行为,如创建新的标签、过滤器、格式化器等。通过扩展...
用户可以通过点击DisplayTag提供的导出链接,将表格数据导出为CSV、Excel或PDF格式。只需设置`export`属性为true,并配置相应的导出参数即可。 9. **自定义样式** DisplayTag允许开发者通过CSS来定制表格的样式,...
5. **导出功能**:DisplayTag提供了将表格数据导出为CSV、Excel、PDF等格式的功能,只需添加相应的导出链接即可。 6. **条件渲染**:你可以使用DisplayTag的条件渲染功能,根据数据的值来决定单元格的样式或内容。 ...
7. **导出功能**:DisplayTag支持将表格数据导出为CSV、Excel、PDF等多种格式,只需设置`export`属性即可。 在"自己做的小例子"这个文件中,你可能会找到一些具体的代码示例,演示如何在实际项目中集成和使用...
- **导出**:使用`export`属性,可以将表格数据导出为CSV、Excel、XML等多种格式。 3. **样式与CSS** DisplayTag允许开发者使用CSS来控制表格的外观。例如,可以使用`class`属性为行或列设置CSS类,或者使用`...
5. **导出功能**:DisplayTag可以将表格数据导出为CSV、Excel、PDF等多种格式,方便用户进行数据的离线分析。 6. **自定义样式和模板**:DisplayTag允许开发者使用CSS和JSP标签来自定义表格的外观和布局,提高表格...
- **导出功能**:能够将表格数据导出为CSV、Excel、PDF等多种格式,便于数据分析和共享。 - **可扩展性**:通过扩展标记库和自定义标签,可以实现复杂的数据呈现逻辑。 2. **DisplayTag安装与配置** 在项目中...
5. **导出功能**:DisplayTag可以将表格数据导出为CSV、Excel、PDF等多种格式,方便用户进一步处理或打印。 6. **自定义样式**:通过使用CSS,你可以轻松调整表格的外观,使其符合网站的整体设计。 7. **列隐藏与...
4. **功能丰富**:除了分页,还包括列排序、筛选、导出(如CSV、PDF、Excel)等实用功能。 5. **兼容性**:DisplayTag与主流的Java Web框架如Struts、Spring MVC等良好集成,可以无缝地融入到现有项目中。 `...
- 数据导出:通过`export`属性,可以将表格数据导出为CSV、Excel或PDF格式。 5. **整合Spring MVC**: 如果项目使用了Spring MVC,DisplayTag可以与之完美结合。数据模型可以通过ModelAndView或者Model对象传递...
- **导出**:启用`export`属性后,用户可以选择导出表格数据为CSV、Excel或PDF格式。 - **国际化**:Display Tag支持多语言,可以使用`bundle`和`locale`属性指定资源包和语言环境。 5. **自定义行为和样式** - ...