poi导入数据到excel模版 如何选择下拉列表的值(数据有效性)
从数据库中导入数据到 现有的excel模版 并从浏览器输出下载
excel模版中有的列是下拉列表(即设置了数据有效性)如图
代码如下
myout=response.getOutputStream();
//读出文件到i/o流
InputStream fis = blob.getBinaryStream();//模版文件保存在数据库中
HSSFWorkbook workbook = new HSSFWorkbook(fis);
HSSFSheet sheet= workbook.getSheet("Sheet1");
HSSFRow row = sheet.getRow(1);
HSSFCell cell = row.getCell(2);
cell.setCellValue("汉族");//设置单位格类容为汉族
输出后的excel文件 报格式错误
点击是后文件是空的
正常的exce文件应该是这样
设置这种带数据有效性的列就会出现上面那样的情况,入若只设置普通单位格 则导出后的excel能正常显示
求教大神们 用poi往excel模版写数据时 碰到 有下拉列表(数据有效性)的单元格,代码中应该如何设置才能将数据正常导入并显示?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
3q,用你说的这种写法,能正常写入下拉列表的值了
HSSFCellUtil.getCell(row, 2).setCellValue("汉族"); 跟如下方式 有什么区别吗? HSSFCell cell = row.getCell(2); cell.setCellValue("汉族");
测试发现问题的关键就在于cell的获取方式 (1)HSSFCell cell= row.getcell(2) (2)HSSFCell cell= HSSFCellUtil.getCell(row,2) 用第一种方式获取cell然后setCellValue("汉族") 导出后会错误 用第二种则不会,具体有什么不同就不清楚了
回复
我猜你用 row.getCell 与 工具方法获取的区别在于,工具方法会在获取时判断要获取的对象是否为空若成立则create一个。自己看下源代码方法实现就好。你可以debug一下 row.getCell 是否为空?我建议像这种模板类型的POI写入,事先设定模板文件为无限行,然后再截取行(poi.breakrow).
你的需求已经非常明确了,只是往一个模板文件中写入数据(这个是POI擅长的)。怀疑是否你的写入方法有误以及序列化文件时是否有问题?我一般这样:HSSFRow row = HSSFCellUtil.getRow(rowNum, sheet);
HSSFCellUtil.getCell(row, 0).setCellValue("汉族"); sheet.getWorkbook().write(output);