原文地址:http://www.java2000.net/viewthread.jsp?tid=1977
此方法生成xls文件,不是那种简单的通过文件头来实现的那种。而是真正的Excel文件。
此方法支持那种合并的单元格,需要jxl类库的支持。
jxl 的下载地址 http://sourceforge.net/project/showfiles.php?group_id=79926
如果打不开了,我想CSDN的下载频道一定有。或者到我的网站【下载资源】里面下载。
如果代码看不清楚,或者有问题,请到原始地址,或者到底部看截图
1 我们先看页面的部分
<script type="text/javascript">
function exportExcel(id){
var forum = document.forms["ExcelExportor"];
forum.c.value=eval(id+".innerHTML");
forum.submit();
}
</script>
<!---->
...
行号 | 客户编号 | 合同类型 | 客户名称 | 事业部 | 签订日期 | 有效期起始 | 有效期终止 | 信用额度 | 收货人 | 收货人身份证 | 收货省 | 收货城市 | 收货地址 | 备注 |
唯一需要修改的,就是你的要导出的Table的ID 必须和Form里面的ID相同,比如都叫 "MAIN_TABLE";
当然,你换成任何其它名字都是可以的。
2 下面我们来看那个被影射成的/export/excel.jsp 的 servlet
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
/**
* 解析页面并导出为Excel格式。
*
* @author JAVA世纪网,www.java2000.net,赵学庆
*
*/
public class ExcelExportor extends HttpServlet {
private static final long serialVersionUID = 8563623076707865788L;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.setCharacterEncoding("GBK");
String content = request.getParameter("c");
if (content == null) {
Writer out = response.getWriter();
response.setCharacterEncoding("GBK");
out.write("No Content");
return;
}
try {
export(content, response);
} catch (Exception ex) {
ex.printStackTrace();
}
}
private WritableWorkbook wwb = null;
private WritableSheet sheet = null;
private void export(String content, HttpServletResponse response) throws IOException, RowsExceededException, WriteException {
response.setContentType("application/ms-excel");
String sheetName = getCaption(content);
if (sheetName == null) {
sheetName = "Sheet1";
}
sheetName = sheetName.replaceAll(":", "").replaceAll("[)]", "").replaceAll("[(]", "");
response.addHeader("Content-Disposition", "attachment; filename=" + new String(sheetName.getBytes("GBK"), "ISO-8859-1")
+ ".xls");
OutputStream os = response.getOutputStream();
wwb = Workbook.createWorkbook(os);
wwb.setProtected(true);
sheet = wwb.createSheet(sheetName, 0);
int row = 0;
int col = 0;
Label label = null;
if (sheetName.trim().length() > 30) {
label = new Label(col, row, sheetName);
sheet.addCell(label);
row++;
}
List listBody = getContent(content);
Map<string, boolean=""> map = new HashMap<string, boolean="">();
for (TD td : listBody) {
if (td == null) {
row++;
col = 0;
continue;
}
while (map.get(col + "-" + row) != null) {
col++;
}
if (td.colspan > 1 || td.rowspan > 1) {
sheet.mergeCells(col, row, col + td.colspan - 1, row + td.rowspan - 1);
for (int i = col; i <= col + td.colspan - 1; i++) {
for (int j = row; j <= row + td.rowspan - 1; j++) {
map.put(i + "-" + j, true);
}
}
}
label = new Label(col, row, td.content);
sheet.addCell(label);
map.put(col + "-" + row, true);
col += td.colspan;
}
wwb.write();
wwb.close();
}
private String getCaption(String content) {
int begin = content.indexOf("<caption"); end="'&amp;apos;&amp;apos;content.indexOf("</CAPTION&amp;apos;&amp;apos;'" int="">");
if (begin == -1 || end == -1) {
return null;
}
begin = content.indexOf(">", begin);
if (begin == -1) {
return null;
}
return content.substring(begin + 1, end);
}
public List getContent(String content) throws UnsupportedEncodingException {
int begin = -1;
int end = -1;
int index = -1;
String numberStr;
int number;
String[] tables = content.split("");
List list = new ArrayList();
for (String table : tables) {
String[] trs = table.split("");
for (String tr : trs) {
number = 1;
String[] ss = tr.split("");
for (String s : ss) {
begin = s.indexOf("<td"); index="'&amp;apos;&amp;apos;s.indexOf("&amp;apos;&amp;apos;'" 3);="" +="" s="s.substring(begin" }="" continue;="" {="" -1)="" (begin="=" if="">");
TD td = new TD();
begin = s.indexOf("rowSpan=");
if (begin != -1) {
end = s.indexOf(" ", begin);
if (end == -1) {
end = index;
}
numberStr = s.substring(begin + 8, end).replace('"', ' ').replace('\'', ' ').trim();
number = Integer.parseInt(numberStr);
td.rowspan = number;
}
begin = s.indexOf("colSpan=");
if (begin != -1) {
end = s.indexOf(" ", begin);
index = s.indexOf(">", begin);
if (end == -1) {
end = index;
}
if (end > index) {
end = index;
}
numberStr = s.substring(begin + 8, end).replace('"', ' ').replace('\'', ' ').trim();
number = Integer.parseInt(numberStr);
td.colspan = number;
}
td.content = s.substring(index + 1).replaceAll("\\<.*?\\>", "").replaceAll(" ", "").trim();
list.add(td);
}
list.add(null);
}
list.add(null);
list.add(null);
}
return list;
}
}
class TD {
int rowspan = 1;
int colspan = 1;
String content;
}</td");></caption");></string,></string,>
详细的我就不多解释了,基本就是解析Table的语法,唯一需要注意的,里面的CharacterEncoding() 需要你根据自己的情况进行修改。
3 最后那个web.xml的影射我就顺便给了,其实大家都知道怎么做
<servlet>
<servlet-name>ExcelExportor</servlet-name>
<servlet-class>ExcelExportor</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ExcelExportor</servlet-name>
<url-pattern>/export/excel.jsp</url-pattern>
</servlet-mapping>
========================================================================
============================以下是截图,不是文字 ========================
========================================================================
<script type="text/javascript">
</script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
分享到:
相关推荐
POI使用excel模板循环输出行到文件并导出的一个小例子
【JAVA】easypoi根据Excel模板导出 循环遍历合并单元格处理
就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 适用框架、范围 SpringBoot,SSH(两大框架在实际项目中都有用到) 非maven系列的...
工作簿(Workbook):每个Excel文件可理解为一个工作簿。 工作表(Sheet):一个工作簿(Workbook)可以包含多个工作表。 行(row):一个工作表(Sheet)可以包含多个行。 二. Excel导入 2.1 操作流程 2.2 NPOI操作代码
Java通过POI读取Excel遍历数据,根本word模板批量生成word文档,demo可运行,可根据需求修改
json数据: [{“authenticate”:-99,”last_ip”:”156.2.98.429″,”last_time”:”2020/05/23 01:41:36″,”member_id”:5067002,”mg_id”:1,”name”:”yuanfang”,”status”:0,”username”:”L7898″},{...
您的数据可以组织为简单的列表或嵌套的树。 此应用程序的主要目的是从基于 Excel 的规范文档到各种编程和脚本语言的通用代码生成器。 由于几乎支持任何文本表示(其中包括 HTML 和 XML),因此该应用程序可用于 Web...
导出excel 导入excel 前端可视化excel 导出zip - 表格 动态表格 拖拽表格 内联编辑 - 错误页面 401 404 組件 头像上传 返回顶部 拖拽Dialog 拖拽Select 拖拽看板 更多请看详细项目说明!!
9.15 表格设置为“100%”时获取表格的宽度 9.16 表格选中后变色 9.17 表格中隐藏下级表格 9.18 表格自动下移 9.19 动态创建固定列数的表格 9.20 动态改变表格列宽 9.21 动态改变表格的行顺序 9.22 动态生成包含合并...
9.15 表格设置为“100%”时获取表格的宽度 9.16 表格选中后变色 9.17 表格中隐藏下级表格 9.18 表格自动下移 9.19 动态创建固定列数的表格 9.20 动态改变表格列宽 9.21 动态改变表格的行顺序 9.22 动态生成包含合并...
19、DataGridView导出成Excel文件功能。 20、DataGridView与GridView表格内容单元格合并打印功能。 21、RichTextBox控件的RTF文本打印功能(4.9版新功能) 22、图表生成打印功能。ChartGraph图表生成组件(电脑需...
今天小编就为大家分享一篇vue+element-ui动态生成多级表头的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
实例057 设置表格的样式 84 实例058 模拟的进度条 86 3.3 超链接样式 87 实例059 鼠标单击文字超链接样式 87 实例060 鼠标滑过图片超链接样式 88 实例061 鼠标单击文字获得帮助效果 89 3.4 页面样式 ...
导出到Excel(xlsx),Csv,HTML,Json Excel公式支持 从剪贴板复制粘贴 范围/行分组汇总 合并的单元格具有无限的行跨度和列跨度 延迟加载,聚集等的树状网格 在网格,树网格,数据透视网格和自定义组件之间拖放新 ...
功能 - 登录 / 注销 - 权限验证 - 页面权限 - 指令权限 ... - 导出excel - 导入excel - 前端可视化excel - 导出zip - 表格 - 动态表格 - 拖拽表格 - 内联编辑 - 错误页面 - 401 - 404 - 組件 -
- 导出excel,自定义样式导出excel、多表头导出 - 表单、表格、水印、多标签显示、打印功能,图片打印、表格打印、普通打印、二维码、拖拽、markdown、头像裁剪、图片上传... - 使用 Prettier 统一格式化代码,集成 ...
easyUI+HighCharts+Aspose.cells+Aspose.word+Aspose.Pdf+WebService等的实例应用,easyui包括异步树加载,嵌套表格等,highcharts包括本地导出图片(仅限jpg)柱状,线状图例等,aspose.word、excel、pdf等使用的...
设备管理系统 简介 本项目是基于二次开发的设备管理系统。根据学校实验室的设备管理需求订制而成。 功能 - 登录 / 注销 ... - 导出excel - 导入excel - 前端可视化excel - 导出zip - 表格 - 动态表格
0222 把Excel中的数据保存到数据库中 147 0223 怎样弹出ConnectionString设置页 148 0224 利用ADO获取DELETE后所影响的记录数 148 7.3 业务实现数据处理技术 149 0225 随机产生中奖号码 149 0226 使用...