java - Développement Web - POI exporte Excel avec des listes déroulantes et résout l'exception causée par un trop grand nombre de tableaux dans la liste déroulante
迷茫
迷茫 2017-05-17 10:00:25
0
1
1079

1. S'il y a peu de tableaux déroulants dans Excel (environ 0~20), vous pouvez les exporter de la manière suivante :

            /**
             * Excel API
             */
            @SuppressWarnings("resource")
            HSSFWorkbook book = new HSSFWorkbook();  
            HSSFSheet sheet = book.createSheet("xxxx");  
            
            /**
             * 初始化参数
             */
            Map<String, String> map = new HashMap<String, String>(); // 查询时用的map 
            List<Object> list = null; 
            String[] strs = null; // 用于下拉的数组
            int startRow = 1; // 下拉的开始行 
            int endRow = 100; // 下拉的结束行
            CellRangeAddressList regions = null;
            DVConstraint constraint = null;
            CellRangeAddressList addressList = null;
            HSSFDataValidation validation = null; // 数据验证

            map.put("namespace", "xxxxxxxxxx.xxxxxxxxxx"); // 查询数据
            list = commonQueryService.queryList(map); 
            strs = StringUtil.mapListToStrs(list); // list转换为字符串数组
            cellNum = SpuEnu.CATEGORY_1.getNumber(); // 下拉的列
            
            regions = new CellRangeAddressList(startRow, endRow, cellNum, cellNum); // 开始行、结束行、开始列、结束列的下拉区域均被下拉替代 
            constraint = DVConstraint.createExplicitListConstraint(strs);  
            validation = new HSSFDataValidation(regions, constraint); // 绑定下拉框和作用区域   
            sheet.addValidationData(validation); 

2. Le problème est que s'il y a trop de tableaux déroulants, le message d'exception suivant apparaîtra dans POI :

String literals in formulas can't be bigger than 255 characters ASCII

La solution à ce problème n'est pas facile à trouver en ligne, je la publierai donc ci-dessous

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

répondre à tous(1)
曾经蜡笔没有小新

Voici la solution :

            /**
             * Excel API
             */
            @SuppressWarnings("resource")
            HSSFWorkbook book = new HSSFWorkbook();  
            HSSFSheet sheet = book.createSheet("spu导入模板");  
            
            /**
             * 初始化参数
             */
            Map<String, String> map = new HashMap<String, String>(); // 查询时用的map 
            List<Object> list = null; 
            String[] strs = null; // 用于下拉的数组
            String hiddenSheet = null;
            int cellNum = 0;
            int startRow = 1; // 开始行 
            int endRow = 100; // 结束行
            DVConstraint constraint = null;
            CellRangeAddressList addressList = null;
            HSSFDataValidation validation = null; // 数据验证

            map.put("namespace", "xxxxxxx.xxxxx"); // 查询
            list = commonQueryService.queryList(map); 
            strs = StringUtil.mapListToStrs(list);
            hiddenSheet = "category1Hidden";
            cellNum = SpuEnu.CATEGORY_1.getNumber();
            
            HSSFSheet category1Hidden = book.createSheet(hiddenSheet); // 创建隐藏域
            for (int i = 0, length = strs.length; i < length; i++) { // 循环赋值(为了防止下拉框的行数与隐藏域的行数相对应来获取>=选中行数的数组,将隐藏域加到结束行之后)
                category1Hidden.createRow(endRow + i).createCell(cellNum).setCellValue(strs[i]);
            } 
            Name category1Name = book.createName(); 
            category1Name.setNameName(hiddenSheet); 
            category1Name.setRefersToFormula(hiddenSheet + "!A1:A" + (strs.length + endRow)); // A1:A代表隐藏域创建第?列createCell(?)时。以A1列开始A行数据获取下拉数组
            
            constraint = DVConstraint.createFormulaListConstraint(hiddenSheet); 
            addressList = new CellRangeAddressList(startRow, endRow, cellNum, cellNum); 
            validation = new HSSFDataValidation(addressList, constraint); 
            book.setSheetHidden(1, true); // 1隐藏、0显示
            sheet.addValidationData(validation);

Veuillez faire attention à ces deux endroits ci-dessus :

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!