国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

AbstractXlsxView導出帶有下拉框列的Excel

sewerganger / 2070人閱讀

摘要:在導出數據的時候,遇到了某一列要設置為下拉框選擇,前輩們在網上都是簡單的例子,沒有下拉框的設置,索性自己折騰一下。

AbstractXlsxView 在導出Excel數據的時候,遇到了某一列要設置為下拉框選擇,前輩們在網上都是簡單的例子,沒有下拉框的設置,索性自己折騰一下。

Controller:

...
    @Autowired
    private ActivityMonitorService monitorService;
...
    @GetMapping("/downloadExcel")
    public ModelAndView downloadExcel() {
        ExcelView excelView = new ExcelView();
        // 該map組裝excelView用到的數據及表頭
        Map map = monitorService.uploadExcelParam();
        return new ModelAndView(excelView, map);
    }
... 

AbstractXlsxView實現類:

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;

/**
 * 導出xlsx數據
 */
@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]);
        }

        // 需要導出的數據
        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());
            // 第三列填寫默認值
            row.createCell(2).setCellValue(list.get(i).getReleaseTime());
            row.createCell(3).setCellValue(list.get(i).getPointPositionName());
            // 第五列填寫默認值
            row.createCell(4).setCellValue(list.get(i).getAttributeName());
            row.createCell(5).setCellValue(list.get(i).getUseChannelName());
            row.createCell(6).setCellValue(list.get(i).getRemark());
        }

        // 普通格式組裝完畢,開始設置下拉框
        DataValidationHelper helper = sheet.getDataValidationHelper();

        // 下拉框的option數據
        String[] pointPositionArray = (String[]) map.get("pointPositionArray");
        String[] channelArray = (String[]) map.get("channelArray");

        // 第三和第五列設置為下拉框
        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兼容性問題
        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);
    }
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77492.html

相關文章

  • 使用 SpreadJS 實現 JavaScript 中導入和導出Excel文件

    摘要:而作為一款深受用戶喜愛的電子表格工具,借助其直觀的界面出色的計算性能和圖表工具,已經成為數據統計領域不可或缺的軟件之一。使用實現的導入和導出通過純,您完全可以實現導入和導出文件功能,并為最終用戶提供與這些文件進行交互的界面。 JavaScript是一個涵蓋多種框架、直譯式、可以輕松自定義客戶端的腳本語言,在 Web 應用程序中,更加易于編碼和維護。而Excel 作為一款深受用戶喜愛的電...

    Jioby 評論0 收藏0
  • poi導出excel 下拉列表值超過255問題

    摘要:為首行賦值設置列寬第一個下拉選新建一個頁數據對應列下拉框數據測試數據寫入下拉數據到新的頁中獲取新頁內容設置數據有效性加載在哪個單元格上四個參數分別是起始行終止行起始列終止列數據有效性對象將新建的頁隱藏掉第二個下拉選對應列下拉框數據測試數據 public void exportExcel(List list,HttpServletResponse response,String fil...

    gyl_coder 評論0 收藏0
  • Java實現excel導入導出學習筆記2 - 利用xml技術設置導入模板,設置excel樣式

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

    I_Am 評論0 收藏0
  • 一文帶你斬殺Python之Numpy??Pandas全部操作【全網最詳細】???

    目錄Numpy簡介Numpy操作集合1、不同維度數據的表示1.1 一維數據的表示1.2 二維數據的表示1.3 三維數據的表示2、 為什么要使用Numpy2.1、Numpy的ndarray具有廣播功能2.2 Numpy數組的性能比Python原生數據類型高3 ndarray的屬性和基本操作3.1 ndarray的基本屬性3.2 ndarray元素類型3.3 創建ndarray的方式3.4 ndarr...

    asoren 評論0 收藏0
  • php處理Excel

    摘要:導出成為在絕大多數情況下,導出其實就是將二維數組轉化為表格。要保存的的名字轉換為表格的二維數組設置表格填充數據設置表格并輸出導入同理,導入其實就是將的數據轉化成為二維數組,這就要求必須符合格式。 遇到問題 平時在工作中,時常會出現將數據庫表導出為Excel或者將Excel導入數據庫表的需求。這一需求早早就已經實現過了,為了方便導入導出,我將其封裝成了兩個方法,作為記錄。 代碼實現 ph...

    gitmilk 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<