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

最近在项目中用到poi生成excel文件,其中需要将某一列限定为特定的值

原始的方法为:

private static HSSFDataValidation getDataValidationList(HSSFSheet sheet, short firstRow,
                                                            short firstCol, short endRow,
                                                            short endCol, List<String> strList)
    {
        LOGGER.info("dataList: {}.", strList);
        String[] dataArray = strList.toArray(new String[0]);
        HSSFDataValidationHelper dvHelper = new HSSFDataValidationHelper(sheet);
        DataValidationConstraint dvConstraint = (DataValidationConstraint)dvHelper
            .createExplicitListConstraint(dataArray);
        CellRangeAddressList addressList = new CellRangeAddressList(firstRow, endRow, firstCol,
            endCol);
        HSSFDataValidation validation = (HSSFDataValidation)dvHelper.createValidation(dvConstraint,
            addressList);

        if (null != validation)
        {
            sheet.addValidationData(validation);
        }
        return validation;
    }

但是当一个单元格的字符数大于255时,就报如下问题:

java.lang.IllegalArgumentException: String literals in formulas can’t be bigger than 255 characters ASCII

解决方法如下:

private static HSSFDataValidation getDataValidationList4Col(HSSFSheet sheet, short firstRow,
                                                                short firstCol, short endRow,
                                                                short endCol, List<String> colName,
                                                                HSSFWorkbook wbCreat)
    {
        String[] dataArray = colName.toArray(new String[0]);
        HSSFSheet hidden = wbCreat.createSheet("hidden");
        HSSFCell cell = null;
        for (int i = 0, length = dataArray.length; i < length; i++)
        {
            String name = dataArray[i];
            HSSFRow row = hidden.createRow(i);
            cell = row.createCell(0);
            cell.setCellValue(name);
        }

        Name namedCell = wbCreat.createName();
        namedCell.setNameName("hidden");
        namedCell.setRefersToFormula("hidden!$A$1:$A$" + dataArray.length);
        //加载数据,将名称为hidden的
        DVConstraint constraint = DVConstraint.createFormulaListConstraint("hidden");

        // 设置数据有效性加载在哪个单元格上,四个参数分别是:起始行、终止行、起始列、终止列
        CellRangeAddressList addressList = new CellRangeAddressList(firstRow, endRow, firstCol,
            endCol);
        HSSFDataValidation validation = new HSSFDataValidation(addressList, constraint);

        //将第二个sheet设置为隐藏
        wbCreat.setSheetHidden(1, true);

        if (null != validation)
        {
             sheet.addValidationData(validation);
         }
        return validation;
    }

 

  • 14
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值