zoukankan      html  css  js  c++  java
  • 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);
    	}
    
  • 相关阅读:
    Maven:mvn 命令的基本使用
    Java:SPI机制
    Bootstrap3 排版-内联文本元素
    Bootstrap3 排版-页面主体
    Bootstrap3 排版-标题
    Bootstrap3 栅格系统-Less mixin 和变量
    Bootstrap3 栅格系统-列排序
    Bootstrap3 栅格系统-嵌套列
    Bootstrap3 栅格系统-列偏移
    Bootstrap3 栅格系统-实例:响应列重置(Responsive column resets)
  • 原文地址:https://www.cnblogs.com/wsygdb/p/9670234.html
Copyright © 2011-2022 走看看