当前位置:软件学习 > Excel >>

etmvc+jQuery EasyUI+POI动态导出EXCEL

一直想找一种简单的办法来实现JQuery easyUI datagrid的数据导出,试了很多种都不是特别理想,主要是我这里后端使用etmvc框架。先是在前端想了一些办法,没戏,后来有想过把datagrid的数据重新传回后端来实现EXCEL导出,但是感觉这代价太大,再后来想了个折中的办法,就是把查询条件传回后端,重新进行数据库查询,再导出,一再权衡最后使用POI实现了动态导出EXCEL,感觉还是不是特别理想(各位如果有更好的办法请赐教),不管怎样总算实现了,代码如下:
先来一个使用POI实现Excel输出类,都忘了是从哪找的了,代码很清晰明了,感谢前辈:
[java]  
package common;  
  
import java.io.*;  
import java.lang.reflect.*;  
import java.util.*;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
import java.text.SimpleDateFormat;  
import javax.swing.JOptionPane;  
import org.apache.poi.hssf.usermodel.*;  
import org.apache.poi.hssf.util.HSSFColor;  
  
/** 
 *  
 * 利用开源组件POI3.0.2动态导出EXCEL文档 
 *  
 * 转载时请保留以下信息,注明出处! 
 *  
 * @author leno 
 *  
 * @version v1.0 
 *  
 * @param <T> 
 *            应用泛型,代表任意一个符合javabean风格的类 
 *  
 *            注意这里为了简单起见,boolean型的属性xxx的get器方式为getXxx(),而不是isXxx() 
 *  
 *            byte[]表jpg格式的图片数据 
 */  
  
public class ExportExcel<T> {  
    public void exportExcel(Collection<T> dataset, OutputStream out) {  
        exportExcel("Sheet1", null, dataset, out, "yyyy-MM-dd");  
    }  
    public void exportExcel(String[] headers, Collection<T> dataset,  
    OutputStream out) {  
        exportExcel("Sheet1", headers, dataset, out, "yyyy-MM-dd");  
    }  
    public void exportExcel(String[] headers, Collection<T> dataset,  
    OutputStream out, String pattern) {  
        exportExcel("Sheet1", headers, dataset, out, pattern);  
    }  
    /** 
     *  
     * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符号一定条件的数据以EXCEL 的形式输出到指定IO设备上 
     *  
     *  
     *  
     * @param title 
     *  
     *            表格标题名 
     *  
     * @param headers 
     *  
     *            表格属性列名数组 
     *  
     * @param dataset 
     *  
     *            需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的 
     *  
     *            javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据) 
     *  
     * @param out 
     *  
     *            与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中 
     *  
     * @param pattern 
     *  
     *            如果有时间数据,设定输出格式。默认为"yyy-MM-dd" 
     */  
  
    @SuppressWarnings("unchecked")  
    public void exportExcel(String title, String[] headers,  
    Collection<T> dataset, OutputStream out, String pattern) {  
        // 声明一个工作薄  
        HSSFWorkbook workbook = new HSSFWorkbook();  
        // 生成一个表格  
        HSSFSheet sheet = workbook.createSheet(title);  
        // 设置表格默认列宽度为15个字节  
        sheet.setDefaultColumnWidth((short) 15);  
        // 生成一个样式  
        HSSFCellStyle style = workbook.createCellStyle();  
        // 设置这些样式  
        style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);  
        style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
        style.setBorderRight(HSSFCellStyle.BORDER_THIN);  
        style.setBorderTop(HSSFCellStyle.BORDER_THIN);  
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);  
        // 生成一个字体  
        HSSFFont font = workbook.createFont();  
        font.setColor(HSSFColor.VIOLET.index);  
        font.setFontHeightInPoints((short) 12);  
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  
        // 把字体应用到当前的样式  
        style.setFont(font);  
        // 生成并设置另一个样式  
        HSSFCellStyle style2 = workbook.createCellStyle();  
        style2.setFillForegroundColor(HSSFColor.WHITE.index);  
        style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  
        style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);  
        style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);  
        style2.setBorderRight(HSSFCellStyle.BORDER_THIN);  
        style2.setBorderTop(HSSFCellStyle.BORDER_THIN);  
        style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);  
        style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
        // 生成另一个字体  
        HSSFFont font2 = workbook.createFont();  
    &
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,