/** * * @File name: CreateExcelMoBusiness.java * @Create on: 2011-02-12 11:48:453 * @Author : zhys513 * @ChangeList * --------------------------------------------------- * Date Editor ChangeReasons * */ 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 CreateExcelMoBusiness { 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); creatExcelHidePage(wb); setDataValidation(wb); FileOutputStream fileOut; try { fileOut = new FileOutputStream("d://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+")",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; } }
该示例参考了网上的代码,只是把代码整合在了一起,添加了可测试的main方法方便测试,以便没有成功实现联动的朋友只要把类拷贝到自己的工程里并引入需要的包就能直接看到效果。生成的EXCEL文件放在D盘根目录。
参考的版本 poi3.7 下载请到http://www.apache.org/下载最新版本
相关推荐
poi3.7包的相关,自己测过,可以使用,很强大。目前用的人不多,对于Excel的java操作
POI3.7 Excel 各种jar包最全 资源靠共享 POI3.7 Excel 各种jar包最全 资源靠共享
可以用来实现java4excel POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
java_poi实现excel导入导出功能,有详细的注解
Excel解析Excel解析Excel解析Excel解析Excel解析Excel解析Excel解析Excel解析
poi3.7版本 读写excel2003和2007版本都可以,用到的相关jar非常齐全。
poi3.7完整包
收集了poi3.6跟poi3.7解析excel2007用到的包
使用javadoc2chm制作,自己使用官方的文档制作而成,没有任何的关于页面。
最新稳定版poi3.7,官方下载poi3.7的jdk版本要求是jdk1.5,此版适用于jdk1.4;同时一起上传poi3.7的API.
POI3.7用于处理word.POI3.7用于处理word
java-poi3.7 用来读取Excel的jar文件,大家可以相互交流一下。
Java 实现导出excel表 POI 所需包
poi 3.7 jar包, 包括poi-3.7-20101029、poi-ooxml-3.7-20101029、poi-ooxml-schemas-3.7-20101029、poi-scratchpad-3.7-20101029
poi3.7 3.8 3.9 3.10 四个版本
poi3.7.jar操作excel可上传图片,但官网的jar包下载后,不能与excelutils-1.41.jar导出汇总表并用,总报错。后经改双方源码,现可以实现根据模板生成数据,并根据模板导出汇总表之类的。
POI3.7/POI3.8/POI3.9/POI3.10的jar包都在这里,欢迎下载
java实现excel的导入导出(poi详解),经过测试poi效率要比jxl要高很多,特别是数据量大的时候jxl根本无法用肉眼入目,本资源是个可运行项目demo,很有参考价值!
poi3.7 完整版jar包,有需要的可以下载,个人用过比较好,已经兼容了excel2007,可以方便的读取excel中的内容 POI是“Point of Interest”的缩写,可以翻译成“兴趣点”吧,每个POI包含四方面信息,名称、类别、经度...
java project create excel or word