丝袜人妻一区二区三区_少妇福利无码视频_亚洲理论片在线观看_一级毛片国产A级片

當(dāng)前位置:首頁 > 科技

【poi怎么設(shè)置excel】POI導(dǎo)出Excel

前言

數(shù)據(jù)報(bào)告是許多項(xiàng)目中的模塊,通常導(dǎo)出Excel或PDF。這里有從項(xiàng)目中將Excel導(dǎo)出到POI的記錄。在項(xiàng)目中,必須根據(jù)頁面jqgrid的機(jī)架查詢條件導(dǎo)出相應(yīng)的機(jī)架數(shù)據(jù)。jqgrid是分頁的,但所有導(dǎo)出都必須導(dǎo)出。

福伊

Apache poi-the Java API for Microsoft documents,官方主頁:

編寫代碼

Maven引入了POI

Dependency

GroupIdorg.a/groupId

工件idpoi/工件id

/dependency或

Dependency!- Excel工具類(Easy POI) -

GroupIdcn.afterturn/groupId

artifactideasypoi-base/artifact id

版本3.2.0/版本

/dependency

Dependency!- Excel工具類(Easy POI) -

GroupIdcn.afterturn/groupId

artifactideasypoi-web/artifact id

版本3.2.0/版本

/dependency

Dependency!- Excel工具類(Easy POI) -

GroupIdcn.afterturn/groupId

artifactideasypoi-annotation/artifact id

版本3.2.0/版本

/dependencyhtml,調(diào)用js

Dependency!- Excel工具類(Easy POI) -

GroupIdcn.afterturn/groupId

artifactideasypoi-base/artifact id

版本3.2.0/版本

/dependency

Dependency!- Excel工具類(Easy POI) -

GroupIdcn.afterturn/groupId

artifactideasypoi-web/artifact id

版本3.2.0/版本

/dependency

Dependency!- Excel工具類(Easy POI) -

GroupIdcn.afterturn/groupId

artifactideasypoi-annotation/artifact id

版本3.2.0/版本

/dependency//excel導(dǎo)出

Function exportRackExcel() {

//獲取當(dāng)前jqGrid分頁參數(shù)

Var postdata=$ ('# rack ')。jqgrid ('getgridparam ',' post data ');

=1;

=99999999;//每頁設(shè)置9億條記錄(無限,全部查詢)

//ajax不支持Excel類型。請使用loca或表單提交

//window.loca,get提交,數(shù)據(jù)暴露在URL中,相對不安全

//創(chuàng)建臨時隱藏表單、提交表單、請求正文中的數(shù)據(jù)、相對安全性

Var $ form=$ ('form ')。CSS ({顯示器3360' none'})。attr ('method ',' post ')

For (var key in postData) {

Var $ input=$ ('input ')。attr ('name ',key)。val(post data[k]

ey]); $($input); } $("body").append($form); $(); //過河拆橋,提交完成后remove掉 $(); }

  純js寫法

//其他操作,同上 let $form = document.createElement('form'); $;none"; $;POST"; $ + "/excel"; for (let key in postData) { if(postData[key]){ let $input = document.createElement('input'); $in; $in[key]; $Child($input); } } document.body.appendChild($form); $(); //過河拆橋,提交完成后remove掉 $();

  controller

/** * 根據(jù)當(dāng)前jqGrid分頁情況,創(chuàng)建并導(dǎo)出Excel文件 * * @param entity 機(jī)架實(shí)體,用來接收查詢條件 * @return ResponseEntity */ @PostMapping("/excel") public ResponseEntity createExcel(RackVo entity) { //Excel對應(yīng)的columnNames列名集合 { key,label } String[][] excelMap = { {"no", "Rack Code"}, {"rackName", "Rack Name"}, {"roomName", "Room"}, {"idc", "IDC Center"}, {"clientName", "Customer"}, {"rackTypeName", "Type"}, {"existentialMode", "Existential Mode"}, {"maxPower", "Maximum Power(KVA)"}, {"status", "Status"}, {"administrate", "Administrate"}, }; return DownloadU("Rack Management", excelMap, rackService.createExcel(entity).getData()).getData(), "機(jī)架數(shù)據(jù)報(bào)表"); }

  兩個工具類:導(dǎo)出Excel工具類 ExportExcelUtil,下載工具類 DownloadUtil

/** * java POI 導(dǎo)出Excel表工具類 */ public class ExportExcelUtil { //禁止實(shí)例化 private ExportExcelUtil() { } /** * 只支持一級表頭 * * @param titleName 表標(biāo)題 * @param columnNames 列名集合,key是用來設(shè)置填充數(shù)據(jù)時對應(yīng)單元格的值,label就是對應(yīng)的列名,生成Excel表時, * 第一維數(shù)組下標(biāo)0對應(yīng)值為Excel表最左邊的列的列名 例:{ { key,label },{ key,label } } * @param dataLists 數(shù)據(jù)集合,key對應(yīng)的是列名集合的key,value是要填充到單元格的值 例:ArrayList<HashMap<String key, String vaule>> * @return ResultModel<Workbook> */ public static ResultModel<Workbook> createExcel(String titleName, String[][] columnNames, ArrayList<HashMap<String, String>> dataLists) { //創(chuàng)建HSSFWorkbook對象(excel的文檔對象) HSSFWorkbook wb = new HSSFWorkbook(); //建立新的sheet對象(excel的表單) HSSFSheet sheet = wb.createSheet(titleName);//設(shè)置表單名 //1、標(biāo)題名 //創(chuàng)建標(biāo)題行,參數(shù)為行索引(excel的行),可以是0~65535之間的任何一個 HSSFRow row1 = (0); //標(biāo)題的字體 HSSFFont font1 = wb.createFont(); ((short) 12); ("黑體"); //標(biāo)題的樣式 HSSFCellStyle style1 = wb.createCellStyle(); );//水平居中 );//垂直居中 // 把字體 應(yīng)用到當(dāng)前樣式 (font1); //自動換行 (true); //自定義填充顏色(天空藍(lán)) ); ()); // 設(shè)置邊框 ); ); ); ); createCell(row1, 0, style1, titleName); //合并單元格CellRangeAddress構(gòu)造參數(shù)依次表示起始行,截至行,起始列, 截至列 (new CellRangeAddress(0, 0, 0, columnNames.length - 1)); //2、列名 //創(chuàng)建列名行 //列名的字體 HSSFFont font2 = wb.createFont(); ((short) 12); ("新宋體"); //列名的樣式 HSSFCellStyle style2 = wb.createCellStyle(); );//水平居中 );//垂直居中 // 把字體 應(yīng)用到當(dāng)前樣式 (font2); //自動換行 (true); //自定義填充顏色(淺藍(lán)色) ); ()); // 設(shè)置邊框 ); ); ); ); HSSFRow row2 = (1); for (int i = 0; i < columnNames.length; i++) { //單元格寬度 (i, 20 * 256); createCell(row2, i, style2, columnNames[i][1]);//例:[[key,label],[key,label]] 取label } //3、填充數(shù)據(jù) //內(nèi)容的字體 HSSFFont font3 = wb.createFont(); ((short) 12); ("新宋體"); //內(nèi)容的樣式 HSSFCellStyle style3 = wb.createCellStyle(); );//水平居中 );//垂直居中 // 把字體 應(yīng)用到當(dāng)前樣式 (font3); //自動換行 (true); //默認(rèn)無填充 ); ()); // 設(shè)置邊框 ); ); ); ); int index = 2;//標(biāo)題行、列名行,所以數(shù)據(jù)行默認(rèn)從第三行開始 for (HashMap<String, String> map : dataLists) { //創(chuàng)建內(nèi)容行 HSSFRow row3 = (index); for (int i = 0; i < columnNames.length; i++) { String val = map.get(columnNames[i][0]); createCell(row3, i, style3, val == null ? "" : val);//例:[[key,label],[key,label]] 取key } index++; } return Re(wb); } /** * 創(chuàng)建一個單元格 * * @param row 行 * @param column 列 * @param cellStyle 單元格樣式 * @param text 值 */ private static void createCell(Row row, int column, CellStyle cellStyle, String text) { Cell cell = row.createCell(column); // 創(chuàng)建單元格 cell.setCellValue(text); // 設(shè)置值 cell.setCellStyle(cellStyle); // 設(shè)置單元格樣式 } }import org.a; import org.; import org.; import org.; import org.; import org.; import java.io.*; import java.nio.c; import java.; import java.u; /** * 文件下載工具類 */ public class DownloadUtil{ /** * 快速下載 */ public static ResponseEntity download(byte[] fileBytes, String fileName) { //設(shè)置文件 HttpHeaders headers = new HttpHeaders(); ); ("attachment", new String),S)); //下載文件 return new ResponseEntity<>(fileBytes, headers, H); } /** * 快速下載 */ public static ResponseEntity download(File file) { return download(getByteArray(file), ()); } /** * 快速下載 */ public static ResponseEntity download(Workbook workbook, String fileName) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { fileName = fileName + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls"; workbook.write(outputStream); } catch (IOException e) { throw new RuntimeException(e); } return download(), fileName); } //獲取文件的字節(jié)數(shù)組 private static byte[] getByteArray(File file) { if (!()) { throw new RuntimeException("File Not Found:" + ()); } ByteArrayOutputStream bos = new ByteArrayOutputStream((int) ()); BufferedInputStream in = null; try { in = new BufferedInputStream(new FileInputStream(file)); int buf_size = 1024; byte[] buffer = new byte[buf_size]; int len; while (-1 != (len = in.read(buffer, 0, buf_size))) { bos.write(buffer, 0, len); } return bos.toByteArray(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } finally { try { assert in != null; in.close(); bos.close(); } catch (IOException e) { e.printStackTrace(); } } } //獲取文件名后綴 private static String getSuffix(String fileName) { int lastPointIndex = ("."); if (fileName) || lastPointIndex == -1) { return null; } return (lastPointIndex + 1); } }

  獲取封裝數(shù)據(jù)的service層 createExcel,直接到取page分頁方法,遍歷機(jī)架數(shù)據(jù)集合,設(shè)置Map<key,value>,add到list<Map>中,最后將封裝好的數(shù)據(jù)return回controller,傳入工具類,最后下載。

/** * 根據(jù)當(dāng)前jqGrid分頁情況,創(chuàng)建并導(dǎo)出Excel文件 * * @param entity 查詢條件 * @return 封裝好的數(shù)據(jù)集合 */ @Override public ResultModel<ArrayList<HashMap<String, String>>> createExcel(RackVo entity) { ArrayList<HashMap<String, String>> dataLists = new ArrayList<HashMap<String, String>>(); //直接調(diào)page分頁方法,獲取當(dāng)前jqGrid分頁條件對應(yīng)的數(shù)據(jù)集合, ResultModel<PageInfo<RackVo>> rm = page(entity); if ()) { List<RackVo> rackVoList = rm.getData().getRows(); for (RackVo rackVo : rackVoList) { HashMap<String, String> map = new HashMap<String, String>(16); map.put("no", rackVo.getNo() != null ? rackVo.getNo() : ""); map.put("rackName", rackVo.getName() != null ? rackVo.getName() : ""); map.put("roomName", rackVo.getRoom() != null ? rackVo.getRoom().getRoomname() : ""); map.put("idc", rackVo.getOrg() != null ? rackVo.getOrg().getOrgName() : ""); map.put("clientName", rackVo.getCustomer() != null ? rackVo.getCustomer().getClientname() : ""); map.put("rackTypeName", rackVo.getRacktype() != null ? rackVo.getRacktype().getName() : ""); map.put("existentialMode", "1".equal()) ? "Physical" : "Virtual"); map.put("maxPower", rackVo.getMaxpower() != null ? rackVo.getMaxpower() : ""); String status = rackVo.getServiceStatus(); switch (status != null ? status : "") { case "1": status = "Idle"; break; case "2": status = "Reserved"; break; case "3": status = "Occupied"; break; default: status = ""; break; } map.put("status", status); String administrate = rackVo.getAdministrate(); switch (administrate != null ? administrate : "") { case "R": administrate = "Cust Own"; break; case "U": administrate = "CTG Own"; break; default: administrate = ""; break; } map.put("administrate", administrate); da(map); } } return Re(dataLists); }

  效果

  從開發(fā)階段到測試階段,導(dǎo)了無數(shù)次,沒毛病

  小升級

  excelMap,Excel對應(yīng)的columnNames列名集合 { key,label },可以不用再controller設(shè)置了,直接從頁面jqgrid抓取,傳入controller就行(滑稽臉~)

//獲取jqgrid頭部標(biāo)題tr,有多少個tr就有多少級標(biāo)題 var thead_tr = $(".ui-jqgrid-htable").find(";); //遍歷thead_tr找出每一個標(biāo)題,并保存到對象中 var titles = []; (function(index_tr,element_tr){ ([]); $(element_tr).find("th").each(function(index_th,element_th){ //內(nèi)容 var label = $(element_th).text(); //所占行 rowspan 默認(rèn)1 var rowspan = $(element_th).attr("rowspan") || 1; //所占列 colspan 默認(rèn)1 var colspan = $(element_th).attr("colspan") || 1; //鍵 var key = $(element_th).attr("id"); key = key.substring("_")+1,key.length); if(label){ titles[index_tr].push({ label:label, key:key, rowspan:rowspan, colspan:colspan, }); } }); }); (titles) con(titles);

  更新

  2020-10-20更新

  直接構(gòu)造form表單提交,我們不能設(shè)置請求頭信息,有些需求不能滿足(例如在前后端分離的項(xiàng)目中,需要在請求頭傳遞token令牌),當(dāng)我們導(dǎo)出Excel功能需要設(shè)置請求頭信息時應(yīng)該如何操作呢?封裝原生Ajax,利用responseType: 'blob'屬性,接收二進(jìn)制數(shù)據(jù),構(gòu)建Blob對象,將二進(jìn)制數(shù)據(jù)轉(zhuǎn)成文件,利用a標(biāo)簽下載文件

//封裝原生Ajax var Ajax={ get: function(options) { let xhr = new XMLHttpRequest(); x('GET', o, true); //設(shè)置請求頭 x("Authorization", 'Bearer ' + ); x = function() { let response = null; // responseType="" / "text"時,響應(yīng)的結(jié)果從x獲取 i === "" || x === "text"){ response = x; } //200 請求成功 if === 200) { o(response); } //其他情況,請求失敗 i){ o); } }; x(); }, post: function (options) { let xhr = new XMLHttpRequest(); x("POST", o, true); //設(shè)置請求頭 x("Content-Type", "application/json"); x("Authorization", 'Bearer ' + ); //設(shè)置響應(yīng)內(nèi)容類型、超時時間 o ? x = o : x = "text"; o ? x = o : x = 30000; x = function() { let response = null; // responseType="" / "text"時,響應(yīng)的結(jié)果從x獲取 i === "" || x === "text"){ response = x; } //200 請求成功 if === 200) { o(response); } // responseType = "blob"時,響應(yīng)的是Blob二進(jìn)制數(shù)據(jù),直接調(diào)用下載 if === 201){ download(xhr,o) } //其他情況,請求失敗 i){ o); } }; x)); } }; //Blob響應(yīng),轉(zhuǎn)成文件下載 function download(response,callback) { //創(chuàng)建一個隱藏的下載a標(biāo)簽 let url = window.URL.createObjectURL(new Blob([re])); let link = document.createElement("a"); link. = "none"; link.href = url; //設(shè)置文件名,文件名從響應(yīng)頭中獲?。≒S:可能會存在中文亂碼、文件后綴多個下劃線等問題) let fileName = re().split("\n")[4].split(":")[1].split(";")[2].split("=")[1].replace(/"/g,""); fileName = decodeURIComponent(escape(fileName)); con("文件名:" + fileName); link.setAttribute("download", fileName); document.body.appendChild(link); link.click(); //過河拆橋 link.remove(); if(callback){ callback(); } }

  使用

//獲取當(dāng)前分頁參數(shù) let postData = vue.getPageParameter(); = 1; Size = 999999999;//設(shè)置每頁9億條記錄(相當(dāng)于無窮大,查詢所有) con("開始導(dǎo)出..."); Ajax.post({ url:vue.excelUrl, data:postData, timeout: 30000, responseType: 'blob', success:function () { con("導(dǎo)出完成,請您注意瀏覽器的下載管理器!"); } });

  效果

  后綴多了個下劃線,很奇怪...,刪除下劃線文件能正常打開,數(shù)據(jù)、單元格背景等正常

版權(quán)聲明

作者:huanzi-qch

出處:

若標(biāo)題中有“轉(zhuǎn)載”字樣,則本文版權(quán)歸原作者所有。若無轉(zhuǎn)載字樣,本文版權(quán)歸作者所有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責(zé)任的權(quán)利.

1.《【poi怎么設(shè)置excel】POI導(dǎo)出Excel》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《【poi怎么設(shè)置excel】POI導(dǎo)出Excel》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實(shí),對其原創(chuàng)性、真實(shí)性、完整性、及時性不作任何保證。

3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/keji/2500633.html

上一篇

【EXcel怎么鏈接CAD】python使用Win32com將excel和CAD連接起來,執(zhí)行自動繪圖

【poi怎么設(shè)置excel】Java使用poi導(dǎo)入導(dǎo)出Excel

【poi怎么設(shè)置excel】Java使用poi導(dǎo)入導(dǎo)出Excel

poi怎么設(shè)置excel相關(guān)介紹,前言 1、將用戶信息導(dǎo)出到excel表(導(dǎo)出數(shù)據(jù)……。)。 2、將Excel表中的信息輸入網(wǎng)站數(shù)據(jù)庫(上傳練習(xí))?!?。)。 設(shè)計(jì)為excel的開發(fā)過程,例如Excel導(dǎo)出、Excel導(dǎo)入數(shù)據(jù)庫! E...

【poi怎么設(shè)置excel】從Java、POI、樣板導(dǎo)出Excel文件(xls和xlsx)、設(shè)置圖紙樣式

【poi怎么設(shè)置excel】從Java、POI、樣板導(dǎo)出Excel文件(xls和xlsx)、設(shè)置圖紙樣式

poi怎么設(shè)置excel相關(guān)介紹,阿帕奇poi POI是[Poor Obfuscation Implementation]的首字母縮寫,意思是[可憐的模糊實(shí)現(xiàn)]。Java進(jìn)程讀取和寫入Microsoft Office格式文件的能力。 ...