- 浏览: 68371 次
- 性别:
- 来自: 厦门
最新评论
-
netkongjian:
不错的报表工具知识分享![deyi]
Web报表工具的选择 -
wolongshan:
谁有更简单的方式呢?我也觉得复杂
ORACLE的存储过程的异步调用 -
sun_wind:
采用这种机制太复杂了
ORACLE的存储过程的异步调用 -
fsdos:
在ext中load中,如果遇到包含\r\n的数据,也会报错
JSON中的字符串数据包含换行如何处理 -
xuyongping:
codeutil 写道没有问题啊:\r\n表示就可以了
{& ...
JSON中的字符串数据包含换行如何处理
此方法生成xls文件,不是那种简单的通过文件头来实现的那种。而是真正的Excel文件。
此方法支持那种合并的单元格,需要jxl类库的支持。
jxl 的下载地址 http://sourceforge.net/project/showfiles.php?group_id=79926
1 我们先看页面的部分
<SCRIPT type=text/javascript>
function exportExcel(id){
var forum = document.forms["ExcelExportor"];
forum.c.value=eval(id+".innerHTML");
forum.submit();
}
</SCRIPT>
<FORM name="ExcelExportor" method="OST" action="/export/excel.jsp">
<INPUT type=hidden name=c>
<INPUT class=mybutton onclick=exportExcel(' MAIN_TABLE' ) type=button value=导出Excel>
</FORM>
<!-- 下面是你要导出的表格,其id必须和前面的相同 -->
<TABLE id=MAIN_TABLE cellSpacing=1 cellPadding=2 border=0><TBODY><TR class=title><TD>行号</TD><TD>客户编号</TD><TD>合同类型</TD><TD>客户名称</TD><TD>事业部</TD><TD>签订日期</TD><TD>有效期起始</TD><TD>有效期终止</TD><TD>信用额度</TD><TD>收货人</TD><TD>收货人身份证</TD><TD>收货省</TD><TD>收货城市</TD><TD>收货地址</TD><TD>备注</TD></TR>...
</TBODY></TABLE>
行号 客户编号 合同类型 客户名称 事业部 签订日期 有效期起始 有效期终止 信用额度 收货人 收货人身份证 收货省 收货城市 收货地址 备注 ...
唯一需要修改的,就是你的要导出的Table的ID 必须和Form里面的ID相同,比如都叫 "MAIN_TABLE";
当然,你换成任何其它名字都是可以的。
2 下面我们来看那个被影射成的/export/excel.jsp 的 servlet
view plaincopy to clipboardprint?
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("<HTML>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<TD> 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"); int end='' ' ' content.indexOf("</CAPTION' ' ' '>");
if (begin == -1 || end == -1) {
return null;
}
begin = content.indexOf(">", begin);
if (begin == -1) {
return null;
}
return content.substring(begin + 1, end);
}
public List<TD> getContent(String content) throws UnsupportedEncodingException {
int begin = -1;
int end = -1;
int index = -1;
String numberStr;
int number;
String[] tables = content.split("</TABLE>");
List<TD> list = new ArrayList<TD>();
for (String table : tables) {
String[] trs = table.split("</TR>");
for (String tr : trs) {
number = 1;
String[] ss = tr.split("</TD>");
for (String s : ss) {
begin = s.indexOf("<TD"); if (begin="=" -1) { continue; } s="s.substring(begin" + 3); index='' ' ' s.indexOf("' ' ' '>");
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;
}
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 map = new HashMap();
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("");
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 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;
}
详细的我就不多解释了,基本就是解析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>
来自:http://blog.csdn.net/java2000_net/archive/2008/07/21/2684994.aspx
发表评论
-
运用加密技术保护Java源代码——转载
2010-06-30 09:15 763<script type="text/ ... -
javascript脚本压缩工具JSEncoder实现(转)
2010-05-05 20:27 1561javascript脚本压缩工具JSEncoder实现 ... -
jsp页面处理excel表内容
2010-04-15 09:11 1180来源:未知 Excel报表的方法,一个过於简单,一 ... -
敏捷开发中编写高质量Java代码
2010-03-09 09:02 732来源:IBM dW/王永魁 敏捷开发的理念已经流 ... -
C3P0连接池在tomcat中的详细配置
2009-10-21 09:08 1130C3P0连接池在tomcat中的详细配置 一.在 ... -
Spring Quartz任务调度示例(指定一个时间触发调度任务)
2009-04-21 13:50 1250package com.xzl.quartz; import ... -
quartz cron 表达式详解
2009-04-21 13:49 770字段 允许值 ... -
Log4j的使用
2009-02-10 15:28 643Log4j是Apache的一个开放源代码项目,通过使用Log4 ... -
如何选择Web开发框架
2009-02-01 16:27 849如何选择Web开发框架? ...
相关推荐
POI使用excel模板循环输出行到文件并导出的一个小例子
【JAVA】easypoi根据Excel模板导出 循环遍历合并单元格处理
就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 适用框架、范围 SpringBoot,SSH(两大框架在实际项目中都有用到) 非maven系列的...
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″},{...
工作簿(Workbook):每个Excel文件可理解为一个工作簿。 工作表(Sheet):一个工作簿(Workbook)可以包含多个工作表。 行(row):一个工作表(Sheet)可以包含多个行。 二. Excel导入 2.1 操作流程 2.2 NPOI操作代码
您的数据可以组织为简单的列表或嵌套的树。 此应用程序的主要目的是从基于 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图表生成组件(电脑需...
实例057 设置表格的样式 84 实例058 模拟的进度条 86 3.3 超链接样式 87 实例059 鼠标单击文字超链接样式 87 实例060 鼠标滑过图片超链接样式 88 实例061 鼠标单击文字获得帮助效果 89 3.4 页面样式 ...
导出到Excel(xlsx),Csv,HTML,Json Excel公式支持 从剪贴板复制粘贴 范围/行分组汇总 合并的单元格具有无限的行跨度和列跨度 延迟加载,聚集等的树状网格 在网格,树网格,数据透视网格和自定义组件之间拖放新 ...
0222 把Excel中的数据保存到数据库中 147 0223 怎样弹出ConnectionString设置页 148 0224 利用ADO获取DELETE后所影响的记录数 148 7.3 业务实现数据处理技术 149 0225 随机产生中奖号码 149 0226 使用...
今天小编就为大家分享一篇vue+element-ui动态生成多级表头的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
功能 - 登录 / 注销 - 权限验证 - 页面权限 - 指令权限 ... - 导出excel - 导入excel - 前端可视化excel - 导出zip - 表格 - 动态表格 - 拖拽表格 - 内联编辑 - 错误页面 - 401 - 404 - 組件 -
0222 把Excel中的数据保存到数据库中 147 0223 怎样弹出ConnectionString设置页 148 0224 利用ADO获取DELETE后所影响的记录数 148 7.3 业务实现数据处理技术 149 0225 随机产生中奖号码 149 0226 使用...
- 导出excel,自定义样式导出excel、多表头导出 - 表单、表格、水印、多标签显示、打印功能,图片打印、表格打印、普通打印、二维码、拖拽、markdown、头像裁剪、图片上传... - 使用 Prettier 统一格式化代码,集成 ...