使用Apache POI删除HSSF表的数据验证

时间:2015-01-15 11:32:15

标签: java excel apache

如何使用apache POI删除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   

2 个答案:

答案 0 :(得分:1)

我不得不删除/编辑工作表内的DataValidation,并且在任何地方都找不到答案,这就是我所做的。 (使用apache-poi:3.14)

首先,除了阅读问题外,您不应使用此方法:

CREATE TABLE tt_content (
    ext_field1 varchar(22) DEFAULT '' NOT NULL,
    ext_field2 varchar(22) DEFAULT '' NOT NULL,
);

它总是发送DataValidation的副本,因此对其进行编辑将无济于事。

我必须这样做:

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tt_content', [
    'ext_field1' => [
        'exclude' => 0,
        'label' => 'Label 1',
        'config' => [
            'type' => 'input',
        ],
    ],
    'ext_field2' => [
        'exclude' => 0,
        'label' => 'Label 2',
        'config' => [
            'type' => 'input',
        ],
    ],
]);

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette(
    'tt_content',
    'headers',
    '--linebreak--,ext_field1,ext_field2',
    'after:header_link'
);

然后,您将可以使用get / set / remove方法从此处编辑或删除DataValidation。

致谢。

答案 1 :(得分:0)

包括下拉列表分隔符在内的字符总数不得超过256个字符。这是Excel的局限性。 如果下拉菜单中包含更多字符,则可以使用参考表填充下拉菜单中的数据。