jsp中导入导出excel,ssh框架
导入Excel:jsp中
<form action="user_importTradingMoney" enctype="multipart/form-data" method="post">
<label>导入数据
<input type="file" name="tradingMoneyFile" value="选择文件">
<input type="submit" value="提交数据">
</label>
</form>
action中:
action最前面肯定要有下面这几句,而且要有其对应的set、get方法
private File tradingMoneyFile;// 实际上传文件
private String tradingMoneyFileContentType; // 文件的内容类型
private String tradingMoneyFileFileName; // 上传文件名
这是为了通过struts2自动获得上传的文件,当然struts.xml中肯定要有这几句:
<constant name="struts.i18n.reload" value="true" />
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.devMode" value="true" />
<constant name=" struts.action.extension" value="action,," />
<constant name="struts.multipart.maxSize" value="102400000000000" />
文件大小什么的设定自己看着办。。。。
然后action中的importTradingMoney方法如下:
//导入交易金额的Excel表
public String importTradingMoney(){
HttpServletRequest request = ServletActionContext.getRequest();
Calendar cal = Calendar.getInstance();
int month = cal.get(Calendar.MONTH);
int year = cal.get(Calendar.YEAR);
jxl.Workbook wb=null;
try {
//InputStream is=new FileInputStream(tradingMoneyFile);//读取存放数据的excel表格在电脑中的路径
InputStream is=new FileInputStream(tradingMoneyFile);
wb =Workbook.getWorkbook(is);//创建workbook对象,我的理解就是这个整个的excel
Sheet s=wb.getSheet(0);//创建sheet,其实就是excel中的每一页,其中的每一张表,他的下标是从0开始的//这里也就是取得第一张表
int rsRows=s.getRows();//得到所有的行
int rsColumns=s.getColumns();//得到所有的列
for(int i=1;i<rsRows;i++){
String userName=s.getCell(0, i).getContents();//(列,行)
int tradingMoney=Integer.parseInt(s.getCell(1, i).getContents().toString());
TradingMoney tradingMoneyClass=new TradingMoney();
tradingMoneyClass.setUserName(userName);
tradingMoneyClass.setTradingMoney(tradingMoney);
tradingMoneyClass.setYear(year);
tradingMoneyClass.setMonth(month);
userService.addTradingMoney(tradingMoneyClass);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BiffException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IndexOutOfBoundsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
List<User> userList = null;
try {
userList = userService.selectUser(null, null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("userList", userList);
return "selectUser";
}
至于excel的导出,我只是简单地把当前页面复制到了excel中:
<%@page import="java.text.SimpleDateFormat"%>
<%
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
String filename = new String(("佣金明细-"+sf.format(new Date())).getBytes("utf8"),"ISO-8859-1");
response.setHeader("Content-disposition","attachment; filename="+filename+".xls");
%>
因为我要复制a.jsp页面的内容到excel中,而a.jsp中的内容又是便利list而出来,如果直接把上面这段代码加入到a.jsp中,那么a.jsp中的内容你就会看不到,这个页面一打开就会让你下载,所以就没有那种先预览再下载的效果了。。。。所以就在a.jsp中加了一个按钮
<input type="button" value="结果导出为Excel" style="width:120px" class="button-action" onclick="toExcel(<s:property value='#request.owerUser.id' />,'${request.owerUser.userAccount }')"/>
var userIdvar,userAccountvar;
function toExcel(userIdvar,userAccountvar){
//脚本运行后,将在新窗体newwindow中打开,宽为100,高为400,距屏顶0象素,屏左0象素,无工具条,无菜单条,无滚动条,不可调整大小,无地址栏,无状态栏。
window.open('reportUser_selectDetailReportUser?notice=1&userId='+userIdvar+'&userAccount='+userAccountvar,'newwindow','height=600,width=1200,top=80,left=80,toolbar=no,menubar=no,scrollbars=yes, resizable=yes,location=no, status=no');
};
就是重新发一遍请求到b.jsp中,其内容与a.jsp相同,所以这个b.jsp就不需要打开了。。。一切ok!
刚刚新增了不是简单地copy页面,而是从action导出excel表:
//导出Excel表
public void exportForm(){
HttpServletRequest request = ServletActionContext.getRequest();
try {
request.setCharacterEncoding("utf8"); Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String sDate = sdf.format(now);
String fileName = new String(("用户-"+sDate).getBytes("utf8"),"ISO-8859-1");
String file = fileName+".xls"; HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition" ,"attachment;filename="+file+"");
OutputStream os = response.getOutputStream();
String[] title = {"姓名","账号","角色","电话","邮箱","发展人账号","备注"};
int i=0; WritableWorkbook wwb = Workbook.createWorkbook(os);
WritableSheet ws = wwb.createSheet("用户表", 0);
ws.setColumnView(0,15);
ws.setColumnView(1,15);
ws.setColumnView(2,20);
ws.setColumnView(3,15);
ws.setColumnView(4,18);
ws.setColumnView(5,15);
ws.setColumnView(6,35);
ws.setColumnView(7,15); for( i=0;i<title.length;i++){
WritableFont wf = new WritableFont(WritableFont.TIMES, 11, WritableFont.BOLD, false);
WritableCellFormat wcfF = new WritableCellFormat(wf);
Label labelCF = new Label(i, 0, title[i],wcfF);
ws.addCell(labelCF);
} i=1;
String userName = null;
String userAccount = null;
String userRole = null;
String userPhone = null;
String userEmail = null;
String higherAgentAccount = null;
String userNote = null; //根据selectedIds,生成一个List //List list = this.pageBean.getList(); List list = userService.selectUser(null, null);
Iterator it = list.iterator(); // 获得一个迭代子 while (it.hasNext()) {
User v = (User)it.next(); // 得到下一个元素 userName = v.getUserName();
Label labelC0 = new Label(0,i,userName);
ws.addCell(labelC0); userAccount = v.getUserAccount();
Label labelC1 = new Label(1,i,userAccount);
ws.addCell(labelC1); userRole = v.getRole().getRoleName();
Label labelC2 = new Label(2,i,userRole);
ws.addCell(labelC2); userPhone = v.getUserPhone();
Label labelC3 = new Label(3,i,userPhone);
ws.addCell(labelC3); userEmail = v.getUserEmail();
Label labelC4 = new Label(4,i,userEmail);
ws.addCell(labelC4); higherAgentAccount = v.getHigherAgentAccount();
Label labelC5 = new Label(5,i,higherAgentAccount);
ws.addCell(labelC5); userNote = v.getUserNote();
Label labelC6 = new Label(6,i,userNote);
ws.addCell(labelC6); i++;
}
//写入Exel工作表
os.flush();
wwb.write();
//关闭Excel工作薄对象
wwb.close();
os.close();
} catch (Exception e) { e.printStackTrace();
}
}
//如果想打开并写入一个已经存在的excel,只能通过副本操作
//Excel获得文件
Workbook wb2=Workbook.getWorkbook(excelFile);
//打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook wwb2= Workbook.createWorkbook(excelFile,wb2);
WritableSheet ws = wwb2.getSheet(0);
jsp中导入导出excel,ssh框架的更多相关文章
- 从SQL Server中导入/导出Excel的基本方法(转)
从sql server中导入/导出 excel 的基本方法 /*=========== 导入/导出 excel 的基本方法 ===========*/ 从excel文档中,导入数据到sql数据库中,很 ...
- php中导入导出excel的原理
在php中我们要经常导入导出excel文件,方便后台管理.那么php导入和导出excel的原理到底是什么呢?excel分为两大版本excel2007(后缀.xlsx).excel2003(后缀.xls ...
- Java中导入导出Excel -- POI技术
一.介绍: 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实 ...
- .NET中导入导出Excel总结
前一段时间,做了Excle的导入和导出,在此记录开发思路及技术要点,以便在今后开发中参考. ...
- .NET Core 中导入导出Excel
操作Excel是一个比较常见的业务场景,本篇将使用EPPlus简单演示一个导入导出的示例. EPPlus开源地址:https://github.com/EPPlusSoftware/EPPlus 在项 ...
- ASP.NET Core 导入导出Excel xlsx 文件
ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...
- ASP.NET Core导入导出Excel文件
ASP.NET Core导入导出Excel文件 希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好 ...
- C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序
C#中缓存的使用 缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可: <%@ Outp ...
- Vue框架下实现导入导出Excel、导出PDF
项目需求:开发一套基于Vue框架的工程档案管理系统,用于工程项目资料的填写.编辑和归档,经调研需支持如下功能: Excel报表的导入.导出 PDF文件的导出 打印表格 经过技术选型,项目组一致决定通过 ...
随机推荐
- SHELL网络爬虫实例剖析--转载
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://nolinux.blog.51cto.com/4824967/1552472 前天 ...
- Java基础知识强化73:正则表达式之分割功能
1. 分割功能: 使用String的split方法,split方法:根据给定正则表达式的匹配拆分字符串.如下: public String[] split(String regex): 2. 案例: ...
- linux grep常用参数
# grep [-acinv] [--color=auto] '搜寻字符串' filename选项与参数:-c :计算找到 '搜寻字符串' 的次数-i :忽略大小写的不同,所以大小写视为相同-n :顺 ...
- jdbc连接数据库和jdbc-odbc桥接方式连接数据库
//这种方式为jdbc直接连接,需要添加jar文件 1 package com.howe2; import java.sql.*; public class test2 { public static ...
- 关于飞控下载时候出现avrdude: stk500_getsync(): not in sync: resp=0x00错误的解决方法
avrdude: stk500_getsync(): not in sync: resp=0x00该问题表述为串口通信失败 经过分析,出现这种情况的原因大致有:1.arduino在IDE下载过程中没有 ...
- Visual Studio写的项目在 IIS 服务器上运行的两种简单方法
首先需要PC上开启了IIS服务,相关方法网上很多,也很简单 第一种:直接在项目中操作 1.创建一个项目,然后右击选中项目,右击,单击属性,打开项目属性标签页面 如图,选择Web标签,在服务器栏目中选中 ...
- hdu 2186
#include <iostream> using namespace std; int main() { int a,b,c,k1,k2,k3,m,n; cin>>m; wh ...
- (转)ASP.NET 2.0中的partial
1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个 不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放 ...
- (转)jQuery LigerUI 插件介绍及使用之ligerTree
一,简介 ligerTree的功能列表: 1,支持本地数据和服务器数据(配置data或者url) 2,支持原生html生成Tree 3,支持动态获取增加/修改/删除节点 4,支持大部分常见的事件 5 ...
- 【转】解读Qt 事件处理机制(上篇)
[转自]:http://mobile.51cto.com/symbian-272812.htm 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生 ...