使用apachepoi删除hssf表的数据验证

mbskvtky  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(524)

如何从使用apachepoi中删除excel的数据验证。我有以下代码。在第一次运行时,下拉列表被正确地创建,但是当我用字符串列表中的不同值再次运行程序时,下拉列表不会被更新。

FileInputStream fsIP= new FileInputStream(new File("D:\\template3.xls")); //Read the spreadsheet that needs to be updated              
                HSSFWorkbook wb = new HSSFWorkbook(fsIP); //Access the workbook           
                HSSFSheet worksheet = wb.getSheetAt(0); //Access the worksheet, so that we can update / modify it.
          //     System.out.println(worksheet.getRow(1).getCell(2));
                Cell cell = null; // declare a Cell object                
                DataValidation dataValidation = null;
                DataValidationConstraint constraint = null;
                DataValidationHelper validationHelper = null;
                CellRangeAddressList addressList = new  CellRangeAddressList(0,5,0,5);

                //cell = worksheet.getRow(2).getCell(2);   // Access the second cell in second row to update the value 
                DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(new String[]{"124", "20", "30"});
                  dataValidation = new HSSFDataValidation(addressList, dvConstraint);
                  dataValidation.setSuppressDropDownArrow(false);

                  worksheet.addValidationData(dataValidation);
               // cell.setCellValue("OverRide Last Name");  // Get current cell value value and overwrite the value

                fsIP.close(); //Close the InputStream

                FileOutputStream output_file =new FileOutputStream(new File("D:\\template3.xls"));  //Open FileOutputStream to write updates
                wb.write(output_file); //write changes

               output_file.close();  //close the stream
ycggw6v2

ycggw6v21#

我不得不删除/编辑工作表内的数据验证,但在任何地方都找不到答案,下面是我所做的(使用apache-poi:3.14)
首先,除了阅读方面的考虑,你不应该使用这种方法:

worksheet.getSheet("MySheet").getDataValidations()

它总是发送datavalidation的副本,这样编辑它们就无能为力了。
我不得不这么说:

worksheet.getSheet("MySheet").getCTWorksheet().getDataValidations().getDataValidationList()

然后您就可以使用get/set/remove方法在这里编辑或删除datavalidation。
当做。

hof1towb

hof1towb2#

包含下拉列表分隔符的字符总数不应超过256个字符。这是excel的一个限制。如果下拉列表包含更多字符,则可以使用参考表填充下拉列表中的数据。

相关问题