Apache poi实现excel相同列合并
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache poi实现excel相同列合并相关的知识,希望对你有一定的参考价值。
参考技术A 这里只做工作上的记录这里有一个坑就是相同的数据必须相邻,这样才能合并
POI实现excel的数据验证
目录
前言
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
实际开发中,用POI来读写excel文档的比较多。所以,这里记录下用POI读取excel文档的一些难点做下记录。
难点1:合并单元格
在实际开发中,有时会遇到如图示例,需要按照如图所示进行导出excel文件。这就涉及到了合并单元格和给单元格赋值的问题。
代码实现策略:
step 1: 合并单元格
eventSheet.addMergedRegion(new CellRangeAddress(lineNum, fields.size() + lineNum - 1, 1, 1));
step 2: 给单元格赋值
按照正常给单元格赋值即可,只是在合并的单元格第一行赋值就行,不用重复赋值;
cell = row.createCell((short) 1);
cell.setCellValue(eventVO.getEventId());
cell.setCellStyle(align_center_style);
难点2:数据验证-下拉框
在导出excel文件时,需要添加数据验证的下拉框。如图:
代码实现策略:
step 1:设置需要进行数据验证的单元格范围和可供选择的值
/**
* 设置 excel数据验证
*
* @param firstRow
* @param firstCol
* @param endRow
* @param endCol
* @param strList 可供选择的值
* @return
* @since @ 2018年3月14日
*/
XSSFDataValidation getDataValidationList(XSSFSheet sheet, short firstRow, short firstCol, short endRow, short endCol, List<String> strList) {
String[] datas = strList.toArray(new String[0]);
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper
.createExplicitListConstraint(datas);
CellRangeAddressList addressList = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);
return validation;
}
step 2:给当前sheet添加数据验证
sheet.addValidationData(line2ValidationList);
难点3:数据验证-某列保证唯一性
有时候在excel文件的某列添加数据时,需要保证某列的数据唯一。这就需要使用excel的数据验证-自定义,设置为:=COUNTIF($B$2:B2,B2)=1(说明:从B2开始,B列的数据保证唯一,若是重复会给出提示,不能保存)
代码实现策略:
step 1:设置需要进行数据验证的单元格范围
public static XSSFDataValidation getDataValidationCustomFormula(XSSFSheet sheet, short firstRow, short firstCol, short endRow, short endCol, String formula) {
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper
.createCustomConstraint(formula);
CellRangeAddressList addressList = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);
validation.createErrorBox("Error", "Repeating Date.");
validation.setShowErrorBox(true);
validation.setEmptyCellAllowed(true);
validation.setSuppressDropDownArrow(true);
validation.setShowPromptBox(true);
validation.setErrorStyle(DataValidation.ErrorStyle.STOP);
return validation;
}
step 2:给当前sheet添加数据验证
XSSFDataValidation dataValidation = XX.getDataValidationCustomFormula((XSSFSheet) eventSheet, (short) 1, (short) 1, (short) (lineNum + 5), (short) 1, "=COUNTIF($B$2:B2,B2)=1");
if (dataValidation != null) {
eventSheet.addValidationData(dataValidation);
}
以上是关于Apache poi实现excel相同列合并的主要内容,如果未能解决你的问题,请参考以下文章