jsp表格数据导出到Execl

1.关于“下载”

需要设置页面header的一个属性为:Content-Disposition: attachment; filename=下载的文件.txt

如:

<a href="down.jsp">下载</a>

down.jsp:
<%
        response.setHeader("Content-Disposition", "attachment;fileName=download.txt");
    %>

2.关于Execl

使用jxl的

jxl地址:http://www.andykhan.com/jexcelapi/download.html

这里面有jar包和api文档,还有一些例子。

下面看正文了。

一、写个页面index.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>导出Execl</title>
<script type="text/javascript" src="jquery-1.10.2.min.js"></script>
<script type="text/javascript">
    function toExecl(){
        //解析表格
        var arrData=new Array();
        var jsonData = "[";
        var objTable=document.getElementById("tab");
        if(objTable)
        {
           for(var i=0;i<objTable.rows.length;i++)//行
           {
              //每一行开始
              var rowData = "{";
              for(var j=0;j<objTable.rows[i].cells.length;j++)//列
              {
                  //每一行的数据
                  if(j > 0){
                      rowData = rowData + "," + objTable.rows[i].cells[j].innerText;
                  }else{
                      rowData = rowData + objTable.rows[i].cells[j].innerText;
                  }
              }
              //每一行结尾
              if(i < (objTable.rows.length -1)){
                  rowData = rowData + "},"
              }else{
                  rowData = rowData + "}"
              }
                 //添加每一行到json字符串中
                 jsonData = jsonData + rowData;
           }
        }
        jsonData = jsonData + "]";
        //alert(jsonData);

        /* //发送ajax请求
        $.ajax({
                    url: "toExecl",
                    type: "POST",
                    data: {"jsonData": jsonData},
                    dataType: "text",
                    cache: false,
                    success: function (result) {
                        alert("success");
                    }
                }); */

         var form=$("<form>");//定义一个form表单
         form.attr("style","display:none");
         form.attr("target","");
         form.attr("method","post");
         form.attr("action","toExecl");//跳转到servlet
         var input1=$("<input>");
         input1.attr("type","hidden");
         input1.attr("name","jsonData");
         input1.attr("value",jsonData);
         $("body").append(form);//将表单放置在web中
         form.append(input1);

         form.submit();//表单提交
    }

    //下载
    function downloadDoc(filePath,fileName){
        var path = filePath+fileName;
        var contextLength = "<%=request.getContextPath()%>";
        var sp = path.substring(contextLength.length,path.length);
        document.getElementById("path").value = sp;
        document.getElementById("fileName").value = fileName;
        //down_frame.location.href = path;decodeURI(path);encodeURIComponent
        var sForm1 = document.form1;
        sForm1.action = "<%=request.getContextPath()%>/com/icss/mdm/usermanual/servlet/StandardDocDownServlet";
        sForm1.submit();  

    }
</script>
</head>
<body>
    <div id="tableExcel">

        <table id="tab">
            <tr height="18" style="height: 13.5pt">
                <td height="18" width="72" style="height: 13.5pt; width: 54pt">姓名</td>
                <td width="72" style="width: 54pt">性别</td>
                <td width="72" style="width: 54pt">年龄</td>
            </tr>
            <tr height="18" style="height: 13.5pt">
                <td height="18" style="height: 13.5pt">杨xx</td>
                <td>男</td>
                <td align="right">27</td>
            </tr>
            <tr height="18" style="height: 13.5pt">
                <td height="18" style="height: 13.5pt">测试1</td>
                <td>女</td>
                <td align="right">18</td>
            </tr>
            <tr height="18" style="height: 13.5pt">
                <td height="18" style="height: 13.5pt">测试2</td>
                <td>女</td>
                <td align="right">18</td>
            </tr>
            <tr height="18" style="height: 13.5pt">
                <td height="18" style="height: 13.5pt">测试3</td>
                <td>女</td>
                <td align="right">18</td>
            </tr>
            <tr height="18" style="height: 13.5pt">
                <td height="18" style="height: 13.5pt">刘德华</td>
                <td>男</td>
                <td align="right">48</td>
            </tr>
        </table>
    </div>
    <a href="javascript:void(0)" onclick="toExecl()">导出execl</a>

    <a href="down.jsp">下载</a>

</body>
</html>

二、链接地址跳转到一个servlet

web.xml

<servlet>
      <servlet-name>toExecl</servlet-name>
      <servlet-class>com.mlxs.execl.servlet.ToExecl</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>toExecl</servlet-name>
      <url-pattern>/toExecl</url-pattern>
  </servlet-mapping>

ToExeclServlet:

package com.mlxs.execl.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class ToExecl extends HttpServlet{

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("multipart/form-data");
        resp.setHeader("Content-Disposition", "attachment;fileName=text.xls");
        //处理前台传的数据
        String dataStr = req.getParameter("jsonData");
        dataStr = dataStr.replace("[{", "").replace("}]", "").replace("{", "");
        String[] dataArr = dataStr.split("},");

        try {
            //1.创建一个workbook(对应Excel文件 )
            WritableWorkbook workbook = Workbook.createWorkbook(resp.getOutputStream());
            //2.在workbook中添加一个sheet(Excel文件中的sheet)
            WritableSheet sheet = workbook.createSheet("导出数据", 0);
            //3.创建表头单元格,并设置文字格式
            WritableFont wf = new WritableFont(WritableFont.ARIAL, 12, WritableFont.NO_BOLD);
            WritableCellFormat wcf = new WritableCellFormat(wf);
            wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
            wcf.setAlignment(Alignment.CENTRE);
            //4.设置行数
            sheet.setRowView(1, 100);

            //5.设置数据
            for (int i = 0; i < dataArr.length; i++) {
                //每一行的数据
                System.out.println("data:"+dataArr[i]);
                String[] str = dataArr[i].split(",");
                //每一列
                for (int j = 0; j < str.length; j++) {
                    if(i==0){
                        sheet.addCell(new Label(j, i, str[j], wcf));//new Label(列号, 行号, 数据, 单元格)
                        continue;
                    }
                    sheet.addCell(new Label(j, i, str[j]));
                }

            }
            //6.end
            workbook.write();
            workbook.close();
        } catch (RowsExceededException e) {
            e.printStackTrace();
        } catch (WriteException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

三、效果图:

时间: 2024-08-01 10:31:32

jsp表格数据导出到Execl的相关文章

JavaScript将网页表格数据导出为Excel文件

不使用服务器端的技术,直接使用js将网页中的表格数据导出为excel文件,支持所有浏览器:前提条件是:网页中的表格数据必须使用table标签排版且不能有任何错误. <!DOCTYPE HTML> <html> <head> <title>javascript exportExcel</title> </head> <body> <table id="name" border="1&quo

将页面中表格数据导出excel格式的文件(vue)

近期由于项目需要,需要将页面中的表格数据导出excel格式的文件,折腾了许久,在网上各种百度,虽然资料不少,但是大都不全,踩了许多坑,总算是皇天不负有心人,最后圆满解决了. 1.安装相关依赖(npm安装可能会出现某些错误,可以使用cnpm): npm install file-saver --save // 保存文件用 npm install xlsx --save // 转二进制用 npm install script-loader --save-dev // xlsx核心文件 2.下载两个核

C# 将数据导出到Execl汇总

一.asp.net中导出Execl的方法: 在asp.net中导出Execl有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出流写给浏览器.在Response输出时,t分隔的数据,导出execl时,等价于分列,n等价于换行. 1.将整个html全部输出execl 此法将html中所有的内容,如按钮,表格,图片等全部输出到Execl中. Response.Clear();         Response.Buffer=   true

Vue2.0---将页面中表格数据导出excel (详细)

这是教程 项目中,后台数据生成的表格如何导出成excel? 一.需要安装三个依赖: npm install -S file-saver xlsx npm install -D script-loader 二.项目中新建一个文件夹:(vendor---名字任取) 里面放置两个文件Blob.js 和 Export2Excel.js. 百度可下载. 三.在.vue文件中     写这两个方法:其中list是表格的内容 export2Excel() { require.ensure([], () =>

将ASP.NET 数据导出到execl

将上图数据保存到execl //导出到execl protected void Execl_Click(object sender, EventArgs e) { System.Web.UI.Control ctl = this.Repeater1; //Repeater1是你在窗体中拖放的控件 HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=Excel

Vue2.0---将页面中表格数据导出excel

这不是教程,是随笔. 项目中将后台返回的数据v-repeat到表格中,然后需要将这个表格导出为EXCEL 只说怎么做. 一.需要安装三个依赖: npm install -S file-saver xlsx npm install -D script-loader 二.项目中新建一个文件夹:(vendor---名字任取) 里面放置两个文件Blob.js和 Export2Excel.js. 百度可下载. 三.在.vue文件中     写这两个方法:其中list是表格的内容 export2Excel(

exportExcel() JavaScript将网页表格数据导出为Excel

<!DOCTYPE HTML><html> <head> <script type="text/javascript" language="javascript"> var idTmr; function getExplorer() { var explorer = window.navigator.userAgent; //ie if (explorer.indexOf("MSIE") >=

前端表格数据导出excel

使用tableExport.js导出bootstrap-table表格成excel并且支持中文 1. 下载tableExport.js https://github.com/hhurz/tableExport.jquery.plugin 2.   修改tableExport.js文件,使其支持中文 /*The MIT License (MIT) Original work Copyright (c) 2014 https://github.com/kayalshri/ Modified work

Swing表格数据转xls文档

花了一下午的时间终于实现了Swing表格数据转xls文档与读取xls文档数据. 接下来上代码 1.弹出文件,目录选择框 exportBtn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String name = "数据.xls"; String defaultPath = "D://temp"; //构造文件保存对话框