1.问题描述
工作中遇到需要使用Java poi读写Excel文件的问题,因为需求中有要求在写文件时创建下拉选择框。按照传统的直接使用List集合保存下拉选择框的选项,再通过poi本身的方法将选择框的选项添加到下拉框中。
一开始编写demo测试时只有几个选项,可以正确的添加下拉框。后来把方法搬到项目中,发现创建的文件中的下拉框的选项数据不能正确的显示。通过对比两个文件,发现唯一的不同点就是下拉框选项的数量存在差异。通过一番查询,发现poi添加下拉框选项的数量被控制在20个以内(官方说法好像是256个字节?记不太清楚了,如果说错了,请大佬批评指正orz)。
2.选项数量(<=20)较少的方法
-
向Excel中写数据,简单样例
/** * 将lines的内容写入excel中 * * @param outputPath excel存放路径 * @param lines 需要写入execl的文件 * @throws IOException */ public synchronized void writeInExcel(String outputPath, Collection<String[]> lines) throws IOException { @SuppressWarnings("resource") Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet(); // 写入Excel表格开头 Row firstRow = sheet.createRow(0); ArrayList<String> arrayList = new ArrayList<String>(); String[] excelHeadList = { "a","b","c","d","e"}; for (int i = 0; i < excelHeadList.length; i++) { arrayList.add(excelHeadList[i]); } String[] arr = new String[arrayList.size()]; for (int i = 0; i < arrayList.size(); i++) { arr[i] = arrayList.get(i); } writeInRow(firstRow, arr); if (lines != null && lines.size() > 0) { // 写入Excel表格内容 AtomicInteger i = new AtomicInteger(1); lines.forEach(line -> { Row row = sheet.createRow(i.get()); writeInRow(row, line); i.set(i.incrementAndGet()); }); DataValidationHelper helper = sheet.getDataValidationHelper(); // 创建审核结果下拉框 createDropDownBox(sheet, helper, checkResultList, 1, i.get() - 1, arr.length - 6, arr.length - 6); }