精华内容
下载资源
问答
  • poi功能很强大,这里用来实现一个excel级联的下拉框 package poiExcel; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; ...

    poi功能很强大,这里用来实现一个excel级联的下拉框

    package poiExcel;
    
    import org.apache.poi.hssf.usermodel.*;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.ss.util.CellRangeAddressList;
    import org.junit.Test;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Arrays;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @Author : haojiangtao
     * @Description :
     * @Date : 14:20 2019/11/14
     * @Modify :
     **/
    public class MyExcel {
        private static final String PRICE_SHEET_NAME = "PRICE_SHEET_NAME";
    
        private static final String MODEL_TYPE_SHEET_NAME = "MODEL_TYPE_SHEET_NAME";
    
        private static final int XLS_MAX_ROW = 65535; //0开始
    
        @Test
        public void cascadeExcel() {
            List<String> headers = Arrays.asList("耗材类型", "品牌型号", "数量", "价格");
            List<Integer> priceList = Arrays.asList(50, 100, 1000, 1200);
            List<String> typeList = Arrays.asList("鼠标", "键盘", "电脑");
            Map<String, List<String>> typeModelMap = new HashMap<>();
            typeModelMap.put("鼠标", Arrays.asList("雷蛇鼠标", "赛睿鼠标", "樱桃鼠标"));
            typeModelMap.put("键盘", Arrays.asList("87键盘", "104键盘"));
            typeModelMap.put("电脑", Arrays.asList("惠普", "戴尔"));
            MyExcel.createStoreInExcelTemplate("f:/类型型号.xls", headers,
                    priceList, typeList, typeModelMap);
        }
    
        private static void createStoreInExcelTemplate(String filePath, List<String> headers, List<Integer> priceList,
                                                       List<String> typeList, Map<String, List<String>> typeModelMap) {
            FileOutputStream out = null;
            File file;
            try {
                //指定文件
                file = new File(filePath);
                //文件流
                out = new FileOutputStream(file);
                //工作簿
                HSSFWorkbook wb = new HSSFWorkbook();
                HSSFSheet mainSheet = wb.createSheet("sheet1");
                //将存储下拉框数据的sheet隐藏
                //wb.setSheetHidden(2, true);
                HSSFSheet typeModelSheet = wb.createSheet("sheet2");
                HSSFSheet priceSheet = wb.createSheet("sheet3");
                //初始化表头数据
                initHeaders(wb, mainSheet, headers);
                //价格下拉框,类型型号下拉框
                initPrice(wb, priceSheet, priceList);
                initTypeAndModel(wb, typeModelSheet, typeList, typeModelMap);
                //在主sheet里面设置下拉框校验
                initSheetNameMapping(mainSheet);
                //在主sheet里面设置数量校验
                initCount(mainSheet);
                out.flush();
                wb.write(out);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        /**
         * 初始化表头
         *
         * @param wb
         * @param mainSheet
         * @param headers
         */
        private static void initHeaders(HSSFWorkbook wb, HSSFSheet mainSheet, List<String> headers) {
            //表头样式,居中加粗
            HSSFCellStyle style = wb.createCellStyle();
            boldStyle(wb, centerStyle(style));
    
            //生成sheet1内容,第一个sheet的第一行为标题
            HSSFRow rowFirst = mainSheet.createRow(0);
            //冻结第一行
            mainSheet.createFreezePane(0, 1, 0, 1);
            //写标题
            for (int i = 0; i < headers.size(); i++) {
                HSSFCell cell = rowFirst.createCell(i); //获取第一行的每个单元格
                mainSheet.setColumnWidth(i, 4000); //设置每列的列宽
                cell.setCellStyle(style); //加样式
                cell.setCellValue(headers.get(i)); //往单元格里写数据
            }
        }
    
        /**
         * 居中
         *
         * @param cellStyle
         * @return
         */
        public static CellStyle centerStyle(CellStyle cellStyle) {
            // 创建一个居中格式
            cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            return cellStyle;
        }
    
        /**
         * 加粗
         *
         * @param workbook
         * @param cellStyle
         * @return
         */
        public static CellStyle boldStyle(Workbook workbook, CellStyle cellStyle) {
            Font fontStyle = workbook.createFont();
            fontStyle.setFontName("微软雅黑");
            fontStyle.setFontHeightInPoints((short) 12);
            fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            cellStyle.setFont(fontStyle);
            return cellStyle;
        }
    
        /**
         * 设置价格下拉框1.设置值 2.设置下拉框
         *
         * @param wb
         * @param priceSheet
         * @param priceList
         */
        private static void initPrice(HSSFWorkbook wb, HSSFSheet priceSheet, List<Integer> priceList) {
            writePrice(wb, priceSheet, priceList);
            initPriceNameMapping(wb, priceSheet.getSheetName(), priceList.size());
        }
    
        /**
         * 设置价格下拉框1.设置值
         *
         * @param wb
         * @param priceSheet
         * @param priceList
         */
        private static void writePrice(HSSFWorkbook wb, HSSFSheet priceSheet, List<Integer> priceList) {
            for (int i = 0; i < priceList.size(); i++) {
                HSSFRow row = priceSheet.createRow(i);
                HSSFCell cell = row.createCell(0);
                cell.setCellValue(priceList.get(i));
            }
        }
    
        /**
         * 设置价格下拉框2.设置下拉框
         *
         * @param workbook
         * @param sheetName
         * @param priceCount
         */
        private static void initPriceNameMapping(HSSFWorkbook workbook, String sheetName, int priceCount) {
            Name name = workbook.createName();
            name.setNameName(PRICE_SHEET_NAME);
            name.setRefersToFormula(sheetName + "!$A$1:$A$" + priceCount);
        }
    
        /**
         * 设置类型型号级联下拉框 1.设置类型值 2.设置型号下拉框 3.设置类型级联下拉框
         *
         * @param workbook
         * @param tmSheet
         * @param typeList
         * @param typeModelMap
         */
        private static void initTypeAndModel(HSSFWorkbook workbook, HSSFSheet tmSheet,
                                             List<String> typeList, Map<String, List<String>> typeModelMap) {
            writeTypes(workbook, tmSheet, typeList);
            writeModels(workbook, tmSheet, typeList, typeModelMap);
            initTypeNameMapping(workbook, tmSheet.getSheetName(), typeList.size());
        }
    
        /**
         * 设置类型型号级联下拉框 1.设置类型值
         *
         * @param workbook
         * @param modelTypeSheet
         * @param typeList
         */
        private static void writeTypes(HSSFWorkbook workbook, HSSFSheet modelTypeSheet, List<String> typeList) {
            HSSFRow row = modelTypeSheet.getRow(0) == null ? modelTypeSheet.createRow(0)
                    : modelTypeSheet.createRow(0);
            HSSFCellStyle cellStyle = workbook.createCellStyle();
            boldStyle(workbook, cellStyle);
            //if (CollectionUtils.isNotEmpty(modelList)) {
            if (null != typeList) {
                for (int i = 0; i < typeList.size(); i++) {
                    HSSFCell cell = row.getCell(i) == null ? row.createCell(i) : row.getCell(i);
                    cell.setCellValue(typeList.get(i));
                    cell.setCellStyle(cellStyle);
                }
            }
        }
    
        /**
         * 设置类型型号级联下拉框 2.设置型号下拉框
         *
         * @param workbook
         * @param tmSheet
         * @param typeList
         * @param typeModelMap
         */
        private static void writeModels(HSSFWorkbook workbook, HSSFSheet tmSheet,
                                        List<String> typeList, Map<String, List<String>> typeModelMap) {
            for (int i = 0; i < typeList.size(); i++) {
                String typeName = typeList.get(i);
                List<String> modelList = typeModelMap.get(typeName);
                //if (CollectionUtils.isNotEmpty(modelList)) {
                if (null != modelList) {
                    for (int j = 0; j < modelList.size(); j++) {
                        HSSFRow row = tmSheet.getRow(j + 1) == null ? tmSheet.createRow(j + 1)
                                : tmSheet.getRow(j + 1);
                        HSSFCell cell = row.getCell(i) == null ? row.createCell(i) : row.getCell(i);
                        cell.setCellValue(modelList.get(j));
                    }
                }
                initModelNameMapping(workbook, tmSheet.getSheetName(), typeName, i, modelList.size());
            }
        }
    
    
        private static void initModelNameMapping(HSSFWorkbook workbook, String tmSheetName,
                                                 String typeName, int referCol, int modelCount) {
            Name name = workbook.createName();
            name.setNameName(typeName);
            //modelCount + 1 = modelCount + 2 -1
            name.setRefersToFormula(tmSheetName + "!$" + getColumnName(referCol) +
                    "$2:$" + getColumnName(referCol) + "$" + (modelCount + 1));
        }
    
        /**
         * 3.设置类型级联下拉框
         *
         * @param workbook
         * @param tmSheetName
         * @param typeCount
         */
        private static void initTypeNameMapping(HSSFWorkbook workbook, String tmSheetName, int typeCount) {
            Name name = workbook.createName();
            name.setNameName(MODEL_TYPE_SHEET_NAME);
            name.setRefersToFormula(tmSheetName + "!$A$1:$" + getColumnName(typeCount - 1) + "$1");
        }
    
        /**
         * 转换为A,B,C,D的列
         * @param index
         * @return
         */
        public static String getColumnName(int index) {
            StringBuilder s = new StringBuilder();
            while (index >= 26) {
                s.insert(0, (char) ('A' + index % 26));
                index = index / 26 - 1;
            }
            s.insert(0, (char) ('A' + index));
            return s.toString();
        }
    
        /**
         * 在主sheet里面设置
         *
         * @param sheet
         */
        private static void initSheetNameMapping(HSSFSheet sheet) {
            DataValidation typeValidation = getDataValidationByFormula(MODEL_TYPE_SHEET_NAME, 0);
    
            DataValidation shelfValidation = getDataValidationByFormula("INDIRECT($A1)", 1);
            DataValidation priceValidation = getDataValidationByFormula(PRICE_SHEET_NAME, 3);
            // 主sheet添加验证数据
            sheet.addValidationData(typeValidation);
            sheet.addValidationData(shelfValidation);
            sheet.addValidationData(priceValidation);
        }
    
        public static DataValidation getDataValidationByFormula(String formulaString, int columnIndex) {
            // 加载下拉列表内容
            DVConstraint constraint = DVConstraint.createFormulaListConstraint(formulaString);
            // 设置数据有效性加载在哪个单元格上。
            // 四个参数分别是:起始行、终止行、起始列、终止列
            CellRangeAddressList regions = new CellRangeAddressList(1, XLS_MAX_ROW, columnIndex, columnIndex);
            // 数据有效性对象
            DataValidation dataValidationList = new HSSFDataValidation(regions, constraint);
            dataValidationList.createErrorBox("Error", "请选择或输入有效的选项,或下载最新模版重试!");
            String promptText = initPromptText(columnIndex);
            dataValidationList.createPromptBox("", promptText);
            return dataValidationList;
        }
    
        private static DataValidation getDecimalValidation(int firstRow, int lastRow, int columnIndex) {
            // 创建一个规则:>0的整数
            DVConstraint constraint = DVConstraint.createNumericConstraint(DVConstraint.ValidationType.INTEGER, DVConstraint.OperatorType.GREATER_OR_EQUAL, "0", "0");
            // 设定在哪个单元格生效
            CellRangeAddressList regions = new CellRangeAddressList(firstRow, lastRow, columnIndex, columnIndex);
            // 创建规则对象
            HSSFDataValidation decimalVal = new HSSFDataValidation(regions, constraint);
            decimalVal.createPromptBox("", initPromptText(columnIndex));
            decimalVal.createErrorBox("输入值类型或大小有误!", "数值型,请输入大于0 的整数。");
            return decimalVal;
        }
    
        private static String initPromptText(int columnIndex) {
            String promptText = "";
            switch (columnIndex) {
                case 1:
                    promptText = "请下拉选择或输入有效项!且先选择类型!";
                    break;
                case 3:
                    promptText = "请输入大于0的整数!";
                    break;
            }
            return promptText;
        }
    
        /**
         * 在主sheet中校验数量
         * @param mainSheet
         */
        private static void initCount(HSSFSheet mainSheet) {
            DataValidation quantityValidation = getDecimalValidation(1, XLS_MAX_ROW, 2);
            mainSheet.addValidationData(quantityValidation);
        }
    
    }
    
    

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • 导出级联Excel代码

    2018-09-27 11:50:26
    通过poi实现Excel模版级联导出,这个项目为简单的一个maven工程,在ImportExcelDemo这个类中通过Junit测试功能。
  • excel级联菜单生成

    2014-03-07 19:12:41
    excel功能强大,可以做级联菜单功能。适用于web项目导入exel文件。
  • excel 级联

    2014-12-09 16:37:39
    下面利用我学到的一点东西,做一个简单的excel级联下拉菜单。因为只学了一点,所以算是比较简单的。 最终完成的文件可在此处下载:点击下载 1.准备数据 利用如下数据,将制作一个简单的“国家”-》“城市”-》...

    Excel2007制作简单级联下拉框

    content为了准备毕设论文,利用周末学了点office word的排版,顺便也看了点excel的功能。下面利用我学到的一点东西,做一个简单的excel级联下拉菜单。因为只学了一点,所以算是比较简单的。 最终完成的文件可在此处下载:点击下载

    1.准备数据

    利用如下数据,将制作一个简单的“国家”-》“城市”-》“市区”的级联。 

    2.创建名称

    选中A1-A6,然后在选项卡“公式”中点击“根据所选内容创建”。  然后在弹出框中作如下选择,点击“确定”。  最后,对其他列做如上的同样的操作(可以用套用表格格式来做较简单,此处数据量不大,便不再介绍)。完成对所有的操作之后,点击“公式”选项卡里的“名称管理器”。  之后应该能看到如下图。 

    3.进行级联

    选择任一个空格(本次选择G1),然后在“数据”选项卡点击“数据有效性”-》“数据有效性”,如下图。  之后在弹出框中作如下填写。  然后对H1格做同上的操作,在弹出框中做如下填写。  然后对I1格做同上的操作,在弹出框中做如下填写。  至此完成了所有的操作,一个最简单的级联便制作出来了! 

    展开全文
  • POI实现导出Excel级联操作

    千次阅读 2016-12-17 15:01:19
    百度经验关于Eecel怎么设置级联下拉的设置http://jingyan.baidu.com/article/afd8f4de98dad134e286e9a9.html package com.test; import java.io.FileOutputStream; import java.util.HashMap; import ...
    
    
    百度经验关于Eecel怎么设置级联下拉的设置
    http://jingyan.baidu.com/article/afd8f4de98dad134e286e9a9.html
    
    
    
    
    
    
    
    
    
    
    
    package com.test;
    
    import java.io.FileOutputStream;
    import java.util.HashMap;
    
    import org.apache.poi.hssf.usermodel.DVConstraint;
    import org.apache.poi.hssf.usermodel.HSSFDataValidation;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellStyle;
    import org.apache.poi.ss.usermodel.DataValidation;
    import org.apache.poi.ss.usermodel.Font;
    import org.apache.poi.ss.usermodel.IndexedColors;
    import org.apache.poi.ss.usermodel.Name;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.ss.util.CellRangeAddressList;
    
    public class POICascadeTest {
    	
    	 private static String EXCEL_HIDE_SHEET_NAME = "excelhidesheetname";   
    	    private static String HIDE_SHEET_NAME_SEX = "sexList";     
    	    private static String HIDE_SHEET_NAME_PROVINCE = "provinceList";    
    	  
    	    private HashMap map = new HashMap();  
    	    //设置下拉列表的内容     
    	    private static String[] sexList = {"男","女"};     
    	    private static String[] provinceList = {"浙江","山东","江西","江苏","四川"};       
    	    private static String[] zjProvinceList = {"浙江","杭州","宁波","温州"};     
    	    private static String[] sdProvinceList = {"山东","济南","青岛","烟台"};     
    	    private static String[] jxProvinceList = {"江西","南昌","新余","鹰潭","抚州"};     
    	    private static String[] jsProvinceList = {"江苏","南京","苏州","无锡"};    
    	    private static String[] scProvinceList = {"四川","成都","绵阳","自贡"};   
    	      
    	    public static void main(String[] args) {  
    	        //使用事例  
    	        Workbook wb = new HSSFWorkbook();  
    	        
    	        // 创建标题栏
    	        createExcelMo(wb);  
    	        
    	        //创建隐藏的Sheet页
    	        creatExcelHidePage(wb);     
    	        
    	        //数据验证
    	        setDataValidation(wb);   
    	        
    	        
    	        FileOutputStream fileOut;  
    	        try {  
    	            fileOut = new FileOutputStream("f://excel_template.xls");  
    	            wb.write(fileOut);     
    	            fileOut.close();  
    	        } catch (Exception e) {   
    	            e.printStackTrace();  
    	        }     
    	    }  
    	    public static void  createExcelMo(Workbook wb){  
    	            Sheet sheet = wb.createSheet("用户分类添加批导");     
    	            // Create a row and put some cells in it. Rows are 0 based.     
    	            Row row = sheet.createRow(0);     
    	            Cell cell = row.createCell(0);     
    	            cell.setCellValue("手机号码");     
    	            cell.setCellStyle(getTitleStyle(wb));     
    	            cell = row.createCell(1);     
    	            cell.setCellValue("所属父类");     
    	            cell.setCellStyle(getTitleStyle(wb));     
    	            cell = row.createCell(2);     
    	            cell.setCellValue("所属子类");     
    	            cell.setCellStyle(getTitleStyle(wb));     
    	            cell = row.createCell(3);     
    	    }   
    	    /**   
    	     * 设置模板文件的横向表头单元格的样式   
    	     * @param wb   
    	     * @return   
    	     */    
    	    private static CellStyle getTitleStyle(Workbook wb){     
    	        CellStyle style = wb.createCellStyle();     
    	        //对齐方式设置     
    	        style.setAlignment(CellStyle.ALIGN_CENTER);     
    	        //边框颜色和宽度设置     
    	        style.setBorderBottom(CellStyle.BORDER_THIN);     
    	        style.setBottomBorderColor(IndexedColors.BLACK.getIndex());     
    	        style.setBorderLeft(CellStyle.BORDER_THIN);     
    	        style.setLeftBorderColor(IndexedColors.BLACK.getIndex());     
    	        style.setBorderRight(CellStyle.BORDER_THIN);     
    	        style.setRightBorderColor(IndexedColors.BLACK.getIndex());     
    	        style.setBorderTop(CellStyle.BORDER_THIN);     
    	        style.setTopBorderColor(IndexedColors.BLACK.getIndex());     
    	        style.setFillBackgroundColor(IndexedColors.GREY_25_PERCENT.getIndex());     
    	        //设置背景颜色     
    	        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());     
    	        style.setFillPattern(CellStyle.SOLID_FOREGROUND);     
    	        //粗体字设置     
    	        Font font = wb.createFont();     
    	        font.setBoldweight(Font.BOLDWEIGHT_BOLD);     
    	        style.setFont(font);     
    	        return style;     
    	    }    
    	    /**   
    	     * 设置模板文件的横向表头单元格的样式   
    	     * @param wb   
    	     * @return   
    	     */   
    	    public static void creatExcelHidePage(Workbook workbook){     
    	        Sheet hideInfoSheet = workbook.createSheet(EXCEL_HIDE_SHEET_NAME);//隐藏一些信息     
    	        //在隐藏页设置选择信息     
    	        //第一行设置性别信息     
    	        Row sexRow = hideInfoSheet.createRow(0);     
    	        creatRow(sexRow, sexList);     
    	        //第二行设置省份名称列表     
    	        Row provinceNameRow = hideInfoSheet.createRow(1);     
    	        creatRow(provinceNameRow, provinceList);     
    	        //以下行设置城市名称列表     
    	        Row cityNameRow = hideInfoSheet.createRow(2);     
    	        creatRow(cityNameRow, zjProvinceList);     
    	          
    	        cityNameRow = hideInfoSheet.createRow(3);     
    	        creatRow(cityNameRow, sdProvinceList);     
    	             
    	        cityNameRow = hideInfoSheet.createRow(4);     
    	        creatRow(cityNameRow, jxProvinceList);     
    	             
    	        cityNameRow = hideInfoSheet.createRow(5);     
    	        creatRow(cityNameRow, jsProvinceList);     
    	             
    	        cityNameRow = hideInfoSheet.createRow(6);     
    	        creatRow(cityNameRow, scProvinceList);  
    	        //名称管理     
    	        //第一行设置性别信息     
    	        creatExcelNameList(workbook, HIDE_SHEET_NAME_SEX, 1, sexList.length, false);     
    	        //第二行设置省份名称列表     
    	        creatExcelNameList(workbook, HIDE_SHEET_NAME_PROVINCE, 2, provinceList.length, false);     
    	        //以后动态大小设置省份对应的城市列表     
    	        creatExcelNameList(workbook, provinceList[0], 3, zjProvinceList.length, true);     
    	        creatExcelNameList(workbook, provinceList[1], 4, sdProvinceList.length, true);     
    	        creatExcelNameList(workbook, provinceList[2], 5, jxProvinceList.length, true);     
    	        creatExcelNameList(workbook, provinceList[3], 6, jsProvinceList.length, true);     
    	        creatExcelNameList(workbook, provinceList[4], 7, scProvinceList.length, true);     
    	        //设置隐藏页标志     
    	        workbook.setSheetHidden(workbook.getSheetIndex(EXCEL_HIDE_SHEET_NAME), true);     
    	    }    
    	      
    	    /**   
    	     * 创建一个名称   
    	     * @param workbook   
    	     */    
    	    private static void creatExcelNameList(Workbook workbook,String nameCode,int order,int size,boolean cascadeFlag){     
    	        Name name;     
    	        name = workbook.createName();     
    	        name.setNameName(nameCode);     
    	        name.setRefersToFormula(EXCEL_HIDE_SHEET_NAME+"!"+creatExcelNameList(order,size,cascadeFlag));     
    	    }     
    	      
    	    /**   
    	     * 名称数据行列计算表达式   
    	     * @param workbook   
    	     */    
    	    private static String creatExcelNameList(int order,int size,boolean cascadeFlag){     
    	    	 char start = 'A';     
    	         if(cascadeFlag){     
    	             start = 'B';     
    	             if(size<=25){     
    	                 char end = (char)(start+size-1);     
    	                 return "$"+start+"$"+order+":$"+end+"$"+order;     
    	             }else{     
    	                 char endPrefix = 'A';     
    	                 char endSuffix = 'A';     
    	                 if((size-25)/26==0||size==51){//26-51之间,包括边界(仅两次字母表计算)     
    	                     if((size-25)%26==0){//边界值     
    	                         endSuffix = (char)('A'+25);     
    	                     }else{     
    	                         endSuffix = (char)('A'+(size-25)%26-1);     
    	                     }     
    	                 }else{//51以上     
    	                     if((size-25)%26==0){     
    	                         endSuffix = (char)('A'+25);     
    	                         endPrefix = (char)(endPrefix + (size-25)/26 - 1);     
    	                     }else{     
    	                         endSuffix = (char)('A'+(size-25)%26-1);     
    	                         endPrefix = (char)(endPrefix + (size-25)/26);     
    	                     }     
    	                 }     
    	                 return "$"+start+"$"+order+":$"+endPrefix+endSuffix+"$"+order;     
    	             }     
    	         }else{     
    	             if(size<=26){     
    	                 char end = (char)(start+size-1);     
    	                 return "$"+start+"$"+order+":$"+end+"$"+order;     
    	             }else{     
    	                 char endPrefix = 'A';     
    	                 char endSuffix = 'A';     
    	                 if(size%26==0){     
    	                     endSuffix = (char)('A'+25);     
    	                     if(size>52&&size/26>0){     
    	                         endPrefix = (char)(endPrefix + size/26-2);     
    	                     }     
    	                 }else{     
    	                     endSuffix = (char)('A'+size%26-1);     
    	                     if(size>52&&size/26>0){     
    	                         endPrefix = (char)(endPrefix + size/26-1);     
    	                     }     
    	                 }     
    	                 return "$"+start+"$"+order+":$"+endPrefix+endSuffix+"$"+order;     
    	             }     
    	         }     
    	    }   
    	      
    	    /**   
    	     * 创建一列数据   
    	     * @param currentRow   
    	     * @param textList   
    	     */    
    	    private static void creatRow(Row currentRow,String[] textList){     
    	        if(textList!=null&&textList.length>0){     
    	            int i = 0;     
    	            for(String cellValue : textList){     
    	                Cell userNameLableCell = currentRow.createCell(i++);     
    	                userNameLableCell.setCellValue(cellValue);     
    	            }     
    	        }     
    	    }/**   
    	     * 添加数据验证选项   
    	     * @param sheet   
    	     */    
    	    public static void setDataValidation(Workbook wb){     
    	        int sheetIndex = wb.getNumberOfSheets();     
    	        if(sheetIndex>0){     
    	            for(int i=0;i<sheetIndex;i++){     
    	                Sheet sheet = wb.getSheetAt(i);     
    	                if(!EXCEL_HIDE_SHEET_NAME.equals(sheet.getSheetName())){  
    	                    DataValidation data_validation_list = null;  
    	                    //省份选项添加验证数据      
    	                    for(int a=2;a<3002;a++){  
    	                        data_validation_list = getDataValidationByFormula(HIDE_SHEET_NAME_PROVINCE,a,2);     
    	                        sheet.addValidationData(data_validation_list);     
    	                        //城市选项添加验证数据       
    	                        data_validation_list = getDataValidationByFormula("INDIRECT($B"+(a-1)+")",a,3);     
    	                        sheet.addValidationData(data_validation_list);     
    	                        //性别添加验证数据       
    	                        data_validation_list = getDataValidationByFormula(HIDE_SHEET_NAME_SEX,a,1);     
    	                        sheet.addValidationData(data_validation_list);       
    	                    }  
    	                }     
    	            }     
    	        }     
    	    }    
    	    /**   
    	     * 使用已定义的数据源方式设置一个数据验证   
    	     * @param formulaString   
    	     * @param naturalRowIndex   
    	     * @param naturalColumnIndex   
    	     * @return   
    	     */    
    	    private static DataValidation getDataValidationByFormula(String formulaString,int naturalRowIndex,int naturalColumnIndex){     
    	        //加载下拉列表内容       
    	        DVConstraint constraint = DVConstraint.createFormulaListConstraint(formulaString);      
    	        //设置数据有效性加载在哪个单元格上。       
    	        //四个参数分别是:起始行、终止行、起始列、终止列       
    	        int firstRow = naturalRowIndex-1;     
    	        int lastRow = naturalRowIndex-1;     
    	        int firstCol = naturalColumnIndex-1;     
    	        int lastCol = naturalColumnIndex-1;     
    	        CellRangeAddressList regions=new CellRangeAddressList(firstRow,lastRow,firstCol,lastCol);       
    	        //数据有效性对象      
    	        DataValidation data_validation_list = new HSSFDataValidation(regions,constraint);     
    	        //设置输入信息提示信息     
    	        data_validation_list.createPromptBox("下拉选择提示","请使用下拉方式选择合适的值!");     
    	        //设置输入错误提示信息     
    	        data_validation_list.createErrorBox("选择错误提示","你输入的值未在备选列表中,请下拉选择合适的值!");     
    	        return data_validation_list;     
    	    }     
    	      
    	    private static DataValidation getDataValidationByDate(int naturalRowIndex,int naturalColumnIndex){     
    	        //加载下拉列表内容       
    	        DVConstraint constraint = DVConstraint.createDateConstraint(DVConstraint.OperatorType.BETWEEN,"1900-01-01", "5000-01-01", "yyyy-mm-dd");      
    	        //设置数据有效性加载在哪个单元格上。       
    	        //四个参数分别是:起始行、终止行、起始列、终止列       
    	        int firstRow = naturalRowIndex-1;     
    	        int lastRow = naturalRowIndex-1;     
    	        int firstCol = naturalColumnIndex-1;     
    	        int lastCol = naturalColumnIndex-1;     
    	        CellRangeAddressList regions=new CellRangeAddressList(firstRow,lastRow,firstCol,lastCol);       
    	        //数据有效性对象      
    	        DataValidation data_validation_list = new HSSFDataValidation(regions,constraint);     
    	        //设置输入信息提示信息     
    	        data_validation_list.createPromptBox("日期格式提示","请按照'yyyy-mm-dd'格式输入日期值!");     
    	        //设置输入错误提示信息     
    	        data_validation_list.createErrorBox("日期格式错误提示","你输入的日期格式不符合'yyyy-mm-dd'格式规范,请重新输入!");     
    	        return data_validation_list;     
    	    }      
    }
    

    展开全文
  • excel 级联下拉框用法

    2019-03-26 01:00:45
    NULL 博文链接:https://lihaoxiaocao.iteye.com/blog/1131553
  • excel级联省市区

    2012-11-09 16:55:12
    excel省市区级联的作法,请大家多多指教,下一个版本下次再出
  • Excel多级级联

    2018-09-13 18:09:25
    Excel多级级联 利用Excel的数据有效性做出的一个Demo示例
  • Excel级联操作

    2021-09-22 15:40:37
    excel中创建两个sheet:级联、下拉数据 级联sheet中,添加表头:一级级联、二级级联 制作级联数据 切换到下拉数据,选中其中的数据 选择公式、指定在弹出的框中只选中首行 选择公式、名称管理器在弹出...

    准备

    1. 在excel中创建两个sheet:级联下拉数据

    2. 级联sheet中,添加表头:一级级联二级级联
      级联shee
      下拉数据sheet

    制作级联数据

    1. 切换到下拉数据,选中其中的数据选中级联数据

    2. 选择公式指定在弹出的框中只选中首行添加公式

    3. 选择公式名称管理器在弹出的框中点击新建,在弹出的框中,修改名称:first,点击引用位置后面的按钮,选中第一行,确定关闭名称管理器名称管理器2
      名称管理器3
      名称管理器4

    4. 调整数据,删除名称管理器中各名称的空白项调整数据
      调整数据2

    级联菜单

    1. 切换到级联,选中一级级联下一列及以下列,选中数据有效性,在弹出框中,允许下拉框选择序列,在来源中输出=first
      级联数据
      级联数据2

    2. 一级级联下列中选择一条,选中二级级联下一列及以下列,选中数据有效性,在弹出框中,允许下拉框选择序列,在来源中输入=INDIRECT($A2)(A2可以根据自己设置的列修改)级联数据3
      级联数据4

    完成

    展开全文
  • Excel 制作级联菜单

    千次阅读 2018-08-17 16:15:46
    目的:制作级联菜单 步骤: 1、定义各级菜单及选项如下: 菜单一级: 菜单1,菜单2 菜单二级:  菜单1:菜单1.1,菜单1.2  菜单2:菜单2.1,菜单2.2 菜单三级:  菜单1.1:菜单1.1.1,菜单1.1.2  菜单...
  • 原文:使用NPOI生成Excel级联列表 目录 1概要1 2磨刀不误砍柴工——先学会Excel中的操作2 3利用NPOI生成导入模板7 3.1设置workbook&sheet8 3.2生成数据Sheet,并按规则列好8 3.3添加名称,并指定数据范围(绑定...
  • 大家知道,在Excel中可以通过设置数据的有效性来实现类似于网页表单中的下拉菜单功能,这样可以大大地提高...下面我们就从一个出发,给出在Excel中实现级联菜单的两种方法,希望能给使用Excel进行办公的朋友提供帮助。
  • 通过POI设置Excel级联导出

    千次阅读 2018-09-27 13:16:42
    1:如何通过Excel设置数据级联(包括一级级联、二级级联以及多级级联) 我希望填写者能够按照固定的模式填写性别、省、市,而且市这一列填写内容必须随着省这一列发生动态改变。 Step1: 在当前excel中新建一个sheet...
  • 本文介绍如何在 Excel 中创建两级关联下拉菜单的方法。最终效果动图展示◆◆◆一般步骤及说明1、首先输入数据。2、选中 B4 单元格,点击“数据选项卡/数据工具/数据验证”,如下...
  • Excel的二级级联多级级联的实现 实现步骤: 1.创建一个新的sheet页作为数据来源的sheet 2.以杭州市作为行政区为例,将对应的区街道写入到数据来源sheet中 3.选中需要校验的的列设置数据有效性 4.框选数据来源sheet...
  • poi excel 级联下拉导出

    2019-09-17 01:38:34
    在使用此方法时需要在excel定义好公式,如果有多个级联 在添加验证数据中增加数据有效性即可 setDataValidation方法中 size 表示你要生成多少行数据 /** * 添加数据验证选项 */ private void setDataValidation...
  • Java POI 给excel添加级联下拉框

    千次阅读 2020-04-04 23:27:24
    给自己打个广告,最近弄了个Excel的工具,支持下拉框,级联下拉框,隐藏Sheet,多线程大数据量导出,生产者消费者模式读取,代码大部分都有注释,有兴趣的朋友可以看看,觉得不错可以帮我弄个star什么的???? 实现...
  • C# NPOI 导出Excel模板 下拉框 级联下拉框 级联选择, 导出模板下载 源码在后面,前面稍微说一下咋回事 首先明白Excel 中 的数据引用咋回事,然后知道INDIRECT 这个函数。 自行搜索 我的需求是 设备类型 分为 ...
  • JAVA动态实现Excel三级级联菜单

    千次阅读 2017-08-10 09:50:38
    如何实现如下图所示的Excel三级级联菜单的效果呢? .1 Excel的关键点 .1.1 名称管理器 Excel内置了名称管理器、可以存储类似Java的键值对 如图,名称管理器里面,名称和数值就是键、值的关系,一...
  • 参考博客:https://blog.csdn.net/readiay/article/details/52397419 Apache的相关类的文档说明:... 此博客以省市区为例,展示了下拉列表,有效性验证,级联操作的示例,很详细。 ...
  • java导出excel,选项级联下拉选

    千次阅读 2019-02-14 17:42:08
    // 创建一个excel @SuppressWarnings("resource") Workbook book = new XSSFWorkbook(); // 创建需要用户填写的sheet XSSFSheet sheetPro = (XSSFSheet) book.createSheet("省市县"); Row row0 = ...
  • excel建立下拉列表二级级联

    千次阅读 2016-11-20 18:03:11
    实现excel下拉二级级联效果主要三个步骤: 1.录下拉列表数据 将下拉框的选项全部录到一个单独的表单中(sheet)。 注意:录数据的规则:a.每一列的最上面一行作为一级下拉的选项;b.每一列除了第一行外,其余的都...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,574
精华内容 1,029
关键字:

excel级联