摘要:在導(dǎo)出數(shù)據(jù)的時(shí)候,遇到了某一列要設(shè)置為下拉框選擇,前輩們?cè)诰W(wǎng)上都是簡(jiǎn)單的例子,沒(méi)有下拉框的設(shè)置,索性自己折騰一下。
AbstractXlsxView 在導(dǎo)出Excel數(shù)據(jù)的時(shí)候,遇到了某一列要設(shè)置為下拉框選擇,前輩們?cè)诰W(wǎng)上都是簡(jiǎn)單的例子,沒(méi)有下拉框的設(shè)置,索性自己折騰一下。
Controller:
... @Autowired private ActivityMonitorService monitorService; ... @GetMapping("/downloadExcel") public ModelAndView downloadExcel() { ExcelView excelView = new ExcelView(); // 該map組裝excelView用到的數(shù)據(jù)及表頭 Mapmap = monitorService.uploadExcelParam(); return new ModelAndView(excelView, map); } ...
AbstractXlsxView實(shí)現(xiàn)類(lèi):
import com.jason.dto.ActivityMonitorDto; import org.apache.commons.lang.StringUtils; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.xssf.usermodel.XSSFDataValidation; import org.springframework.stereotype.Service; import org.springframework.web.servlet.view.document.AbstractXlsxView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.net.URLEncoder; import java.util.List; import java.util.Map; /** * 導(dǎo)出xlsx數(shù)據(jù) */ @Service public class ExcelView extends AbstractXlsxView { private final int MAX_ROW = 65535; @Override protected void buildExcelDocument(Mapmap, Workbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { String name = (String) map.get("fileName"); if (StringUtils.isEmpty(name)) { name = "Template"; } String fileName = name + ".xlsx"; // 火狐瀏覽器亂碼解決 String agent = request.getHeader("User-Agent"); if (agent != null) { if ("firefox".contains(agent.toLowerCase())) { response.setHeader("content-disposition", String.format("attachment;filename*=utf-8"zh_cn"%s", URLEncoder.encode(fileName,"utf-8"))); } else { response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")); } } response.setCharacterEncoding("UTF-8"); response.setContentType("application/ms-excel;charset=utf-8"); Sheet sheet = workbook.createSheet(); String[] headerTitle = (String[]) map.get("headers"); Row header = sheet.createRow(0); for (int i = 0; i < headerTitle.length; i++) { header.createCell(i).setCellValue(headerTitle[i]); } // 需要導(dǎo)出的數(shù)據(jù) List list = (List ) map.get("content"); for (int i = 0; i < list.size(); i++) { Row row = sheet.createRow(i + 1); row.createCell(0).setCellValue(list.get(i).getActName()); row.createCell(1).setCellValue(list.get(i).getActId()); // 第三列填寫(xiě)默認(rèn)值 row.createCell(2).setCellValue(list.get(i).getReleaseTime()); row.createCell(3).setCellValue(list.get(i).getPointPositionName()); // 第五列填寫(xiě)默認(rèn)值 row.createCell(4).setCellValue(list.get(i).getAttributeName()); row.createCell(5).setCellValue(list.get(i).getUseChannelName()); row.createCell(6).setCellValue(list.get(i).getRemark()); } // 普通格式組裝完畢,開(kāi)始設(shè)置下拉框 DataValidationHelper helper = sheet.getDataValidationHelper(); // 下拉框的option數(shù)據(jù) String[] pointPositionArray = (String[]) map.get("pointPositionArray"); String[] channelArray = (String[]) map.get("channelArray"); // 第三和第五列設(shè)置為下拉框 DataValidationConstraint constraintPosition = helper.createExplicitListConstraint(pointPositionArray); CellRangeAddressList regionsPosotion = new CellRangeAddressList(1, MAX_ROW, 3, 3); DataValidation positionData = helper.createValidation(constraintPosition, regionsPosotion); DataValidationConstraint constraintChannel = helper.createExplicitListConstraint(channelArray); CellRangeAddressList regionChannel = new CellRangeAddressList(1, MAX_ROW, 5, 5); DataValidation channelData = helper.createValidation(constraintChannel, regionChannel); //處理Excel兼容性問(wèn)題 if(positionData instanceof XSSFDataValidation) { positionData.setSuppressDropDownArrow(true); positionData.setShowErrorBox(true); }else { positionData.setSuppressDropDownArrow(false); } if(channelData instanceof XSSFDataValidation) { channelData.setSuppressDropDownArrow(true); channelData.setShowErrorBox(true); }else { channelData.setSuppressDropDownArrow(false); } sheet.addValidationData(positionData); sheet.addValidationData(channelData); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77492.html
摘要:而作為一款深受用戶(hù)喜愛(ài)的電子表格工具,借助其直觀的界面出色的計(jì)算性能和圖表工具,已經(jīng)成為數(shù)據(jù)統(tǒng)計(jì)領(lǐng)域不可或缺的軟件之一。使用實(shí)現(xiàn)的導(dǎo)入和導(dǎo)出通過(guò)純,您完全可以實(shí)現(xiàn)導(dǎo)入和導(dǎo)出文件功能,并為最終用戶(hù)提供與這些文件進(jìn)行交互的界面。 JavaScript是一個(gè)涵蓋多種框架、直譯式、可以輕松自定義客戶(hù)端的腳本語(yǔ)言,在 Web 應(yīng)用程序中,更加易于編碼和維護(hù)。而Excel 作為一款深受用戶(hù)喜愛(ài)的電...
摘要:為首行賦值設(shè)置列寬第一個(gè)下拉選新建一個(gè)頁(yè)數(shù)據(jù)對(duì)應(yīng)列下拉框數(shù)據(jù)測(cè)試數(shù)據(jù)寫(xiě)入下拉數(shù)據(jù)到新的頁(yè)中獲取新頁(yè)內(nèi)容設(shè)置數(shù)據(jù)有效性加載在哪個(gè)單元格上四個(gè)參數(shù)分別是起始行終止行起始列終止列數(shù)據(jù)有效性對(duì)象將新建的頁(yè)隱藏掉第二個(gè)下拉選對(duì)應(yīng)列下拉框數(shù)據(jù)測(cè)試數(shù)據(jù) public void exportExcel(List list,HttpServletResponse response,String fil...
摘要:四個(gè)參數(shù)分別是起始行終止行起始列終止列數(shù)據(jù)有效性對(duì)象包下載百度云盤(pán)外鏈 showImg(/img/bVqclu); xml文件 ...
目錄Numpy簡(jiǎn)介Numpy操作集合1、不同維度數(shù)據(jù)的表示1.1 一維數(shù)據(jù)的表示1.2 二維數(shù)據(jù)的表示1.3 三維數(shù)據(jù)的表示2、 為什么要使用Numpy2.1、Numpy的ndarray具有廣播功能2.2 Numpy數(shù)組的性能比Python原生數(shù)據(jù)類(lèi)型高3 ndarray的屬性和基本操作3.1 ndarray的基本屬性3.2 ndarray元素類(lèi)型3.3 創(chuàng)建ndarray的方式3.4 ndarr...
摘要:導(dǎo)出成為在絕大多數(shù)情況下,導(dǎo)出其實(shí)就是將二維數(shù)組轉(zhuǎn)化為表格。要保存的的名字轉(zhuǎn)換為表格的二維數(shù)組設(shè)置表格填充數(shù)據(jù)設(shè)置表格并輸出導(dǎo)入同理,導(dǎo)入其實(shí)就是將的數(shù)據(jù)轉(zhuǎn)化成為二維數(shù)組,這就要求必須符合格式。 遇到問(wèn)題 平時(shí)在工作中,時(shí)常會(huì)出現(xiàn)將數(shù)據(jù)庫(kù)表導(dǎo)出為Excel或者將Excel導(dǎo)入數(shù)據(jù)庫(kù)表的需求。這一需求早早就已經(jīng)實(shí)現(xiàn)過(guò)了,為了方便導(dǎo)入導(dǎo)出,我將其封裝成了兩個(gè)方法,作為記錄。 代碼實(shí)現(xiàn) ph...
閱讀 531·2021-09-03 00:22
閱讀 1403·2021-08-03 14:03
閱讀 2123·2021-07-25 21:37
閱讀 678·2019-08-30 13:18
閱讀 1905·2019-08-29 16:19
閱讀 2712·2019-08-29 13:22
閱讀 1342·2019-08-29 12:16
閱讀 2611·2019-08-26 12:16