這篇文章帶給大家的內容是關於如何使用java將資料匯出為excel文件,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
#本文主要講的是怎麼使用java將資料匯出為Excel文件,xls格式的。
例如:我從前台查詢到的數據,要把數據匯出為excl格式的檔案。需要將前台的查詢條件(數據)傳遞到後台,後台拿到數據,寫sql,從數據庫中進行查詢;得到數據(跟前台查詢到的數據一致,這裡我演示的查詢出來的數據為一個list對象集合),再產生excl檔案(資料在檔案裡面,檔案名稱,位置,內容,都可更改)。
#第一步:後台得到前台查詢條件並查詢出資料(這個步驟沒啥要寫的)
1.後台得到前台頁面的數據。 你可以使用json傳遞值,也可以用url傳遞。你想用哪個就用哪個。畢竟達者為先
json傳遞值例子:(寫的例子,可能跟後面資料對不上,但是意思對就行了)
var data = $("#fromid").serializeObject();//表单变为json格式字符串 //没有form表单的可以自己认为创建一个json字符串 //var data = jQuery.parseJSON('{"FPHM":null,"FDBH":null}'); data["FPHM"]=FPHMs;//页面的查询条件,将data传递到后台 data["FDBH"]=_FDBH; $.ajax({ beforeSend: function(xhr){ xhr.setRequestHeader('Authorization', 'Bearer ' + $.session.get("token")); }, url: "",//你的url type: "post", contentType: 'application/json;charset=utf-8', dataType: "json", data: JSON.stringify(data),//传递格式为json格式 success: function(data){ $.messager.alert("提示","成功"+data,"info"); }, async: true, error: function(er) {} });
url傳遞,(這個就簡單了,就是平常的url,就是給後面組裝上參數和對應的數據,本文主要不是講傳遞,只是一個示範範例)
範例:
#
function clickdown(){//这里演示传递两个参数 var prnteTest=document.getElementById("prnte").value; var prnteName=document.getElementById("prnteName").value; location.href='url?prnteTest='+prnteTest+'&prnteName='+prnteName; }
#2.得到資料庫中的查詢資料(這也不是太重要,也簡單寫了)
#這個就是sql語句了,這個怎麼示範呀,就是sql唄,你們想要產生什麼數據,就sql查唄。
我主要不是為了怎麼解析json格式數據,我使用的url傳遞資料使用
String name = request.getParameter("name");
#這種格式得到數據,
如果為json格式傳遞到後台,資料形如
{ "name": 3,"post": 1 , "rows": [{"JLBH":30005,"HTH":40200,"WLDW":"0316","NAME":"深圳市控股公司", "DTID":585,"DT_NAME":"珠宝采购","FKJE":234.0}]}
可以使用下面的进行解析
JSONObject jsonObj = JSONObject.fromObject(data); Stringname =jsonObj.getParameter("name");
如果上面方法不能够解析json格式字符串,可自行百度。网上不少正解(毕竟本文主要讲的不是这个)。
得到数据之后,组装sql语句,在数据库中查询即可,这里不演示怎么查询的,结果为一个list集合里面存放着要导出的数据
第二步:生成excel文件
根据前台得到的条件,从数据库中得到数据,导出的表头
/** * 测试 导出xls文件的表头 */ public static final String[] TestToXls = { "编号","设计人员工号", "设计人员姓名","开发人员工号", "开发人员姓名", "测试人员工号", "测试人员姓名"};
其中list存放的是一个对象,类似javaBean:
List<Test> listTest = new ArrayList<Test>();
形如:
public class Test{ private String idd;//编号 private String designId;//设计人员工号 private String designName;//设计人员姓名 private String developId;//开发人员工号 private String developName;//开发人员姓名 private String testId;//测试人员工号 private String testName;//测试人员姓名 //对应的set,get 省略 }
我使用的是Mybatis,其中有一个resultType,为返回类型。
形如:
<select id="findAllUser"parameterType="java.util.Map"resultType="com.test.Test" > select pr.qid as idd,--这里的as 后跟的, pr.des_id as designId, pr.des_name as designName, pr.de_id as developId, pr.de_name as developName, ps.te_id as testId, ps.te_name as testName from ps_test_red pr left join ps_test_em ps on ps.id=pr.sys_id where pr.par_nme_te > #{prnte}--组装sql语句,查询出数据 </select>
导出文件方法
public void toExcel() { //这里为导出文件存放的路径 String filePath ="C:\\Users\\USER" + UUID.randomUUID() + "\\"; //加入一个uuid随机数是因为 //每次导出的时候,如果文件存在了,会将其覆盖掉,这里是保存所有的文件 File file = new File(filePath); if (!file.exists()) { file.mkdirs(); } SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); // 给要导出的文件起名为 "测试导出数据表_时间.xls" String filePath2 = filePath + "测试导出数据表" + "_" + fmt.format(new Date()) + ".xls"; WritableWorkbook wb = null; try { File file2 = new File(filePath2); if (!file2.exists()) {//不存在,创建 file2.createNewFile(); } wb = Workbook.createWorkbook(file2);//创建xls表格文件 // 表头显示 WritableCellFormat wcf = new WritableCellFormat(); wcf.setAlignment(Alignment.CENTRE);// 水平居中 wcf.setWrap(true); wcf.setVerticalAlignment(VerticalAlignment.CENTRE);// 垂直居中 wcf.setFont(new WritableFont(WritableFont.TIMES,13, WritableFont.BOLD));// 表头字体 加粗 13号 wcf.setBackground(jxl.format.Colour.PERIWINKLE); // 内容显示 WritableCellFormat wcf2 = new WritableCellFormat(); wcf2.setWrap(true);//设置单元格可以换行 wcf2.setAlignment(Alignment.CENTRE);//水平居中 wcf2.setVerticalAlignment(VerticalAlignment.CENTRE);// 垂直居中 wcf2.setFont( new WritableFont(WritableFont.TIMES,11));// 内容字体 11号 //导出的xls的第一页,第二页就是0换成1,“sheet1”,也可以修改为自己想要的显示的内容 WritableSheet ws = wb.createSheet("sheet1", 0); //WritableSheet ws2 = wb.createSheet("sheet2", 1);//第2个sheet页 ws.addCell(new Label(0,0, "导出结果"));//代表着表格中第一列的第一行显示查询结果几个字 // 导出时生成表头 for (int i = 0; i < TestToXls.length; i++) { //i,代表的第几列,1,代表第2行,第三个参数为要显示的内容,第四个参数,为内容格式设置(按照wcf的格式显示) ws.addCell(new Label(i, 1, TestToXls[i],wcf));//在sheet1中循环加入表头 } //查询出来的数据,这个方法是演示所用 String sql="com.Test.Service.findAllUser";//sql为mybatis框架下的路径 Map<String, Object> map = new HashMap<String, Object>();//map里为存放前台的条件 map.put("prnte", this.getParameter("prnteTest")); List<Test> listTest = TestService.findAllList(sql, map); int k =2 ;//从第三行开始写入数据 for (int i = 0; i < listTest.size(); i++) { ws.addCell(new Label(0, k, listTest.get(i).getIdd(), wcf2)); ws.addCell(new Label(1, k, listTest.get(i).getDesignId(),wcf2)); ws.addCell(new Label(2, k, listTest.get(i).getDesignName(),wcf2)); ws.addCell(new Label(3, k, listTest.get(i).getDevelopId(),wcf2)); ws.addCell(new Label(4, k, listTest.get(i).getDevelopName(),wcf2)); ws.addCell(new Label(5, k, listTest.get(i).getTestId(),wcf2)); ws.addCell(new Label(6, k, listTest.get(i).getTestName(),wcf2)); //ws.mergeCells(4, 5, 5, 5);//合并两列,按参数顺序,意思是第4列的第五行,跟第五列的第五行合并为一个单元格 k++; } wb.write();//写入,到这里已经生成完成,可以在相应目录下找到刚才生成的文件 } catch (IOException e) { e.printStackTrace(); } catch (JxlWriteException e) { e.printStackTrace(); } catch (WriteException e) { e.printStackTrace(); } finally { try { if (wb != null) { wb.close(); } } catch (WriteException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } //这个是我们项目中,是把刚才生成的文件,响应到前台,进行下载、保存,可省略。 downLoadFile(filePath2); }
响应到前台(就是读取文件,网上很多)
public void downLoadFile(String filePath) { FileInputStream in = null; ServletOutputStream out = null; BufferedOutputStream toOut = null; try { in = new FileInputStream(new File(filePath)); byte[] buffer = new byte[in.available()]; while (in.read(buffer) != -1) { HttpServletResponse response = this.getContext().getResponse();//从application中得到response response.reset();// 清空 // 设置响应的文件的头文件格式 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes("GBK"),"ISO8859-1")); response.addHeader("Content-type", "application-download"); // 获取响应的对象流 out = response.getOutputStream(); toOut = new BufferedOutputStream(out); toOut.write(buffer); toOut.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { try { if(in!=null) { in.close(); } if(out != null) { out.close(); } if(toOut != null) { toOut.close(); } } catch (IOException e) { e.printStackTrace(); } } }
导出文件大致为:
以上是如何使用java將資料匯出為excel文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!