解决POI的SXSSFSheet 创建excel下拉框,下拉框内容过多时不显示的问题

这篇具有很好参考价值的文章主要介绍了解决POI的SXSSFSheet 创建excel下拉框,下拉框内容过多时不显示的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 1. 复现 :使用POI导出带下拉框的excel文件,如果下拉框内容过多,下拉框变为了空
  2.  解决思路 : 导出时创建隐藏的sheet,下拉框的取值从隐藏的sheet中获取,下拉框显示正常
  3. 记录:因为网上的一些代码用的都不是SXSSFSheet创建 所以拿过来都需要改,所以我把改好的代码贴上来,大家就不用修改了
  4. 代码:
        /**
         * @description: 解决下拉框过长不显示问题
         * @author: Johnny
         * @param workbook
         * @param sheet
         * @param intArr (开始行,结束行,下拉框所在的列)
         * @param deptList 下拉数据数组
         * @return: void
         **/
        public static void setLongHSSFValidation(XSSFWorkbook workbook, XSSFSheet sheet,
                                                 Integer[] intArr, String[] deptList) {
            int firstRow = intArr[0];
            int endRow =intArr[1];
            int cellNum =intArr[2];
            String hiddenName = "hidden"+cellNum;
            //1.创建隐藏的sheet页。
            XSSFSheet hidden = workbook.createSheet(hiddenName);
            //2.循环赋值(为了防止下拉框的行数与隐藏域的行数相对应,将隐藏域加到结束行之后)
            for (int i = 0, length = deptList.length; i < length; i++) {
                hidden.createRow(endRow + i).createCell(cellNum).setCellValue(deptList[i]);
            }
            Name category1Name = workbook.createName();
            category1Name.setNameName(hiddenName);
            //3 A1:A代表隐藏域创建第N列createCell(N)时。以A1列开始A行数据获取下拉数组
            category1Name.setRefersToFormula(hiddenName + "!A1:A" + (deptList.length + endRow));
            //
            DataValidationHelper helper = sheet.getDataValidationHelper();
            DataValidationConstraint constraint = helper.createFormulaListConstraint(hiddenName);
            CellRangeAddressList addressList = new CellRangeAddressList(1, endRow, cellNum, cellNum);
            DataValidation dataValidation = helper.createValidation(constraint, addressList);
            if (dataValidation instanceof XSSFDataValidation) {
                // 数据校验
                dataValidation.setSuppressDropDownArrow(true);
                dataValidation.setShowErrorBox(true);
            } else {
                dataValidation.setSuppressDropDownArrow(false);
            }
            // 作用在目标sheet上
            sheet.addValidationData(dataValidation);
            // 设置hiddenSheet隐藏
            workbook.setSheetHidden(workbook.getSheetIndex(hiddenName), true);
        }
  5. 这是一般的下拉框代码,数据量少的时候可以用
/**有下拉框不显示的问题
     * 设置excel下拉框
     * @param sheet
     * @param textlist 下拉数据列表
     * @param firstRow
     * @param endRow
     * @param firstCol
     * @param endCol
     * @return
     */
    public static XSSFSheet setHSSFValidation(XSSFSheet sheet,
                                               String[] textlist, int firstRow, int endRow, int firstCol,
                                               int endCol) {
        // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
        CellRangeAddressList regions = new CellRangeAddressList(firstRow,
                endRow, firstCol, endCol);
        // 数据有效性对象
        DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper();
        DataValidationConstraint createExplicitListConstraint = dataValidationHelper.createExplicitListConstraint(textlist);

        DataValidation createValidation = dataValidationHelper.createValidation(createExplicitListConstraint, regions);

        if (createValidation instanceof XSSFDataValidation) {
            createValidation.setSuppressDropDownArrow(true);
            createValidation.setShowErrorBox(true);
        } else {
            createValidation.setSuppressDropDownArrow(false);
        }
        sheet.addValidationData(createValidation);

        return sheet;
    }

 文章来源地址https://www.toymoban.com/news/detail-739059.html

到了这里,关于解决POI的SXSSFSheet 创建excel下拉框,下拉框内容过多时不显示的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • element ui多选下拉组件(el-select)tag数量过多处理解决办法(二次封装)

    如下图所示,当标签选择过多时,会占用过多空间 期待效果:超过n行就自动省略,并可以进行展开收起,下图是实现后的效果图 实现分析: 通过extends继承el-select组件 将select源码的template部分粘贴到封装的组件中,以此来操作展开、收起等需要操作dom的部分 监听selected(已选择

    2024年02月13日
    浏览(48)
  • C# 创建Excel并写入内容

            在许多应用程序中,需要将数据导出为Excel表格,以便用户可以轻松地查看和分析数据。在本文中,我们将讨论如何使用C#创建Excel表格,并将数据写入该表格。 添加引用 在C#中创建Excel表格,需要使用Microsoft.Office.Interop.Excel命名空间中的类。打开Visual Studio,选择

    2024年02月11日
    浏览(38)
  • java poi excel 设置单元格富文本 粗体无效解决办法

    //富文本样式(一个单元格含有的多种样式格式)设置粗体无效解决办法 //设置RichTextString 的时候,给 font 设置 setBold(true) ; setItalic(true) 粗体 斜体 ,发现在office有效果,在wps 看不到加粗斜体效果。 //原因是而程序生成的加粗是b val=\\\"true\\\"/电脑的生成的xlsx的加粗是b/,所以解决

    2024年02月15日
    浏览(41)
  • java导出Excel增加下拉框选项,解决小数据量和大数据量下拉框选项的问题

    这篇文章主要介绍了Java 导出Excel增加下拉框选项,excel对于下拉框较多选项的,需要使用隐藏工作簿来解决,使用函数取值来做选项,下文具体的操作详情,需要的小伙伴可以参考一下! excel对于下拉框较多选项的,需要使用隐藏工作簿来解决,使用函数取值来做选项 选项较

    2023年04月18日
    浏览(32)
  • Java excel poi 使用HSSFWorkbook 导出的excel wps能打开office打不开问题解决 Excel无法打开xx.xlsx,因为文件格式或扩展名无效......

    1.在开发代码中涉及到报表导出 xlsx文件 office打不开问题 JavaPOI导出Excel有三种形式,他们分别是 1.HSSFWorkbook 2.XSSFWorkbook 3.SXSSFWorkbook。 pom文件如下 检查创建sheet代码如下 代码中用了 HSSFworkbook 去创建Sheet 导致office打不开原因就在这里 HSSFworkbook 解释如下: HSSFWorkbook:是操作Exc

    2024年02月16日
    浏览(48)
  • vue:如果.vue文件内容过多,我们可以这样拆分

    一、标签内容太多,我们可以用组件的方式拆分 二、那如果JS的内容太多呢?因为耦合性太高,拆成组件后父子组件传值不方便,我们可以这样: 子组件: 父组件(也就是vue主页面): 逻辑拆分,相互调用不受组件影响  

    2024年02月02日
    浏览(45)
  • SQL,查询条件中IN的内容过多效率低进行优化

    前提:         业务实施过程中,查询分页数据很慢,后定位到是in的数据过多,导致查询很慢。 优化思路:         使用临时表解决,将数据插入到一临时表中,再将临时表与查询主表进行join。 其中要注意的是,因为业务部署使用的是分布式部署,有多个节点,要保证每

    2024年02月11日
    浏览(48)
  • vue element表格某一列内容过多,超出省略号显示

    在使用element组件库里面的table组件时,遇到某一个字段内容过多,导致td高度被撑开,布局显得很不美观, 这时我们只要给table-cloumn添加一个属性show-overflow-tooltip。 实现超出隐藏,并有提示,这样的话会有下面效果: 提示的长度特别长,超出了屏幕,不太好看。  可以在处

    2024年02月15日
    浏览(37)
  • uniapp小程序当页面内容超出时显示滚动条,不超出时不显示---样式自定义

    使用scroll-view中的show-scrollbar属性 注意:需要搭配enhanced使用 否则无效 滚动条样式自定义 注意:此代码在ios情况下滚动条需要滑动时才显示并且不滑动过后就会隐藏 安卓情况下正常显示

    2024年01月22日
    浏览(49)
  • 如何使用xlwings库创建图表及设置坐标轴标题文本内容----关于Python里xlwings库对Excel表格的操作(三十二)

    这篇小笔记主要记录如何 【如何使用“Chart类”、“Api类\\\"和“Axes函数”设置坐标轴标题文本内容】 。 前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安装导入xlwings库; (2)如何在Wps下使用xlwings中

    2024年01月22日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包