成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

AbstractXlsxView導(dǎo)出帶有下拉框列的Excel

sewerganger / 2094人閱讀

摘要:在導(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ù)及表頭
        Map map = 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(Map map, 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

相關(guān)文章

  • 使用 SpreadJS 實(shí)現(xiàn) JavaScript 中導(dǎo)入和導(dǎo)出Excel文件

    摘要:而作為一款深受用戶(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)的電...

    Jioby 評(píng)論0 收藏0
  • poi導(dǎo)出excel 下拉列表值超過(guò)255問(wèn)題

    摘要:為首行賦值設(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...

    gyl_coder 評(píng)論0 收藏0
  • Java實(shí)現(xiàn)excel導(dǎo)入導(dǎo)出學(xué)習(xí)筆記2 - 利用xml技術(shù)設(shè)置導(dǎo)入模板,設(shè)置excel樣式

    摘要:四個(gè)參數(shù)分別是起始行終止行起始列終止列數(shù)據(jù)有效性對(duì)象包下載百度云盤(pán)外鏈 showImg(/img/bVqclu); xml文件 ...

    I_Am 評(píng)論0 收藏0
  • 一文帶你斬殺Python之Numpy??Pandas全部操作【全網(wǎng)最詳細(xì)】???

    目錄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...

    asoren 評(píng)論0 收藏0
  • php處理Excel

    摘要:導(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...

    gitmilk 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<