poi导入数据到excel模版 如何选择下拉列表的值(数据有效性)

isme007 发布于 2015/08/26 12:20
阅读 1K+
收藏 1
POI
 

从数据库中导入数据到 现有的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能正常显示

求教大神们 poiexcel模版写数据时 碰到 有下拉列表(数据有效性)的单元格,代码中应该如何设置才能将数据正常导入并显示?

加载中
0
Ken5233
Ken5233
你的需求已经非常明确了,只是往一个模板文件中写入数据(这个是POI擅长的)。怀疑是否你的写入方法有误以及序列化文件时是否有问题?我一般这样:HSSFRow row = HSSFCellUtil.getRow(rowNum, sheet);
HSSFCellUtil.getCell(row, 0).setCellValue("汉族"); sheet.getWorkbook().write(output);
Ken5233
Ken5233
回复 @isme007 : 我猜你用 row.getCell 与 工具方法获取的区别在于,工具方法会在获取时判断要获取的对象是否为空若成立则create一个。自己看下源代码方法实现就好。你可以debug一下 row.getCell 是否为空?我建议像这种模板类型的POI写入,事先设定模板文件为无限行,然后再截取行(poi.breakrow).
i
isme007
测试发现问题的关键就在于cell的获取方式 (1)HSSFCell cell= row.getcell(2) (2)HSSFCell cell= HSSFCellUtil.getCell(row,2) 用第一种方式获取cell然后setCellValue("汉族") 导出后会错误 用第二种则不会,具体有什么不同就不清楚了
i
isme007
HSSFCellUtil.getCell(row, 2).setCellValue("汉族"); 跟如下方式 有什么区别吗? HSSFCell cell = row.getCell(2); cell.setCellValue("汉族");
i
isme007
3q,用你说的这种写法,能正常写入下拉列表的值了
返回顶部
顶部