Gau*_*pta 7 java android apache-poi
我需要在Excel工作表中的特定单元格上创建一个下拉列表(数据验证)并将其读回.
在提供的教程的帮助下Apache POI,我能够在Excel工作表中创建一个下拉列表,但我还需要在再次阅读时阅读下拉列表内容,以便我可以渲染类似的下拉列表在UI上列出.
有什么建议?
我似乎无法在HSSF中找到任何机制来从中检索DataValidations HSSFSheet.所以如果你有一个.xls文件,那你就不走运了.
但是,如果您有.xlsx文件,则XSSFSheet提供一个方法来检索工作表上所有XSSFDataValidations 的列表:getDataValidations,它返回一个List<XSSFDataValidation>.
你需要遍历所有这些,调用regions()以检查CellRangeAddressList它是否适用于你的单元格.如果是,则调用getValidationConstraint以访问该DataValidationConstraint对象,您可以在该对象上调getExplicitListValues用以获取字符串数组.
DataValidation甚至存储在HSSF工作簿中,但它存在于Internal Sheet库中,因为它private不是应用程序员的访问权限.我使用Java Reflection API来访问内部工作表.这段代码对我来说很好.
private ArrayList<DVRecord> init(FileInputStream fis) throws InvalidFormatException, IOException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
HSSFWorkbook hWorkbook = (HSSFWorkbook) WorkbookFactory.create(fis);
HSSFSheet hSheet = hWorkbook.getSheetAt(1); // sheet on which you want to read data validation
Class c = org.apache.poi.hssf.usermodel.HSSFSheet.class;
Field field = c.getDeclaredField("_sheet");
field.setAccessible(true);
Object internalSheet = field.get(hSheet);
InternalSheet is = (InternalSheet) internalSheet;
DataValidityTable dvTable = is.getOrCreateDataValidityTable();
Class c2 = org.apache.poi.hssf.record.aggregates.DataValidityTable.class;
Field field2 = c2.getDeclaredField("_validationList");
field2.setAccessible(true);
Object records = field2.get(dvTable);
ArrayList<DVRecord> dvRecords = (ArrayList<DVRecord>) records;
return dvRecords;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7778 次 |
| 最近记录: |