使用Java写入Excel下拉选择框选项过多不显示问题

1.问题描述

工作中遇到需要使用Java poi读写Excel文件的问题,因为需求中有要求在写文件时创建下拉选择框。按照传统的直接使用List集合保存下拉选择框的选项,再通过poi本身的方法将选择框的选项添加到下拉框中。

一开始编写demo测试时只有几个选项,可以正确的添加下拉框。后来把方法搬到项目中,发现创建的文件中的下拉框的选项数据不能正确的显示。通过对比两个文件,发现唯一的不同点就是下拉框选项的数量存在差异。通过一番查询,发现poi添加下拉框选项的数量被控制在20个以内(官方说法好像是256个字节?记不太清楚了,如果说错了,请大佬批评指正orz)

2.选项数量(<=20)较少的方法

  • 向Excel中写数据,简单样例

    /**
         * 将lines的内容写入excel中
         *
         * @param outputPath excel存放路径
         * @param lines      需要写入execl的文件
         * @throws IOException
         */
        public synchronized void writeInExcel(String outputPath, Collection<String[]> lines) throws IOException {
         
    
            @SuppressWarnings("resource")
            Workbook workbook = new XSSFWorkbook();
            Sheet sheet = workbook.createSheet();
            // 写入Excel表格开头
            Row firstRow = sheet.createRow(0);
            ArrayList<String> arrayList = new ArrayList<String>();
            String[] excelHeadList = {
         "a","b","c","d","e"};
            for (int i = 0; i < excelHeadList.length; i++) {
         
                arrayList.add(excelHeadList[i]);
            }
            String[] arr = new String[arrayList.size()];
            for (int i = 0; i < arrayList.size(); i++) {
         
                arr[i] = arrayList.get(i);
            }
            writeInRow(firstRow, arr);
    
            if (lines != null && lines.size() > 0) {
         
                // 写入Excel表格内容
                AtomicInteger i = new AtomicInteger(1);
                lines.forEach(line -> {
         
                    Row row = sheet.createRow(i.get());
                    writeInRow(row, line);
                    i.set(i.incrementAndGet());
                });
                DataValidationHelper helper = sheet.getDataValidationHelper();
                // 创建审核结果下拉框
                createDropDownBox(sheet, helper, checkResultList, 1, i.get() - 1, arr.length - 6, arr.length - 6);
            }
      
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值