excel导出模板带有下拉的模板
来源:互联网 发布:跟聪明的女朋友知乎 编辑:程序博客网 时间:2024/06/11 19:50
本文转自:
http://blog.csdn.net/fangkecool2008/article/details/50822533
如果以下方法不行,我反正试过了,可以是可以,但是有bug,我第二个sheet页设置了数据100个数字,1-100,第一个sheet页引用,第一行到第一100行能引用到,100行以后就引用不到了,准确的说,第一行第一列能引用到1-100的下拉,第二行第一列就只能引入2-100,即99个下拉,第三行就只能3-100,越来越少。
代码的引用我都是写死的$A1:$A100,引用到第一个sheet页中的第一列,(行数是1到15000行)可始终不行。
最终委婉的解决办法,也是下拉数值过大的最终解决办法: 在自己的项目中,放入模板,模板中设置好数据有效性,然后在代码中读取模板,修改数据有效性的值即可。
又来了一个坑,确定不了第一个sheet页,如性别,需要几个下拉值,如果模板做成10个,实际只有两个,那么就有8个空行,而且即使点击了忽略空行,依然会显示空行。
所以最好设置好到底有多少个数值,像性别,肯定就是3个,男、女、其他、其他的下拉就待定了。
还有一种方式: 加一个公式,先在需要下拉的地方点击公式,输入公式,然后在点击数据有效性,选中序列,值=公式名称即可
=INDIRECT("Sheet2!C1:C"&COUNTA(Sheet2!$C:$C))
数据有效性跨表引用的解决
为了防止数据的误输,我们需要限制数据录入格式,这就要用到数据有效性设置。
一、如何设定有效性
1、在设定有效性之前,要选择数据区域,否则仅对当前单元格进行设置。
2、点击EXCEL的“数据”-“有效性”菜单,可弹出“数据有效性”设置窗口。
3、有效性有“整数”“小数”“序列”等共8种。
今天这里只讲解“序列”型,并且重点放在跨表引用上。
二、“序列”型设置
1、序列设置格式1:手工输入序列值
使用英文逗号隔开的文本,被认为是序列,如“a,b,c,d,e”。
2、序列设置格式2:单元格区域
如=$C$10:$C$16,则将同一工作表下的C10:C16区域的值用作有效性序列。
三、跨表引用的处理
当你使用序列,试图引用其他表时,系统会发出错误提示,并且无法选择其他表。
我们可以使用下述两种办法解决:
1、使用公式
如我要在sheet2的单元格中设置有效性,序列的来源为sheet1的A2:A50区域,则在sheet2的有效性设置中选择序列,然后输入公式:=INDIRECT("sheet1!$A$2:$A$50"),则可达到目的。
INDIRECT函数,请参阅EXCEL帮助文件。
2、使用名称
名称可以理解为自定义变量。如上述例题,则先要点击“插入”——“名称”——“定义……”,弹出“定义名称”对话框,在里面定义AAA,引用位置为=sheet1!$A$2:$A$50。(我是应用到了这个)
然后在sheet2的有效性设置中选择序列,然后输入公式:=AAA。
一、如何设定有效性
1、在设定有效性之前,要选择数据区域,否则仅对当前单元格进行设置。
2、点击EXCEL的“数据”-“有效性”菜单,可弹出“数据有效性”设置窗口。
3、有效性有“整数”“小数”“序列”等共8种。
今天这里只讲解“序列”型,并且重点放在跨表引用上。
二、“序列”型设置
1、序列设置格式1:手工输入序列值
使用英文逗号隔开的文本,被认为是序列,如“a,b,c,d,e”。
2、序列设置格式2:单元格区域
如=$C$10:$C$16,则将同一工作表下的C10:C16区域的值用作有效性序列。
三、跨表引用的处理
当你使用序列,试图引用其他表时,系统会发出错误提示,并且无法选择其他表。
我们可以使用下述两种办法解决:
1、使用公式
如我要在sheet2的单元格中设置有效性,序列的来源为sheet1的A2:A50区域,则在sheet2的有效性设置中选择序列,然后输入公式:=INDIRECT("sheet1!$A$2:$A$50"),则可达到目的。
INDIRECT函数,请参阅EXCEL帮助文件。
2、使用名称
名称可以理解为自定义变量。如上述例题,则先要点击“插入”——“名称”——“定义……”,弹出“定义名称”对话框,在里面定义AAA,引用位置为=sheet1!$A$2:$A$50。(我是应用到了这个)
然后在sheet2的有效性设置中选择序列,然后输入公式:=AAA。
public String exportprisoner() throws IOException { try {// Excel模板路径// 重设头信息ServletOutputStream out = getResponse().getOutputStream();getResponse().reset();getResponse().setContentType("applicationnd.ms-excel;charset=utf-8");getResponse().setHeader("Content-Disposition","attachment;filename="+ new String(("模版" + ".xls").getBytes(),"iso-8859-1"));String path = getRequest().getRealPath("/");System.out.println(path);File excelFile = new File(path+"download/test.xls"); // 读取本地项目中的模板// 文件流FileInputStream is = new FileInputStream(excelFile);// 支持Excel 2003 2007Workbook workbook = null;try {workbook = WorkbookFactory.create(is);} catch (InvalidFormatException e) {// TODO Auto-generated catch blocke.printStackTrace();} //得到数据有效性的值所放的位置Sheet sheet2 = workbook.getSheet("Sheet2");Row row = null; Cell cell = null; for (int j = 0; j < 200; j++) { row = sheet2.createRow(j); cell = row.createCell(0); cell.setCellValue("新值"+j);}System.out.println(sheetCount);workbook.write(out);// 刷新输出流out.flush();// 关闭输出流if (out != null) {out.close();}} catch (FileNotFoundException e) {e.printStackTrace();}return null;}
================================数据量较少的下拉的情况,用此方法
private HSSFWorkbook workbook = null; private HSSFCellStyle titleStyle = null; private HSSFCellStyle dataStyle = null; /** * 列头样式 * @param workbook * @param sheet */ public void setTitleCellStyles(HSSFWorkbook workbook,HSSFSheet sheet){ titleStyle = workbook.createCellStyle(); //设置边框 titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //设置背景色 titleStyle.setFillForegroundColor(HSSFColor.WHITE.index); titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //设置居中 titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //设置字体 HSSFFont font = workbook.createFont(); font.setFontName("宋体"); font.setFontHeightInPoints((short) 11); //设置字体大小 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示 titleStyle.setFont(font);//选择需要用到的字体格式 //设置自动换行 titleStyle.setWrapText(true); //设置列宽 ,第一个参数代表列id(从0开始),第2个参数代表宽度值 sheet.setColumnWidth(0, 5000); sheet.setColumnWidth(1, 5000); sheet.setColumnWidth(2, 3000); sheet.setColumnWidth(3, 7000); sheet.setColumnWidth(4, 5000); sheet.setColumnWidth(5, 5000); sheet.setColumnWidth(6, 3000); sheet.setColumnWidth(7, 3000); sheet.setColumnWidth(8, 5000); sheet.setColumnWidth(9, 5000); sheet.setColumnWidth(10, 3000); sheet.setColumnWidth(11, 3000); sheet.setColumnWidth(12, 3000); sheet.setColumnWidth(13, 3000); sheet.setColumnWidth(14, 7000); sheet.setColumnWidth(15, 7000); sheet.setColumnWidth(16, 7000); sheet.setColumnWidth(17, 7000); sheet.setColumnWidth(18, 10000); } /** * 数据样式 * @param workbook * @param sheet */ public void setDataCellStyles(HSSFWorkbook workbook,HSSFSheet sheet){ dataStyle = workbook.createCellStyle(); //设置边框 dataStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); dataStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); dataStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); dataStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); //设置背景色 dataStyle.setFillForegroundColor(HSSFColor.WHITE.index); dataStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); //设置居中 dataStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); //设置字体 HSSFFont font = workbook.createFont(); font.setFontName("宋体"); font.setFontHeightInPoints((short) 11); //设置字体大小 dataStyle.setFont(font);//选择需要用到的字体格式 //设置自动换行 dataStyle.setWrapText(true); } /** * 创建一列数据 * @param currentRow * @param textList */ public void creatRow(HSSFRow currentRow,List<String> textList){ if(textList!=null&&textList.size()>0){ int i = 0; for(String cellValue : textList){ HSSFCell userNameLableCell = currentRow.createCell(i++); userNameLableCell.setCellValue(cellValue); } } } /** * 创建一列应用列头 * @param userinfosheet1 * @param userName */ public void creatAppRowHead(HSSFSheet userinfosheet1,int naturalRowIndex){ HSSFRow row = userinfosheet1.createRow(naturalRowIndex-1); //0.所属分类 HSSFCell Cell1 = row.createCell(0); Cell1.setCellValue("所属分类"); Cell1.setCellStyle(titleStyle); //1.分类名称 HSSFCell Cell2 = row.createCell(1); Cell2.setCellValue("分类名称"); Cell2.setCellStyle(titleStyle); //2.资产类型 HSSFCell Cell3 = row.createCell(2); Cell3.setCellValue("资产类型"); Cell3.setCellStyle(titleStyle); //3.设备用途 HSSFCell Cell4 = row.createCell(3); Cell4.setCellValue("设备用途"); Cell4.setCellStyle(titleStyle); //4.品牌 HSSFCell Cell5 = row.createCell(4); Cell5.setCellValue("品牌"); Cell5.setCellStyle(titleStyle); //5.型号 HSSFCell Cell6 = row.createCell(5); Cell6.setCellValue("型号"); Cell6.setCellStyle(titleStyle); //6.数量 HSSFCell Cell7 = row.createCell(6); Cell7.setCellValue("数量"); Cell7.setCellStyle(titleStyle); //7.计量单位 台、套、个 HSSFCell Cell8 = row.createCell(7); Cell8.setCellValue("计量单位"); Cell8.setCellStyle(titleStyle); //8.购入原值 HSSFCell Cell9 = row.createCell(8); Cell9.setCellValue("购入原值"); Cell9.setCellStyle(titleStyle); //9.购入时间 HSSFCell Cell10 = row.createCell(9); Cell10.setCellValue("购入时间"); Cell10.setCellStyle(titleStyle); //10.现存状态 闲置、在用 HSSFCell Cell11 = row.createCell(10); Cell11.setCellValue("现存状态"); Cell11.setCellStyle(titleStyle); //11.仓库状态 在库、离库 HSSFCell Cell12 = row.createCell(11); Cell12.setCellValue("仓库状态"); Cell12.setCellStyle(titleStyle); //12.资产属性 完好、损坏 HSSFCell Cell13 = row.createCell(12); Cell13.setCellValue("资产属性"); Cell13.setCellStyle(titleStyle); //13.报废属性 正常、报废 HSSFCell Cell14 = row.createCell(13); Cell14.setCellValue("报废属性"); Cell14.setCellStyle(titleStyle); //14.保管人 HSSFCell Cell15 = row.createCell(14); Cell15.setCellValue("保管人"); Cell15.setCellStyle(titleStyle); //15.资金来源 HSSFCell Cell16 = row.createCell(15); Cell16.setCellValue("资金来源"); Cell16.setCellStyle(titleStyle); //16.供应商 HSSFCell Cell17 = row.createCell(16); Cell17.setCellValue("供应商"); Cell17.setCellStyle(titleStyle); //17.供应商电话 HSSFCell Cell18 = row.createCell(17); Cell18.setCellValue("供应商电话"); Cell18.setCellStyle(titleStyle); //18.备注说明 HSSFCell Cell19 = row.createCell(18); Cell19.setCellValue("备注说明"); Cell19.setCellStyle(titleStyle); } /** * 创建一列应用数据 * @param userinfosheet1 * @param userName */ public void creatAppRow(HSSFSheet userinfosheet1,String titels,int naturalRowIndex){ //在第一行第一个单元格,插入下拉框 HSSFRow row = userinfosheet1.createRow(naturalRowIndex-1); //所属分类 String [] list1={"办公计算设备","网络交换设备","安全防御设备","办公打印设备","复印扫描设备","监控预警设备","影音传输设备","存储备份设备","机房运维设备","办公软件","工具软件","专业软件","系统软件","其他软件"}; //分类名称 String [] list2={"台式电脑","便携式电脑","平板电脑","智能终端","服务器","其他办公计算设备","交换机","路由器","中继设备","负载均衡","其他交换设备","防火墙","防毒墙","邮件网关","入侵防御","数据库审计","其他安全防御设备", "上网行为管理","VPN","针式打印机","激光式打印机","喷墨式打印机","一体机(打印、复印、传值)","票据打印机","其他办公打印设备","一体机","复印机","扫描仪","传真机","新风空调设备","UPS电源"}; //资产类型 String [] list3={"主设备","介质","配件"}; //计量单位 String [] list4={"台","套","个"}; //现存状态 String [] list5={"闲置","在用"}; //仓库状态 String [] list6={"在库","离库"}; //资产属性 String [] list7={"完好","损坏"}; //报废属性 String [] list8={"正常","报废"}; //0.所属分类 HSSFCell cell1 = row.createCell(0); cell1.setCellValue("请选择"); cell1.setCellStyle(dataStyle); //1.分类名称 HSSFCell cell2 = row.createCell(1); cell2.setCellValue("请选择"); cell2.setCellStyle(dataStyle); //2.资产类型 HSSFCell cell3 = row.createCell(2); cell3.setCellValue("请选择"); cell3.setCellStyle(dataStyle); //3.设备用途 HSSFCell cell4 = row.createCell(3); cell4.setCellValue(titels); cell4.setCellStyle(dataStyle); //4.品牌 HSSFCell cell5 = row.createCell(4); cell5.setCellValue(titels); cell5.setCellStyle(dataStyle); //5.型号 HSSFCell cell6 = row.createCell(5); cell6.setCellValue(titels); cell6.setCellStyle(dataStyle); //6.数量 HSSFCell cell7 = row.createCell(6); cell7.setCellValue(titels); cell7.setCellStyle(dataStyle); //7.计量单位 HSSFCell cell8 = row.createCell(7); cell8.setCellValue("请选择"); cell8.setCellStyle(dataStyle); //8.购入原值 HSSFCell cell9 = row.createCell(8); cell9.setCellValue(titels); cell9.setCellStyle(dataStyle); //9.购入时间 HSSFCell cell10 = row.createCell(9); cell10.setCellValue(new SimpleDateFormat("yyyy-MM-dd").format(new Date()).toString()); cell10.setCellStyle(dataStyle); //10.现存状态 HSSFCell cell11 = row.createCell(10); cell11.setCellValue("请选择"); cell11.setCellStyle(dataStyle); //11.仓库状态 HSSFCell cell12 = row.createCell(11); cell12.setCellValue("请选择"); cell12.setCellStyle(dataStyle); //12.资产属性 HSSFCell cell13 = row.createCell(12); cell13.setCellValue("请选择"); cell13.setCellStyle(dataStyle); //13.报废属性 HSSFCell cell14 = row.createCell(13); cell14.setCellValue("请选择"); cell14.setCellStyle(dataStyle); //14.保管人 HSSFCell cell15 = row.createCell(14); cell15.setCellValue(titels); cell15.setCellStyle(dataStyle); //15.资金来源 HSSFCell cell16 = row.createCell(15); cell16.setCellValue(titels); cell16.setCellStyle(dataStyle); //16.供应商 HSSFCell cell17 = row.createCell(16); cell17.setCellValue(titels); cell17.setCellStyle(dataStyle); //17.供应商电话 HSSFCell cell18 = row.createCell(17); cell18.setCellValue(titels); cell18.setCellStyle(dataStyle); //18.备注说明 HSSFCell cell19 = row.createCell(18); cell19.setCellValue(titels); cell19.setCellStyle(dataStyle); //得到验证对象 DataValidation data_validation_list = this.getDataValidationByFormula(list1,naturalRowIndex,1); //从1开始下拉框处于第几列 //工作表添加验证数据 userinfosheet1.addValidationData(data_validation_list); DataValidation data_validation_list2 = this.getDataValidationByFormula(list2,naturalRowIndex,2); //工作表添加验证数据 userinfosheet1.addValidationData(data_validation_list2); DataValidation data_validation_list3 = this.getDataValidationByFormula(list3,naturalRowIndex,3); //工作表添加验证数据 userinfosheet1.addValidationData(data_validation_list3); DataValidation data_validation_list8 = this.getDataValidationByFormula(list4,naturalRowIndex,8); //工作表添加验证数据 userinfosheet1.addValidationData(data_validation_list8); DataValidation data_validation_list11 = this.getDataValidationByFormula(list5,naturalRowIndex,11); //工作表添加验证数据 userinfosheet1.addValidationData(data_validation_list11); DataValidation data_validation_list12 = this.getDataValidationByFormula(list6,naturalRowIndex,12); //工作表添加验证数据 userinfosheet1.addValidationData(data_validation_list12); DataValidation data_validation_list13 = this.getDataValidationByFormula(list7,naturalRowIndex,13); //工作表添加验证数据 userinfosheet1.addValidationData(data_validation_list13); DataValidation data_validation_list14 = this.getDataValidationByFormula(list8,naturalRowIndex,14); //工作表添加验证数据 userinfosheet1.addValidationData(data_validation_list14); } /** * 使用已定义的数据源方式设置一个数据验证 * @param formulaString * @param naturalRowIndex * @param naturalColumnIndex * @return */ public DataValidation getDataValidationByFormula(String[] formulaString,int naturalRowIndex,int naturalColumnIndex){ //加载下拉列表内容 DVConstraint constraint = DVConstraint.createExplicitListConstraint(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; } /** * 生成导出下拉框excel * @param outPathStr 输出路径 */ public HSSFWorkbook ExportComboxExcel (HSSFWorkbook workbook) { try { // workbook = new HSSFWorkbook();//excel文件对象 HSSFSheet sheet1 = workbook.createSheet("sheet1");//工作表对象 //设置列头样式 this.setTitleCellStyles(workbook,sheet1); //设置数据样式 this.setDataCellStyles(workbook,sheet1); //创建一行列头数据 this.creatAppRowHead(sheet1,1); //创建一行数据 for (int i = 2; i < 11; i++) { this.creatAppRow(sheet1, "",i); } System.out.println("导出成功!"); } catch (Exception e) { e.printStackTrace(); } return workbook; } -------------------------------------------------------------------- action /** * 导出台帐登记表(模版).xls * @author fangke * @throws IOException */ public String ExprotExcelTemp() throws IOException{ HSSFWorkbook wb = null; ExportComboxExcel ecbe = null; try { //Excel模板路径 //重设头信息 ServletOutputStream out = response.getOutputStream(); response.reset(); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + new String(("台帐入库登记表(模版)" + ".xls") .getBytes(), "iso-8859-1")); wb = new HSSFWorkbook(); ecbe = new ExportComboxExcel(); wb=ecbe.ExportComboxExcel(wb); wb.write(out); //刷新输出流 out.flush(); //关闭输出流 if(out!=null){ out.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } return null; }
0 0
- excel导出模板带有下拉的模板
- 导出带有模板的repeator
- 导出的Excel带有下拉框
- 基于模板的excel导出
- xml模板导出Excel
- 无模板导出EXCEL
- jxls模板导出excel
- 一个excel导出模板
- C# excel模板导出
- jsp导出Excel模板
- jxls模板导出excel
- 导出Excel技术模板
- Excel 模板导出---JXLS
- Excel导出模板
- excel导出模板
- Excel模板导出
- Excel模板导出
- excel根据模板导出
- untiy 3d ShaderLab_第9章_1_平面阴影(二) 点光源对平面的投影
- iOS之RunTime浅谈
- myeclipse的debuge模式启动缓慢
- CSS3的REM设置字体大小
- UDP FLOOD【PHP】
- excel导出模板带有下拉的模板
- Android —— Handler进阶(未完持续)
- 常用sql脚本
- spring aop execution表达式
- Unity3D自学笔记——Transform
- 带多行下划线的EditText
- Linux 下使用openSSL 生成RSA密钥对
- 指针
- RecyclerView初级