`

Excel2003和Excel2007对下拉选择和下拉级联选择的操作以及java程序的调用

阅读更多
Excel2007和Excel2003的部分功能菜单有所调整
比如2003的“插入-名称”,在2007中更为到“公式-定义的名称”
比如2003的“插入-名称-指定-首行”,在2007中更为到“公式-定义的名称-根据所选内容创建-首行”

Excel功能点应用:
相对位置和绝对位置,特别在某个行列的数据是参考另外某个行列的数据而变动的,相对位置的表示方法:A8、B9等等,绝对位置的表示方法:$A$8、$B$9(就是使用美元符号$)

隐藏页的数据引用。
2003中,假设sheet1是隐藏页,并先定义好数据(公式-定义的名称→定义;在sheet1中定义数据源名称:省份;引用位置:=Sheet1!$A$1:$A$5),然后在“添加”数据,设置数据的有效性选项(数据-数据有效性-序列;来源填写“=省份”)
2007中,假设sheet1是隐藏页,并先定义好数据(插入→名称→定义;在sheet1中定义数据源名称:省份;引用位置:=Sheet1!$A$1:$A$5),然后在“添加”数据,设置数据的有效性选项(数据-数据有效性-序列;来源填写“=省份”)





package com.fruitking.caipiao;

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.DVConstraint;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.Name;
import org.apache.poi.ss.util.CellRangeAddressList;

public class TestExcelSelect {

	
	 public static void main(String [] args) throws IOException {  
         HSSFWorkbook workbook = new HSSFWorkbook();//excel文件对象  
         HSSFSheet userinfosheet1 = workbook.createSheet("用户信息表-1");//工作表对象
         HSSFSheet userinfosheet2 = workbook.createSheet("用户信息表-2");//工作表对象
         //创建一个隐藏页和隐藏数据集
         TestExcelSelect.creatHideSheet(workbook, "hideselectinfosheet");
         //设置名称数据集
         TestExcelSelect.creatExcelNameList(workbook);
         //创建一行数据
         TestExcelSelect.creatAppRow(userinfosheet1, "许果",1);
         TestExcelSelect.creatAppRow(userinfosheet1, "刘德华",2);
         TestExcelSelect.creatAppRow(userinfosheet1, "刘若英",3);
         TestExcelSelect.creatAppRow(userinfosheet2, "张学友",1);
         TestExcelSelect.creatAppRow(userinfosheet2, "林志玲",2);
         TestExcelSelect.creatAppRow(userinfosheet2, "林熙蕾",3);
         
         //生成输入文件
         FileOutputStream out=new FileOutputStream("success.xls");  
         workbook.write(out);  
         out.close();
     }
	 
	 /**
	  * 名称管理
	  * @param workbook
	  */
	 public static void creatExcelNameList(HSSFWorkbook workbook){
		//名称管理
         Name name;
         name = workbook.createName();
         name.setNameName("provinceInfo");
         name.setRefersToFormula("hideselectinfosheet!$A$1:$E$1");
         name = workbook.createName();
         name.setNameName("浙江");
         name.setRefersToFormula("hideselectinfosheet!$B$2:$K$2");
         name = workbook.createName();
         name.setNameName("山东");
         name.setRefersToFormula("hideselectinfosheet!$B$3:$I$3");
         name = workbook.createName();
         name.setNameName("江西");
         name.setRefersToFormula("hideselectinfosheet!$B$4:$E$4");
         name = workbook.createName();
         name.setNameName("江苏");
         name.setRefersToFormula("hideselectinfosheet!$B$5:$I$5");
         name = workbook.createName();
         name.setNameName("四川");
         name.setRefersToFormula("hideselectinfosheet!$B$6:$K$6");
	 }
	 
	 
	 /**
	  * 创建隐藏页和数据域
	  * @param workbook
	  * @param hideSheetName
	  */
	 public static void creatHideSheet(HSSFWorkbook workbook,String hideSheetName){
		 HSSFSheet hideselectinfosheet = workbook.createSheet(hideSheetName);//隐藏一些信息
         //设置下拉列表的内容  
         String[] provinceList = {"浙江","山东","江西","江苏","四川"};
         String[] zjProvinceList = {"浙江","杭州","宁波","温州","台州","绍兴","金华","湖州","丽水","衢州","舟山"};
         String[] sdProvinceList = {"山东","济南","青岛","烟台","东营","菏泽","淄博","济宁","威海"};
         String[] jxProvinceList = {"江西","南昌","新余","鹰潭","抚州"};
         String[] jsProvinceList = {"江苏","南京","苏州","无锡","常州","南通","泰州","连云港","徐州"};
         String[] scProvinceList = {"四川","成都","绵阳","自贡","泸州","宜宾","攀枝花","广安","达州","广元","遂宁"};
         //在隐藏页设置选择信息
         HSSFRow provinceRow = hideselectinfosheet.createRow(0);
         TestExcelSelect.creatRow(provinceRow, provinceList);
         HSSFRow zjProvinceRow = hideselectinfosheet.createRow(1);
         TestExcelSelect.creatRow(zjProvinceRow, zjProvinceList);
         HSSFRow sdProvinceRow = hideselectinfosheet.createRow(2);
         TestExcelSelect.creatRow(sdProvinceRow, sdProvinceList);
         HSSFRow jxProvinceRow = hideselectinfosheet.createRow(3);
         TestExcelSelect.creatRow(jxProvinceRow, jxProvinceList);
         HSSFRow jsProvinceRow = hideselectinfosheet.createRow(4);
         TestExcelSelect.creatRow(jsProvinceRow, jsProvinceList);
         HSSFRow scProvinceRow = hideselectinfosheet.createRow(5);
         TestExcelSelect.creatRow(scProvinceRow, scProvinceList);
         //设置隐藏页标志
         workbook.setSheetHidden(workbook.getSheetIndex(hideSheetName), true);
	 }
	 
	 /**
	  * 创建一列应用数据
	  * @param userinfosheet1
	  * @param userName
	  */
	 public static void creatAppRow(HSSFSheet userinfosheet1,String userName,int naturalRowIndex){
		//构造一个信息输入表单,用户姓名,出生省份,出生城市
         //要求省份是可以下拉选择的,出生城市根据所选择的省份级联下拉选择
         //在第一行第一个单元格,插入下拉框
         HSSFRow row = userinfosheet1.createRow(naturalRowIndex-1);
         HSSFCell userNameLableCell = row.createCell(0);
         userNameLableCell.setCellValue("用户姓名:");
         HSSFCell userNameCell = row.createCell(1);
         userNameCell.setCellValue(userName);
         HSSFCell provinceLableCell = row.createCell(2);
         provinceLableCell.setCellValue("出生省份:");
         HSSFCell provinceCell = row.createCell(3);
         provinceCell.setCellValue("请选择");
         HSSFCell cityLableCell = row.createCell(4);
         cityLableCell.setCellValue("出生城市:");
         HSSFCell cityCell = row.createCell(5);
         cityCell.setCellValue("请选择");
         
         //得到验证对象  
         DataValidation data_validation_list = TestExcelSelect.getDataValidationByFormula("provinceInfo",naturalRowIndex,4);
         //工作表添加验证数据  
         userinfosheet1.addValidationData(data_validation_list);
         DataValidation data_validation_list2 = TestExcelSelect.getDataValidationByFormula("INDIRECT($D"+naturalRowIndex+")",naturalRowIndex,6);
         //工作表添加验证数据  
         userinfosheet1.addValidationData(data_validation_list2);
	 }
	 
	 /**
	  * 创建一列数据
	  * @param currentRow
	  * @param textList
	  */
	 public static void creatRow(HSSFRow currentRow,String[] textList){
		 if(textList!=null&&textList.length>0){
			 int i = 0;
			 for(String cellValue : textList){
				 HSSFCell userNameLableCell = currentRow.createCell(i++);
		         userNameLableCell.setCellValue(cellValue);
			 }
		 }
	 }
     
	 /**
	  * 对Excel自然行列设置一个数据验证(并出现下拉列表选择格式)
	  * @param selectTextList
	  * @param naturalRowIndex
	  * @param naturalColumnIndex
	  * @return
	  */
     public static DataValidation getDataValidationList(String[] selectTextList,int naturalRowIndex,int naturalColumnIndex){
         //加载下拉列表内容  
    	 DVConstraint constraint = DVConstraint.createExplicitListConstraint(selectTextList);
         //设置数据有效性加载在哪个单元格上。  
         //四个参数分别是:起始行、终止行、起始列、终止列  
         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);  
         return data_validation_list;  
     }
     
     /**
      * 使用已定义的数据源方式设置一个数据验证
      * @param formulaString
      * @param naturalRowIndex
      * @param naturalColumnIndex
      * @return
      */
     public 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);
         return data_validation_list;  
     }
}

  • 大小: 122.1 KB
  • 大小: 301.9 KB
分享到:
评论
2 楼 穷途末路 2014-01-03  
   给力,谢谢分享
1 楼 fruitking 2010-11-16  
使用的jar包有
dom4j-1.6.1.jar
poi-3.7-20101029.jar
poi-ooxml-3.7-20101029.jar
poi-ooxml-schemas-3.7-20101029.jar
poi-scratchpad-3.7-20101029.jar
xmlbeans-2.3.0.jar

相关推荐

    java web下开发二级级联下拉菜单(数据库实现的)

    总之,通过结合Java Web技术和数据库,我们可以实现动态的二级级联下拉菜单,为用户提供直观且易于操作的界面。这个过程涉及到数据库设计、后端服务开发以及前端交互等多个环节,对提升开发者综合能力非常有帮助。

    AngularJS实现三级级联下拉选择框

    在本文中,我们将深入探讨如何使用AngularJS实现三级级联下拉选择框。AngularJS,一个由Google维护的JavaScript框架,被广泛用于构建单页应用(SPA),它提供了丰富的功能来处理复杂的前端交互,包括数据绑定、依赖...

    jQuery 级联下拉列表

    在网页开发中,级联下拉列表是一种常见的交互设计,常用于实现省市区选择、类别筛选等场景。jQuery 是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理和Ajax交互,同时也提供了丰富的插件来扩展功能。在这个...

    Java中单表和多表级联的增删改查

    "Java中单表和多表级联的增删改查"这个主题涵盖了基础的数据库操作以及更复杂的关联查询技术。以下是对这些知识点的详细解释: 1. **单表的增删改查(CRUD)**: - **Create(创建)**: 在Java中,通常使用JDBC...

    javascirpt 级联下拉列表类

    JavaScript 级联下拉列表是一种常见的前端交互设计,它允许用户在选择一个选项后,根据该选项的值动态更新第二个或更多的下拉列表。这种功能在数据层级关系明确、需要用户逐步选择的情况下非常有用,比如省份-城市-...

    ajax实现级联下拉列表代码

    在网页开发中,级联下拉列表是一种常见的交互设计,它允许用户在选择一个选项后,根据该选项的值动态加载下一个下拉列表的内容。这种功能通常用于展示层级关系的数据,如国家-省份-城市这样的地理信息。在本示例中,...

    基于jquery的H5移动端选择器,日期选择器,自定义级联选择器,自定义html选择器

    这些组件通常包括日期选择器、级联选择器和自定义HTML选择器,它们能够提高移动应用的交互性和可操作性。 日期选择器是网页应用中常见的一种控件,主要用于用户输入日期或选择日期。基于jQuery的H5移动端日期选择器...

    layui多选级联选择器

    在layui中,级联选择器是一种常用于数据层级关系展示和选择的组件,尤其适用于地区选择、部门结构等场景。本篇文章将深入探讨layui的多选级联选择器及其无限级联功能。 首先,我们要理解什么是级联选择器。级联选择...

    ajax+struts2.0+jsp下拉列表级联

    在Web开发中,级联下拉列表是一种常见的交互方式,它允许用户在选择一个选项后,根据选择自动更新另一个下拉列表。在这个“ajax+struts2.0+jsp下拉列表级联”的示例中,我们将探讨如何利用这三个技术实现这种功能。 ...

    AJAX3级级联下拉例子

    这个"AJAX3级级联下拉例子"是一个典型的前端交互应用,常见于动态填写表单,如地区选择,省市区级联填充。在这个例子中,用户选择一个选项时,下一个下拉框会根据前一个选项的值动态加载相关的数据,从而提供更精确...

    ajax级联下拉forJava

    在本教程"ajax级联forJava"中,我们将探讨如何使用Ajax、JavaScript以及Java来实现级联下拉框的功能。 级联下拉框常用于需要展示关联数据的场景,如国家和城市的选择,当用户选择一个国家后,下拉框会动态更新并...

    Ajax级联下拉

    Ajax级联下拉是一种常见的前端交互技术,常用于构建动态的、交互性强的网页应用,如地址选择器或分类过滤等。在这个项目中,我们主要关注的是如何利用Ajax实现中国省份与城市之间的级联下拉效果,同时结合MySQL...

    .Net 级联案例,树形控件,下拉列表。

    在.NET框架中,级联(Cascading)是一种常见的数据绑定技术,用于创建相互关联的控件,如树形控件和下拉列表。这种技术能够帮助用户在多个选择之间建立逻辑关系,使得一个控件的选择会影响另一个控件的显示内容。在...

    Struts2+Hibernate写的下拉菜单级联两级分类

    总的来说,实现“Struts2+Hibernate写的下拉菜单级联两级分类”需要对这两个框架有深入的理解,同时也涉及到前端交互和数据库操作。这是一个典型的前后端协作的例子,展示了如何利用Java Web技术解决实际问题。在...

    可编辑的级联下拉列表框

    在IT界,尤其是在前端开发中,可编辑的级联下拉列表框是一种常见的交互元素,它结合了下拉选择和文本输入的优点,提供了一种既方便又高效的用户输入方式。这种设计模式通常用于数据筛选或者多层级关联选择的场景,如...

    PHP城市级联系统 下拉选择

    城市级联系统,或称地区级联选择,是一种常见的前端交互设计,它允许用户逐步选择他们的地理位置,例如国家、省份、城市,形成一个级联的下拉选择列表。这种设计提高了用户体验,减少了输入错误,并简化了数据处理。...

    jquerycasecader一个jquery级联下拉组件

    - **初始化组件**:通过JavaScript调用`$.fn.casecader`方法对选择器进行初始化,设置相关参数,如默认值、数据源等。 - **事件绑定**:根据需要,可以绑定自定义事件,处理用户的交互行为。 ### 3. 示例代码 ``...

    JavaScript解析XML实现多级级联下拉列表

    在网页开发中,多级级联下拉列表是一种常见的交互设计,它允许用户在一系列相关的选项中进行选择,其中每个下拉列表的选择会影响下一个下拉列表的可用选项。这种功能通常用于表示层次结构的数据,例如国家-省份-城市...

    安卓--级联下拉列表实现DEMO

    在安卓开发中,级联下拉列表是一种常见的用户界面组件,用于提供多级选择功能,常见于地址选择、分类筛选等场景。这个"安卓--级联下拉列表实现DEMO"是一个实例,它展示了如何在Android应用中创建并使用这种交互效果...

    ajax技术实现级联下拉列表代码.doc

    2. **JavaScript逻辑处理**:JavaScript负责监听下拉列表的选择变化,并在变化时调用Ajax请求,获取新的选项数据。 ```javascript function selec(parm, parm2) { // 逻辑处理,发送Ajax请求,更新后续下拉列表...

Global site tag (gtag.js) - Google Analytics