jxl导出excel,如果不通过写死路径来弹出保存框,如何实现导出excel弹出保存框这个功能?

问题描述

web开发中,我实现了通过模板来导出excel数据,是通过写一个模板,和一个目标文件来实现的,这两个文件是写在项目里面的,但是如果是多个人查询内容不同,然后同时导出这个文件的时候可能就出现导出的结果不是自己想要的!请问各位大虾门,怎么才能避免这种情况?也可能是我的方法写的不对,希望指点一下!听说导出excel是根据模板虚拟出一个需要导出的excel表格,当保存后,这个表格就没了!我是不懂!下面是我写的一个jxl导出excel:java代码:public class ExportExcel {public void Excel(RequestData req){ //String path =ExportExcel.class.getResource("").getPath(); String realpath = req.getString("path")+"/模板1.xls"; System.out.println(req.getString("path")); try{ Workbook wb = Workbook.getWorkbook(new File(realpath)); //通过模板得到一个可写的Workbook:第一个参数是一个输出流对象,第二个参数代表了要读取的模板 File targetFile = new File(req.getString("path")+"/worksheet1.xls"); WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb); //选择模板中名称为StateResult的Sheet: WritableSheet wws = wwb.getSheet(0); //如果需要也可以创建Sheet //WritableSheet wws = wwb.createSheet("Sheet名称",1); //选择单元格,写入动态值,根据单元格的不同类型转换成相应类型的单元格: /********************************public*****************************/ jxl.write.NumberFormat format = new jxl.write.NumberFormat("#"); jxl.write.WritableCellFormat wcf1 = new jxl.write.WritableCellFormat(format); wcf1.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN); //Border是jxl.format.Border wcf1.setAlignment(jxl.format.Alignment.CENTRE);//设置文本对其方式,水平方向 wcf1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); WritableFont fonte= new WritableFont(WritableFont.createFont("宋体"),12,WritableFont.NO_BOLD); jxl.write.WritableCellFormat wcf2 = new jxl.write.WritableCellFormat(fonte); wcf2.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN); //Border是jxl.format.Border wcf2.setAlignment(jxl.format.Alignment.CENTRE);//设置文本对其方式,水平方向 wcf2.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//设置文本对其方式,垂直方向 /********************************public*****************************/ //(列,行) JiaGeQS instance = new JiaGeQS(); DBSet rs = instance.query(req,1); int i=0; int sum=0; while(rs.next()){ jxl.write.Label label00 = new jxl.write.Label(0, 2+i, rs.getString("htbh"),wcf2); wws.addCell(label00); String str1=""; if(rs.getString("YSFS").equals("0")){ str1="铁路"; }else{ str1="公路"; } if(rs.getString("HTKD").equals("0")){ str1 +="年度"; }else if(rs.getString("HTKD").equals("1")){ str1 +="季度"; }else if(rs.getString("HTKD").equals("2")){ str1 +="月度"; }if(rs.getString("GLFL").equals("1")){ str1 +="出省";}else if(rs.getString("GLFL").equals("0")){str1 +="省内";} jxl.write.Label label01 = new jxl.write.Label(1, 2+i, str1,wcf2); wws.addCell(label01); jxl.write.Label label02 = new jxl.write.Label(2, 2+i, rs.getString("cmr"),wcf2); wws.addCell(label02); jxl.write.Label label03 = new jxl.write.Label(3, 2+i, rs.getString("msr"),wcf2); wws.addCell(label03); jxl.write.Label label04 = new jxl.write.Label(4, 2+i, rs.getString("fz")+"-"+rs.getString("dz"),wcf2); wws.addCell(label04); jxl.write.Label label05 = new jxl.write.Label(5, 2+i, rs.getString("a1"),wcf2); wws.addCell(label05); jxl.write.Label label06 = new jxl.write.Label(6, 2+i, rs.getString("a2"),wcf2); wws.addCell(label06); //jxl.write.Label label07 = new jxl.write.Label(7, 2+i, rs.getString("a16"),wcf2); jxl.write.Number number01 = new jxl.write.Number(7,2+i,rs.getInt("a16"),wcf2); wws.addCell(number01); jxl.write.Label label08 = new jxl.write.Label(8, 2+i, rs.getString("a3"),wcf2); wws.addCell(label08); jxl.write.Label label09 = new jxl.write.Label(9, 2+i, rs.getString("qysj"),wcf2); wws.addCell(label09); wws.setRowView(2+i, 370) ; sum +=rs.getInt("a16"); i++; } jxl.write.Label labeli = new jxl.write.Label(0, 2+i, "数量合计:"+sum+" 吨",wcf2); wws.addCell(labeli); wws.mergeCells(0, 2+i,9, 2+i); /********************************数字格式*****************************/ //份数// jxl.write.Number C4 = new jxl.write.Number(1,3,2222,wcf2); // wws.addCell(C4);// C4.setCellFormat(cellFormat); //保单总印量// jxl.write.Number C5 = new jxl.write.Number(1,4,3333,wcf2); // wws.addCell(C5);// C5.setCellFormat(cellFormat); //.................以此类推 //wws.setColumnView(1, 50) ; //设置指定列的宽度 //设置指定行的高度 //wws.mergeCells(1, 1,3, 2) ; //合并单元格(开始列,开始行,结束列,结束行) /**********************************************************************************/ wwb.write(); wwb.close(); wb.close(); }catch(Exception e){ e.printStackTrace(); } }public static void main(String[] args) { try { //upload(); } catch(Exception e) { e.printStackTrace(); } } }jsp代码,是通过js打开写死的路径:function exportExcel(){//window.location.href="<%=request.getContextPath()%>/proj/xls/worksheet1.xls";}

解决方案

worksheet1当文件名,你可以把它换成用户id+时间 比如user20130521163159.xls,然后把文件名传到页面,url根据文件名来下载

时间: 2024-09-14 13:06:17

jxl导出excel,如果不通过写死路径来弹出保存框,如何实现导出excel弹出保存框这个功能?的相关文章

导入-Java从excel读取数据时,能够自己选择excel文件,不用在代码中将文件目录写死!

问题描述 Java从excel读取数据时,能够自己选择excel文件,不用在代码中将文件目录写死! 项目是进行单机版和网络版的数据对比,需要将单机版导出来的数据(excel表格,固定格式)导入网络版进行对比,网络版在导入数据时能提示选择导入的excel文件,不用在Java代码中将要读取数据的excel表格的目录写死.谢谢您的帮助! 解决方案 JAVA读取EXCEL用的比较多的是POI类库,参考Java对Excel(0307)进行上传.解析.验证.入库,或者你搜索一下java poi,有很多文章的

西部数据硬盘维修WD盘ROM写死又没有编程器的回写方法

  西数硬盘25PROM写死后又没有编程器的情况下回写方法: 找一个希捷的板,最好是S15的板(本来带ROM的),没有的话用其他板也可以,但是注意要加一个4.7K电阻在主控的第2脚就可以写了. 1.把要写的ROM按角位对号焊上.(改板的要焊电阻) 2.进PC3000,ST的功能模块(报错可以不管它);也可以,要把4.5脚短路进去. 3.点击进入安全模式,端口的速度设为921000. 4.选要写的ROM文件,写入等待OK 5.再焊下来装到WD板上去就可以了.

通知栏 图标自定义-通知栏下拉的图标能不能是从网络拿来的图片,而不是写死的,有没有大神

问题描述 通知栏下拉的图标能不能是从网络拿来的图片,而不是写死的,有没有大神 设定了RemoteViews view_custom = new RemoteViews(getPackageName(), R.layout.view_custom); RemoteViews 有个设置图标的方法view_custom.setImageViewResource(R.id.custom_icon, R.drawable.icon);现在要求图片不是写死,要是网络图片,类似"http://hiphotos

excel文件-c#操作Excel,我把Excel文件放在当前项目下,怎么写读取路径?

问题描述 c#操作Excel,我把Excel文件放在当前项目下,怎么写读取路径? setexcel = new SetExcel(@"E:01.xls");//我放在E盘中读取文件 我现在把Excel文件放到项目中去,怎么写读取路径? 解决方案 你要知道什么是相对路径和绝对路径 asp.net里用server.mapPath() winform用 Application.StartupPath+001.xls 解决方案二: 如果当前目录只有一个 Excel 文件,可以考虑先获取当前工作

jasperireport的SQL query中写死的中文读取出来之后显示为问号

问题描述 jasperireport的SQL query中写死的中文读取出来之后显示为问号 数据库是mysql 直接写select '中文' as lan from table1 在报表中用到$F{lan} 就会示成问号,,, 如果是select language as lan from table1 这样写的话,language字段在数据库里的值是中文,取出来能在报表中正常显示成中文,,, 这是什么问题,有大神知道吗?? 哪里的字符编码设置有问题,,, 同样的代码,在32位机子上能正常显示,

添加根节点 循环数据-TreeView控件,把数据库的内容,循环绑定到一个写死的根节点上

问题描述 TreeView控件,把数据库的内容,循环绑定到一个写死的根节点上 我用的递归方法绑定数据,代码是这样的:private void BindDate(int Pid TreeNode PNode) { DataSet ds = cBll.GetList(""""); DataTable dt = ds.Tables[0]; if (dt.Rows.Count > 0) { DataView dv = new DataView(dt);//过滤Pare

link环境下,制作一款《订餐软件》,条件不写死的情况下,如何做第二份半价之类的功能?

问题描述 link环境下,制作一款<订餐软件>,条件不写死的情况下,如何做第二份半价之类的功能? link环境下,制作一款<订餐软件>,条件不写死的情况下,如何做第二份半价之类的功能? 解决方案 这个不是计算出来的,你可以在你的业务逻辑的地方统一判断就可以了. 无非就是点2份以后价格*0.66就可以了.具体你可以在数据库或者BLL里设计.

sql行转列,(不写死)

问题描述 sql行转列,(不写死) 图一为数据结果: 想要图二的效果: 要求:不写死即不出现具体的查询出的数据的内容 解决方案 这个我没怎么搞过,不过你可以参照这个试一试.http://www.williamsang.com/archives/1508.html 解决方案二: 说实话不太明白你的意思. 行转列.你不规定列名.后台怎么知道把哪列转换成一行? 如果你想隐蔽的话.可以先用视图再用行转列 解决方案三: 不写死,只能用存储过程 或者 code 实现!单SQL应该是比较难!

C#读文件的问题,不要把参数写死

问题描述 就是我这里面的(156,84)(664,341)这些参数都是我自己录的,有没有什么办法让它们参数化,不要把参数写死,我记得是要读取文件的,是TXT还是XML?具体怎么做?麻烦贴代码,我是新手 解决方案 解决方案二:你要的是配置文件appsetting吧解决方案三:引用1楼starfd的回复: 你要的是配置文件appsetting吧 我要做一个读取文件读取指定的内容解决方案四:你这个没必要自己写啊,微软已经提供了配置文件啊,你找下c#配置文件appsetting就知道了啊解决方案五:引用