下拉列表在“导出到Excel”中超过50行时验证不起作用

问题描述 投票:1回答:1

我正在使用apache poi jar(poi-ooxml-3.9.jar)生成Excel文件(.xlsx),我在excel文件中添加了10列的下拉列表验证,如果我生成包含50行的Excel文件,则下拉验证正在运行。如果它超过50行,则下拉验证不会出现在Excel文件中,当我打开excel文件时,我收到消息“我们发现fileName.xlsx中的某些内容有问题。你想让我们尝试尽可能多地恢复?如果您信任此工作簿的来源,请单击“是”。单击是时,它将删除所有下拉列表验证。请解决此问题的解决方案。

apache-poi excel-2010 worksheet-function xssf
1个回答
2
投票

不要为每个单个单元格创建DataValidationConstraint,而只为每个需要的变化列表创建DataValidation。然后创建DataValidationConstraint使用那些CellRangeAddressList连续import java.io.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; class DataValidationList { public static void main(String[] args) throws Exception { Workbook workbook = new XSSFWorkbook(); // or new HSSFWorkbook Sheet sheet = workbook.createSheet("Data Validation"); DataValidationHelper dvHelper = sheet.getDataValidationHelper(); for (int col = 0; col < 10; col++) { DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint( new String[]{"Col "+(col+1)+" one","Col "+(col+1)+" two","Col "+(col+1)+" three"}); CellRangeAddressList addressList = new CellRangeAddressList(0, 9999, 0, col); DataValidation validation = dvHelper.createValidation( dvConstraint, addressList); if(validation instanceof XSSFDataValidation) { validation.setSuppressDropDownArrow(true); validation.setShowErrorBox(true); } else { validation.setSuppressDropDownArrow(false); } sheet.addValidationData(validation); } String filename; if(workbook instanceof XSSFWorkbook) { filename = "DataValidationList.xlsx"; } else { filename = "DataValidationList.xls"; } FileOutputStream out = new FileOutputStream(filename); workbook.write(out); out.close(); workbook.close(); } } 尽可能大,也不是所有的单个细胞。

示例为第1行到第10000行中的第1列到第10列创建了十个不同的列表验证。

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.