导出功能的实现

10.导出

a.在网页上新建一个导出按钮

<a onclick="toExport()" class="easyui-linkbutton" iconCls="icon-export">导出</a>

b.在JavaScript中写按钮的触发事件

//获取参数
function getJsonParams(){
    var searchName = encodeURI($("#ss").textbox("getValue"));
    var json={name:searchName,depid:depid};
   return json2str(json)
}
//导出
function toExport() {
    var paramJsonStr = getJsonParams();
    window.location.href = "ProjectExcelExport?systemname=student&type=StuQuery?ms=" + paramJsonStr;
}

值得注意的是:该向后台发送的请求并不是hebe请求,而是servlet请求,因此在请求控制配置不在gatewaybeans.xml中,而是在web.xml中

c.在web.xml中配置请求控制

<!--excel导出-->
<servlet>
    <servlet-name>ProjectExcelExport</servlet-name>
    <servlet-class>cn.com.goldsea.hebedemo.entity.ProjectExcelExport</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ProjectExcelExport</servlet-name>
    <url-pattern>/ProjectExcelExport</url-pattern>
</servlet-mapping>

值得注意的是:该配置文件路径点击能找到该类

d.选一个地方新建一个类ProjectExcelExport,

public class ProjectExcelExport extends HttpServlet{
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.reset();

String systemname = request.getParameter("systemname");
        String type = request.getParameter("type");
        String params = request.getParameter("params");
        String fileName = "";
        HSSFWorkbook workbook = new HSSFWorkbook();

//学生查询
        if (systemname.equals("student")) {
            StudentExcelBean bean = new StudentExcelBean();
            Object[] obj = bean.landStudentExcel(type, params, workbook);
            fileName = (String) obj[0];
            workbook = (HSSFWorkbook) obj[1];
        }
值得注意的是:所有导出其他地方都一样,需要改变的就是这里,根据发送的参数不同选择相应的判断条件

response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
            fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");     //firefox浏览器
        } else {
            fileName = encode(fileName, "UTF-8");        //IE浏览器
        }
        response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + ".xls" + "\"");
        ServletOutputStream sos = null;
        try {
            sos = response.getOutputStream();
            workbook.write(sos);
            sos.flush();
        } finally {
            try {
                sos.close();
            } catch (IOException e) {
            }
        }
    }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

/**
     * 替换字符串卷
     *
     * @param str     被替换的字符串
     * @param charset 字符集
     * @return 替换好的
     * @throws java.io.UnsupportedEncodingException 不支持的字符集
     */
    public static String encode(String str, String charset) throws UnsupportedEncodingException {
        Pattern p = Pattern.compile("[\u4e00-\u9fa5]+");      //只替换中文汉字
        Matcher m = p.matcher(str);
        StringBuffer b = new StringBuffer();
        while (m.find()) {
            m.appendReplacement(b, URLEncoder.encode(m.group(0), charset));
        }
        m.appendTail(b);
        return b.toString();
    }
}

e.在需要导出相关的bean包下面新建一个Excel包,在该包下面新建一个StudentExcelBean

该类用于需要导出表的查询或表格名的设置,当然还是需要建一个工具类ExcelUtils。

public class StudentExcelBean extends BaseBean{
    public Object[] landStudentExcel(String type, String params, HSSFWorkbook workbook) {
        String xlsName = "";
        if (type.equals("StuQuery")) {
            xlsName = "学生信息一览表";
            List<Map<String, Object>> maps = getStuQueryExcelData(params);
            if (null != maps) {
                StuQueryExcel excel = new StuQueryExcel();
                workbook = excel.getStuQueryExcel(workbook, maps, xlsName);
            }
        }
        return new Object[]{xlsName, workbook};
    }
    private List<Map<String, Object>> getStuQueryExcelData(String param) {

String name = JSON_UTIL.getJsonData(param, "name");
        String depid=JSON_UTIL.getJsonData(param,"depid");
        String sql=  "select s.sno,s.name,s.birthday,s.createtime,s.sex,s.depid,s.loginname,d.depname "+
                "from t_student s, t_department d where s.depid = d.id"  ;
        if(name!=null&&!name.equals("")){
            sql += " and s.name like ‘%" + name + "%‘";
        }
        if(depid!=null&&!depid.equals("")){
            sql += " and s.depid=" + depid;
        }
        sql += " order by d.id";
        return DBL_CLIENT.invokeQuery(sql);
    }
}

值得注意的是:该类基本上都是需要自己写的。其中这个sql语句拼接就是查询时后台bean中的sql语句。即可以根据条件查询后再导出自己需要的列表

f.在Excel包中再新建一个StuQueryExcel类,该类用于设置导出成Excel表的属性

public class StuQueryExcel {
    public HSSFWorkbook getStuQueryExcel(HSSFWorkbook workbook, List<Map<String, Object>> maps, String xlsName) {
        HSSFCellStyle cellStyleNormal = workbook.createCellStyle();
        cellStyleNormal.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        cellStyleNormal.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
        cellStyleNormal.setWrapText(true);

HSSFSheet sheet = workbook.createSheet(xlsName);

//设置列宽
        sheet.setColumnWidth(0, 3000);
        sheet.setColumnWidth(1, 4000);
        sheet.setColumnWidth(2, 4000);
        sheet.setColumnWidth(3, 4000);
        sheet.setColumnWidth(4, 3000);
        sheet.setColumnWidth(5, 5000);

HSSFRow row = sheet.createRow(0);
        sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) 5));
        HSSFCell cell = row.createCell((short) 0);
        HSSFFont font = workbook.createFont();
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        font.setFontHeightInPoints((short) 18);
        HSSFCellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setFont(font);
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        cell.setCellStyle(cellStyle);
        cell.setCellValue(new HSSFRichTextString(xlsName));

row = sheet.createRow(1);
        row.setHeight((short) 400);
        ExcelUtils.GenerateNormalCell(new CellRangeAddress(1, 1, 0, 0), 0, "学号", sheet, cellStyleNormal, row);
        ExcelUtils.GenerateNormalCell(new CellRangeAddress(1, 1, 1, 1), 1, "姓名", sheet, cellStyleNormal, row);
        ExcelUtils.GenerateNormalCell(new CellRangeAddress(1, 1, 2, 2), 2, "生日", sheet, cellStyleNormal, row);
        ExcelUtils.GenerateNormalCell(new CellRangeAddress(1, 1, 3, 3), 3, "创建时间", sheet, cellStyleNormal, row);
        ExcelUtils.GenerateNormalCell(new CellRangeAddress(1, 1, 4, 4), 4, "性别", sheet, cellStyleNormal, row);
        ExcelUtils.GenerateNormalCell(new CellRangeAddress(1, 1, 5, 5), 5, "所属院系", sheet, cellStyleNormal, row);

int rowIndex = 2;
        Object[] objects;
        for (Map<String, Object> objectMap : maps) {
            row = sheet.createRow(rowIndex);
            row.setHeight((short) 400);
            objects = new Object[6];
            objects[0] = objectMap.get("sno") != null ? objectMap.get("sno").toString() : "";
            objects[1] = objectMap.get("name") != null ? objectMap.get("name").toString() : "";
            if (objectMap.get("birthday") != null) {
                objects[2] = DateUtil.time2(Long.valueOf(String.valueOf(objectMap.get("birthday")).substring(0, 8)));
            } else {
                objects[2] = "";
            }
            if (objectMap.get("createtime") != null) {
                objects[3] = DateUtil.time2(Long.valueOf(String.valueOf(objectMap.get("createtime")).substring(0, 8)));
            } else {
                objects[3] = "";
            }
            if (String.valueOf(objectMap.get("sex")).equals("1")) {
                objects[4] = "男";
            }  else {
                objects[4] = "女";
            }

objects[5] = objectMap.get("depname") != null ? objectMap.get("depname").toString() : "";

loadContractRow(objects, rowIndex, sheet, cellStyleNormal, row);
            rowIndex++;
        }
        return workbook;
    }

private void loadContractRow(Object[] objects, int rowIndex, Sheet sheet, HSSFCellStyle cellStyleNormal, HSSFRow row) {
        int count = 0;
        if (null != objects && objects.length > 0) {
            for (int i = 0; i < objects.length; i++) {
                ExcelUtils.GenerateNormalCell(new CellRangeAddress(rowIndex, rowIndex, count, count), count, objects[i], sheet, cellStyleNormal, row);
                count++;
            }
        }
    }
}

值得注意的是:标蓝的地方都是需要自己写的,根据默认列表字段来写

时间: 2024-08-16 16:59:25

导出功能的实现的相关文章

利用Aspose.Cells完成easyUI中DataGrid数据的Excel导出功能

我准备在项目中实现该功能之前,google发现大部分代码都是利用一般处理程序 HttpHandler实现的服务器端数据的Excel导出,但是这样存在的问题是ashx读取的数据一般都是数据库中视图的数据,难免会含有方便操作的 主键ID这列的记录.现在项目需要在easyUI的DataGrid中显示的数据能全部导出Excel,包括DataGrid中的中文标题,其他的统统不 要. 完成该功能所需的工具和环境:Newtonsoft.Json序列化和反序列化类库.easyUI前端UI框架.HttpHandl

excel导出功能优化

先说说优化前,怎么做EXCEL导出功能的: 1. 先定义一个VO类,类中的字段按照EXCEL的顺序定义,并且该类只能用于EXCEL导出使用,不能随便修改. 2. 将查询到的结果集循环写入到这个VO类中. 3. 将这个VO类的数据集写入到EXCEL中. 缺点: 1.每次做一个功能的excel导出需要定义一个vo类,并且vo类不可随便变更. 2. 从数据库查询到结果集不能直接输出到excel,需要二次遍历写入到vo中. 3. excel导出的顺序必须与vo定义的字段顺序一致,并且输出vo中所有的字段

写了一个Windows API Viewer,提供VBA语句的导出功能。提供两万多个API的MSDN链接查询

世面上的API Viewer已经不少了,但给VBA用的几乎没有.我自己写了一个Windows API Viewer,提供VBA语句的导出功能,并可以提供两万多个API的MSDN链接查询. 环境需求:Windows 7.1 SP1及以上操作系统,安装.Net 4.5.2及以上框架. 下载地址:API Viewer v1.1 下载

【HOW】如何限制Reporting Services报表导出功能中格式选项

Reporting Services报表导出功能中缺省会提供多种导出格式选项,但很多情况下不需要全部的格式选项,因此需要对这些选项进行限制.下面我们以SQL Server 2008 R2为例来说明对这些选项进行限制的方法. 1. 打开报表服务配置文件:"C:\Program Files\Microsoft SQL Server\MSRS10_50.QUIST\Reporting Services\Report Server\ rsreportserver.config". 2. 在上述

Jxl、JxCell图表导出功能的实现

最近接触过许多报表导出功能,也用过多种工具进行导出功能的实现,但对于图表的导出一直没有仔细的去展开研究和探讨,直到最近略微整理了下这方面的需求和技术攻克. 首先导出excel功能的实现主要有JXL.JXCELL.POI等工具.目前只实现了JXL和JXCELL. JXL: 先介绍下JXL: jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API可 供使用,一个是POI,一个是jExcelAPI.其中功能相对POI比较弱一点.但jExcelAPI对中文支持非常好

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能(转)

1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 . 该项目的GitHub地址是: https://github.com/Maatwebsite/Laravel-Excel . 本文我们将在Laravel中使用Laravel Excel简单实现Excel文件的导入和导出. 2.安装&配置 使用Composer安装依赖 首先在Laravel项目根目录

解决highCharts导出功能汉化问题

转自:http://www.cnblogs.com/jyh317/p/4191841.html 本文以highCharts中文网上的例子为原型,处理解决highCharts导出功能为英文的问题. 我们使用highCharts当然希望所有提示或文本都是中文的了,但是highCharts的默认语言是英语,如下图. 那么怎么把图片中导出功能的提示换成中文呢? 本文利用highCharts的在线测试平台来解决这个问题. 只需要加入一个全局设置,即可解决这个问题. Highcharts.setOption

源泉书签,助您管理海量收藏。今日更新【里程碑】支持书签导出功能了,从此不怕网络书签丢失了,随时随地备份您的书签。

源泉书签,助您管理海量收藏,www.yuanquanshuqian.com:今日更新[里程碑]支持书签导出功能了,从此不怕网络书签丢失了,随时随地备份您的书签. 版权声明:本文为博主原创文章,未经博主允许不得转载.

【转】使用Eclipse自带的导出功能

转载地址:http://www.xuebuyuan.com/759047.html Eclipse打包(导出)jar文件攻略(一)–使用Eclipse自带的导出功能 2012年10月02日 ⁄ 综合 ⁄ 共 517字 ⁄ 字号 小 中 大 ⁄ 评论关闭 使用Eclipse自带的导出功能生成jar文件 1.  在项目任何地方点击右键-Export-Java-JAR file,Next 2.  JAR文件选项,Next 注意选项“Compress the contents of the JAE fi

用SpringMvc实现Excel导出功能

以前只知道用poi导出Excel,最近用了SpringMvc的Excel导出功能,结合jxl和poi实现,的确比只用Poi好,两种实现方式如下: 一.结合jxl实现: 1.引入jxl的所需jar包: <dependency org="net.sourceforge.jexcelapi" name="jxl" rev="2.6.3" conf="compile->compile(*),master(*);runtime->