一、简单的描述问题:(记录问题)

首先说一下我们导出的这个Excel表,我们是通过POI来生成一个Excel表,然后在Excel表中添加了下拉列表,然后将数据库中取出的数据放到下拉列表中,这样每次导出的Excel表的下拉列表的数据都是导出那一时刻数据库中的最新数据。

早上在系统上导出Excel时出现了一个问题:见下图

然后赶紧跑去调服务器日志发现了问题所在:(公式中的字符串长度不能大于255个字符)

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

突然回想起来昨天晚上在下拉列表的数据库表中新增了几条数据,可能是这个原因,赶紧查了一下百度,原来如此,POI导出Excel时下拉列表中的文字总长度超过一定限制就会导致报255错误。

二、解决问题:

1、问题来源:
导出时如果下拉框中的文字总长度超过一定限制就会导致导出Excel时报上面的错误。

2、解决方案思路:
在创建sheet页时,额外创建一个sheet页用来存储我们在数据库中取出的数据,然后从这个sheet页中读取数据放到我们的下拉列表中,最后将我们额外创建的sheet隐藏即可。

3、代码参考:(设置Excel单元格样式什么的我这里就不写了)

1、创建Excel工作薄对象:
注:由于 HSSFWorkbook 只能操作 excel2003 以下版本,XSSFWorkbook 只能操作 excel2007 以上版本,所以利用 Workbook 接口创建对应的对象操作 excel 来处理兼容性。

//创建Excel工作薄对象
Workbook workbook = new HSSFWorkbook();
//生成一个表格 设置:页签
Sheet sheet = workbook.createSheet("sheet1");

去数据库中查询我们想要的数据(这部分你们自己放你们自己的数据)

//去数据库中查询我们想要的数据
List<Product> productList = Ebean.getServer(GlobalDBControl.getDB()).createQuery(Product.class, "find product where 1 = 1 and status = 0 and producttype is not null ").findList();//创建一个数组 用来存放 我们取出来的数据
String[] productNameArray = new String[productList.size()];
//遍历每个peoduct对象,来获取productName属性并添加到数组中
for (int i = 0; i < productList.size(); i++) {Product product = productList.get(i);productNameArray[i] = product.getTitle();
}
//将下拉框数据放到新的sheet里,然后excle通过新的sheet数据加载下拉框数据
Sheet hidden = workbook.createSheet("hidden");//创建单元格对象
Cell cell = null;
//遍历我们上面的数组,将数据取出来放到新sheet的单元格中
for (int i = 0, length = productNameArray.length; i < length; i++){//取出数组中的每个元素String name = productNameArray[i];//根据i创建相应的行对象(说明我们将会把每个元素单独放一行)Row row = hidden.createRow(i);//创建每一行中的第一个单元格cell = row.createCell(0);//然后将数组中的元素赋值给这个单元格cell.setCellValue(name);
}

注:设置名称引用的公式: 可以看一下这个:有关绝对引用和相对引用
1、使用像’A1:B1’这样的相对值会导致在Microsoft Excel中使用工作簿时名称所指向的单元格的意外移动,通常使用绝对引用,例如"$A$1:$B$1"可以避免这种情况。
2、参照单元格,行偏移量,列偏移量 下面代码就是:选取行为A列为1 到 行为A列为productNameArray.length的数据
3、比如productNameArray.length为10 也就是 选取行为A列为1 到 行为A列为10 的数据(也就取到了10个单元格的数据)
4、比如"hidden!$A$1:$B$10"也就是 选取行为A列为1 到 行为B列为10 的数据 (也就是选取到了20个单元格的数据)

// 创建名称,可被其他单元格引用
Name namedCell = workbook.createName();
namedCell.setNameName("hidden");
// 设置名称引用的公式
namedCell.setRefersToFormula("hidden!$A$1:$A$" + productNameArray.length);
//加载数据,将名称为hidden的sheet中的数据转换为List形式
DVConstraint constraint = DVConstraint.createFormulaListConstraint("hidden");// 设置第一列的3-65534行为下拉列表
// (3, 65534, 0, 0) ====> (起始行,结束行,起始列,结束列)
CellRangeAddressList regions = new CellRangeAddressList(3, 65534, 0, 0);
// 将设置下拉选的位置和数据的对应关系 绑定到一起
DataValidation dataValidation = new HSSFDataValidation(regions, constraint);//将第二个sheet设置为隐藏
workbook.setSheetHidden(1, true);
//将数据赋给下拉列表
sheet.addValidationData(dataValidation);
//最后将文件导出就可以了,后面的代码就不写了,我只写一些这个问题相关的代码

POI导出Excel时下拉列表值超过255的问题(String literals in formulas can‘t be bigger than 255 characters ASCII)相关推荐

  1. java导出excel下拉长度过长,以及多个下拉的实现方法:String literals in formulas can’t be bigger than 255 characters ASCII

    1.解决长度255问题 最近在项目中用到poi生成excel文件,其中需要将某一列限定为特定的值 原始的方法为: private static HSSFDataValidation getDataVa ...

  2. java 导出 excel “String literals in formulas can‘t be bigger than 255 characters ASCII“ 问题

    在 java中当导出的excel数据存在下拉框的时,在下拉框的数据长度较小的情况下可以使用简单的下拉框导出模式 private void createDropDownList(final HSSFWo ...

  3. Easy Poi 解决 String literals in formulas can‘t be bigger than 255 characters ASCII

    工具类 包括了解决带下拉值 超过255 的方法 下面会详细介绍 import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.aftertu ...

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

    最近在项目中用到poi生成excel文件,其中需要将某一列限定为特定的值 原始的方法为: private static HSSFDataValidation getDataValidationList ...

  5. Java POI导出Excel时,合并单元格没有边框的问题

    今天用POI导出Excel的时候,发现导出的单元格确少边框,最后发现有2个方案可以解决. 方案一 CellRangeAddress的4个参数分别表示:起始行号,终止行号, 起始列号,终止列号 // 使 ...

  6. JAVA POI 导出EXCEL时,EXCEL模板中的公式无效问题

    JAVA POI 出力EXCEL时,EXCEL模板中的公式无效问题 工作中遇到一个问题. EXCEL模板有两个sheet,画面内容要导出到第二个sheet中,第一个sheet设置公式,读取第二个she ...

  7. poi导出excel时带有超链接

    两种方式,第一种适合xls,不过当数据量超出五百条后,超链接的样式会不起作用. 第二种比较适合xlsx 两种方式都会或多或少有问题,大家在用的时候需要根据自身情况进行选择和调整, 第一种方式 pack ...

  8. SpringBoot中使用POI导出Excel时怎样循环数据库数据赋值

    场景 SpringBoot中使用POI实现自定义Excel布局式导出: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/894977 ...

  9. java导出的excel数字过长_用POI导出excel时,较长的数字不想被自动变为科学计数法的解决方式(转)...

    做过很多次导出excel了.都碰到一个问题,内容里如果包含一个比较长的数字,比如订单号"2546541656596",excel会自动变成科学计数法... 弄过好几次都没有解决,最 ...

最新文章

  1. centos7.0 docker安装部署
  2. matlab如何进对图像进行透视变换,在Matlab中实现透视变换的方法 | 学步园
  3. 如何使用Jackson来反序列化对象数组
  4. myeclipse新建映射文件xxx.hbm.xml
  5. 激光振镜误差校正算法C语言,动态聚焦激光振镜扫描系统的误差分析及图形校正算法.pdf...
  6. 网络基础3(IP段格式,UDP数据报格式,TCP数据报格式)
  7. dpkg-buildpackage: error: fakeroot not found, either install the fakeroot
  8. 架构师补给站之EA(企业架构)
  9. python航空订票系统_航空订票系统
  10. python调节电脑音量_python如何调节音量大小
  11. CreateProcess创建新的进程
  12. python打印斐波拉契数列
  13. 黑马程序员——JavaSE之集合框架总结二
  14. 大学都要学计算机吗,大学要买电脑吗?大学生为什么现在都要标配一台笔记本?...
  15. Mac 命令行删除包含文件的文件夹
  16. 万能乘法速算法大全_小学1—6年级必须掌握的数学速算法,超实用!
  17. MSBuild 官方详解
  18. 【考研计网:基础版】第三章:数据链路层
  19. 高考415分能上计算机网络的学校吗,2021高考415分能上什么学校 可以报哪些学校...
  20. Python毕业设计 二手房数据分析与可视化 - 大数据 网络爬虫

热门文章

  1. 李开复 给地震孩子们的一封信
  2. RabbitMQ学习篇——(二)Rabbit安装完后,启动出现闪退问题解决!
  3. EasyExcel 导入
  4. 专访车慧总裁刘琦:大数据时代的汽车营销才刚刚开始
  5. EOMS 工单监听系统
  6. LTE-LTE系统内切换流程分析
  7. java怎么调用dubbed_Java Stanford NLP: Part of Speech labels?
  8. gif动画修改_如何更改动画GIF速度
  9. springboot微信sdk方式进行微信支付
  10. imx6q android jni,Android 显示系统:飞思卡尔平台图形界面与GPU硬件加速