如何将jsp页面的table报表转换到excel报表导出

如何将jsp页面的table报表转换到excel报表导出,第1张

  本篇教程我们会看到如何把JSP页面导出到Excel中,会在已有的JSP页面中增加导出excel的功能。

  许多时候对于用户来说,可以在excel中看到页面内容是很方便的。公共的方案会被导出成包含一些报告、数字等信息的表格。通过导出数据导出到excel中,最终用户也可以使用excel来做各种的分析,这一点对于你的java基本程序来实现,是有困难的。

  这是对应的jsp源码(导出excel功能还没有加)。一个包含简单数据表格的jsp页面。

  <%@ page language="java" contentType="text/html; charset=ISO-8859-1"

  pageEncoding="ISO-8859-1"%>

  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 401 Transitional//EN" "http://wwww3org/TR/html4/loosedtd">

  <html>

  <head>

  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

  <title>Export to Excel - Demo</title>

  </head>

  <body>

  <table align="center" border="2">

  <thead>

  <tr bgcolor="lightgreen">

  <th>Sr No</th>

  <th>Text Data</th>

  <th>Number Data</th>

  </tr>

  </thead>

  <tbody>

  <%

  for (int i = 0; i < 10; i++) {

  %>

  <tr bgcolor="lightblue">

  <td align="center"><%=i%></td>

  <td align="center">This is text data <%=i%></td>

  <td align="center"><%=i i%></td>

  </tr>

  <%

  }

  %>

  </tbody>

  </table>

  </body>

  </html>

  我们会添加一个“导出到excel”的超链接,它会把页面内容导出到excel文件中。那么这个页面会变成上图。

  下面是新版本的jsp源码。这个版本增加了“导出到excel”超链接,而且增加了相应的功能:

  <%@ page language="java" contentType="text/html; charset=ISO-8859-1"

  pageEncoding="ISO-8859-1"%>

  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 401 Transitional//EN" "http://wwww3org/TR/html4/loosedtd">

  <html>

  <head>

  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

  <title>Export to Excel - Demo</title>

  </head>

  <body>

  <%

  String exportToExcel = requestgetParameter("exportToExcel");

  if (exportToExcel != null

  && exportToExceltoString()equalsIgnoreCase("YES")) {

  responsesetContentType("application/vndms-excel");

  responsesetHeader("Content-Disposition", "inline; filename="

  + "excelxls");

  

  }

  %>

  <table align="left" border="2">

  <thead>

  <tr bgcolor="lightgreen">

  <th>Sr No</th>

  <th>Text Data</th>

  <th>Number Data</th>

  </tr>

  </thead>

  <tbody>

  <%

  for (int i = 0; i < 10; i++) {

  %>

  <tr bgcolor="lightblue">

  <td align="center"><%=i + 1%></td>

  <td align="center">This is text data <%=i%></td>

  <td align="center"><%=i i%></td>

  </tr>

  <%

  }

  %>

  </tbody>

  </table>

  <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

  

  <%

  if (exportToExcel == null) {

  %>

  <a href="exceljspexportToExcel=YES">Export to Excel</a>

  <%

  }

  %>

  </body>

  </html>

这里有个例子供参考:

<%

String fileName=(String)requestgetAttribute("fileName");

fileName = new String(fileNamegetBytes("GBK"), "iso-8859-1");

responsereset();

responsesetContentType("application/vndms-excel;charset=GBK");

responseaddHeader("Content-Disposition","attachment; filename=" + fileName);

%>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gbk"/>

</head>

<body>

<table width="100%" border="1" align="right" cellpadding="0" cellspacing="1">

<thead>

<tr>

<th>序号</th>

<th>编码</th>

<th>时间</th>

</tr>

</thead>

<tbody>

<c:forEach var="entity" items="${pageBeandataList}" varStatus="s">

<tr>

<td><c:out value="${sindex+1}"/></td>

<td><c:out value="${entitycode}"/></td>

<td><fmt:formatDate value="${entityreturnDate}" pattern="yyyy-MM-dd HH:mm:ss" /></td>

</tr>

</c:forEach>

</tbody>

</table>

</body>

</html>

你是想将jsp中的数据导出到excel吧,有个关于java导出excel的jar包封装了这个功能,这个jar包你自己去百度下载下来就行,给你个示例,看看就能明白了。

package oacommonutils;

import javaioOutputStream;

import javautilList;

import javaxservlethttpHttpServletResponse;

import orgapachestruts2ServletActionContext;

import javalangreflectField;

import jxlWorkbook;

import jxlformatAlignment;

import jxlformatBorder;

import jxlformatBorderLineStyle;

import jxlformatVerticalAlignment;

import jxlwriteLabel;

import jxlwriteWritableCellFormat;

import jxlwriteWritableFont;

import jxlwriteWritableSheet;

import jxlwriteWritableWorkbook;

/

@author lsf

/

public class ExportExcel {

/

@param fileName EXCEL文件名称

@param listTitle EXCEL文件第一行列标题集合

@param listContent EXCEL文件正文数据集合

@return

/

public final static String exportExcel(String fileName,String[] Title, List<Object> listContent) {

String result="系统提示:Excel文件导出成功!";

// 以下开始输出到EXCEL

try {

//定义输出流,以便打开保存对话框______________________begin

HttpServletResponse response=ServletActionContextgetResponse();

OutputStream os = responsegetOutputStream();// 取得输出流

responsereset();// 清空输出流

responsesetHeader("Content-disposition", "attachment; filename="+ new String(fileNamegetBytes("GB2312"),"ISO8859-1"));

// 设定输出文件头

responsesetContentType("application/msexcel");// 定义输出类型

//定义输出流,以便打开保存对话框_______________________end

/ 创建工作簿 /

WritableWorkbook workbook = WorkbookcreateWorkbook(os);

/ 创建工作表 /

WritableSheet sheet = workbookcreateSheet("Sheet1", 0);

/ 设置纵横打印(默认为纵打)、打印纸 /

jxlSheetSettings sheetset = sheetgetSettings();

sheetsetsetProtected(false);

/ 设置单元格字体 /

WritableFont NormalFont = new WritableFont(WritableFontARIAL, 10);

WritableFont BoldFont = new WritableFont(WritableFontARIAL, 10,WritableFontBOLD);

/ 以下设置三种单元格样式,灵活备用 /

// 用于标题居中

WritableCellFormat wcf_center = new WritableCellFormat(BoldFont);

wcf_centersetBorder(BorderALL, BorderLineStyleTHIN); // 线条

wcf_centersetVerticalAlignment(VerticalAlignmentCENTRE); // 文字垂直对齐

wcf_centersetAlignment(AlignmentCENTRE); // 文字水平对齐

wcf_centersetWrap(false); // 文字是否换行

// 用于正文居左

WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);

wcf_leftsetBorder(BorderNONE, BorderLineStyleTHIN); // 线条

wcf_leftsetVerticalAlignment(VerticalAlignmentCENTRE); // 文字垂直对齐

wcf_leftsetAlignment(AlignmentLEFT); // 文字水平对齐

wcf_leftsetWrap(false); // 文字是否换行

/ 以下是EXCEL开头大标题,暂时省略 /

//sheetmergeCells(0, 0, colWidth, 0);

//sheetaddCell(new Label(0, 0, "XX报表", wcf_center));

/ 以下是EXCEL第一行列标题 /

for (int i = 0; i < Titlelength; i++) {

sheetaddCell(new Label(i, 0,Title[i],wcf_center));

}

/ 以下是EXCEL正文数据 /

Field[] fields=null;

int i=1;

for(Object obj:listContent){

fields=objgetClass()getDeclaredFields();

int j=0;

for(Field v:fields){

vsetAccessible(true);

Object va=vget(obj);

if(va==null){

va="";

}

sheetaddCell(new Label(j, i,vatoString(),wcf_left));

j++;

}

i++;

}

/ 将以上缓存中的内容写到EXCEL文件中 /

workbookwrite();

/ 关闭文件 /

workbookclose();

} catch (Exception e) {

result="系统提示:Excel文件导出失败,原因:"+ etoString();

Systemoutprintln(result);

eprintStackTrace();

}

return result;

}

}

无非是这样的一个过程。先通过数据库查询出数据,放到List里,然后把这个List发往页面,然后遍历这个List把数据显示到这个表格里。 要想把数据导出到execel,很简单,把页面接受的这个List用jxl写到Execel就行了。具体将List导出到Execel的类如下:

package cmsdao;

import javaioIOException;

import javaioOutputStream;

import javasqlConnection;

import javasqlPreparedStatement;

import javasqlResultSet;

import javautilList;

import javaxservlethttpHttpServletResponse;

import jxlWorkbook;

import jxlwriteWritableSheet;

import jxlwriteWritableWorkbook;

import cmsutlisDbUtils;

public class ToExecelByQuery {

//方法接受两个参数,一个是list,这个地方我用了泛型。另一个参数是HttpServletResponse response

public static void toExcelBy(List<AccessLog> list,HttpServletResponse response) {

// 创建工作表

WritableWorkbook book=null;

responsereset();

// 创建工作流

OutputStream os =null;

try {

// 设置d出对话框

responsesetContentType("application/DOWLOAD");

// 设置工作表的标题

responsesetHeader("Content-Disposition",

"attachment; filename=xls");//设置生成的文件名字

os = responsegetOutputStream();

// 初始化工作表

book = WorkbookcreateWorkbook(os);

} catch (IOException e1) {

// TODO Auto-generated catch block

e1printStackTrace();

}

try{

//以下是我做的导出日志的一个模版

int nCount = listsize();

WritableSheet sheet = bookcreateSheet("访问日志", 0);

// 生成名为"商品信息"的工作表,参数0表示这是第一页

int nI = 1;

// 表字段名

sheetaddCell(new jxlwriteLabel(0, 0, "日志编号"));

sheetaddCell(new jxlwriteLabel(1, 0, "用户ID"));

sheetaddCell(new jxlwriteLabel(2, 0, "用户姓名"));

sheetaddCell(new jxlwriteLabel(3, 0, "访问日期"));

sheetaddCell(new jxlwriteLabel(4, 0, "访问时间"));

sheetaddCell(new jxlwriteLabel(5, 0, "名片ID"));

sheetaddCell(new jxlwriteLabel(6, 0, "名片名称"));

sheetaddCell(new jxlwriteLabel(7, 0, "创建日期"));

sheetaddCell(new jxlwriteLabel(8, 0, "更新日期"));

// 将数据追加

for(int i=1;i<listsize();i++){

sheetaddCell(new jxlwriteLabel(0, i, listget(i)toString()));

sheetaddCell(new jxlwriteLabel(1, i, listget(i)getUserId()));

sheetaddCell(new jxlwriteLabel(2, i, listget(i)getUsername()));

sheetaddCell(new jxlwriteLabel(3, i, listget(i)getCrtTim()));

sheetaddCell(new jxlwriteLabel(4, i, listget(i)getComplTime()));

sheetaddCell(new jxlwriteLabel(5, i, listget(i)getCopId()));

sheetaddCell(new jxlwriteLabel(6, i, listget(i)getFirstname()));

sheetaddCell(new jxlwriteLabel(7, i, listget(i)getCrtTim()));

sheetaddCell(new jxlwriteLabel(8, i, listget(i)getUpdTim()));

}

bookwrite();

bookclose();

} catch (Exception e) {

eprintStackTrace();

}

}

}

大体思路就是这样的,别忘了在你的项目中导入JXL必要的jar包,这个包叫jxljar,你可以下载一个。希望能帮到你,欢迎追问。望采纳!

String path = "";//自己定义excel的路径

File file = new File(path);

filecreatenewFile();//创建一个空的excel

FileInputStream fileIn = new FileInputStream(path);//path为excel

POIFSFileSystem fs = new POIFSFileSystem(fileIn);

HSSFWorkbook wb = new HSSFWorkbook(fs);

HSSFSheet sheet = wbgetSheetAt(0);//获得第一张sheet

//下面给表的第一行第一列赋值

HSSFRow row = sheetgetRow(0);//第一行对应0

HSSFCell cell = rowgetCell(0);//第一列对应0

cellsetCellValue("值");

//写回到excel

ByteArrayOutputStream baos = new ByteArrayOutputStream();

wbwrite(baos);

File file = new File(path);

FileOutputStream fo = new FileOutputStream(file);

baoswriteTo(fo);

foflush();

foclose();

一种方法就是直接在页面上复制,然后粘贴到Excel中去。还有一种就是在页面上做一个导出按钮,用户点击之后发请求到服务器,服务器通过使用POI或JXL等开源工具,将要导出的数据生成一个Excel给用户下载。

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>EB页面导出为EXCEL文档的方法</title>

<script type="text/javascript">

<!-- download

function saveCode(obj) {

var winname = windowopen('', '_blank', 'top=10000');

var strHTML = documentalltableExcelinnerHTML;

winnamedocumentopen('text/html', 'replace');

winnamedocumentwriteln(strHTML);

winnamedocumentexecCommand('saveas','','excelxls');

winnameclose();

}

-->

</script>

</head>

<body>

<div id="tableExcel">

<table id="test" width="100%" border="1" cellspacing="0" cellpadding="0">

<tr>

<td colspan="5" align="center">WEB页面导出为EXCEL文档的方法</td>

</tr>

<tr>

<td>列标题1</td>

<td>列标题2</td>

<td>列标题3</td>

<td>列标题4</td>

<td>列标题5</td>

</tr>

<tr>

<td>aaa</td>

<td>bbb</td>

<td>ccc</td>

<td>ddd</td>

<td>eee</td>

</tr>

<tr>

<td>AAA</td>

<td>BBB</td>

<td>CCC</td>

<td>DDD</td>

<td>EEE</td>

</tr>

<tr>

<td>FFF</td>

<td>GGG</td>

<td>HHH</td>

<td>III</td>

<td>JJJ</td>

</tr>

<tr>

<td>aaa</td>

<td>bbb</td>

<td>ccc</td>

<td>ddd</td>

<td>eee</td>

</tr>

<tr>

<td>AAA</td>

<td>BBB</td>

<td>CCC</td>

<td>DDD</td>

<td>EEE</td>

</tr>

<tr>

<td colspan="5">FFFGGGHHHIIIJJJ</td>

</tr>

<tr>

<td>aaa</td>

<td>bbb</td>

<td>ccc</td>

<td>ddd</td>

<td>eee</td>

</tr>

<tr>

<td>AAA</td>

<td>BBB</td>

<td rowspan="4">CCCHHHcccccc</td>

<td>DDD</td>

<td>EEE</td>

</tr>

<tr>

<td>FFF</td>

<td>GGG</td>

<td>III</td>

<td>JJJ</td>

</tr>

<tr>

<td>aaa</td>

<td>bbb</td>

<td>ddd</td>

<td>eee</td>

</tr>

<tr>

<td>aaa</td>

<td>bbb</td>

<td>ddd</td>

<td>eee</td>

</tr>

<tr>

<td>AAA</td>

<td>BBB</td>

<td>CCC</td>

<td>DDD</td>

<td>EEE</td>

</tr>

<tr>

<td>FFF</td>

<td>GGG</td>

<td>HHH</td>

<td>III</td>

<td>JJJ</td>

</tr>

</table>

</div>

<input type="button" value="另存为 Excel" onclick="saveCode(tableExcel)">

</body>

</html>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/12180149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存