poi之Excel下载之详细设置

Posted 郭子仪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poi之Excel下载之详细设置相关的知识,希望对你有一定的参考价值。

1、设置标题格式

       /**
	 * HEAD样式
	 * 
	 * @param workbook
	 * @param sheet
	 */
	public void setHeadCellStyles(HSSFWorkbook workbook, HSSFSheet sheet) {
		headStyle = workbook.createCellStyle();
		headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		HSSFFont font = workbook.createFont();
		headStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		font.setFontName("宋体");
		font.setFontHeightInPoints((short) 16);// 设置字体大小
		headStyle.setFont(font);
	} 

  

2、设置列头样式

     /**
	 * 列头样式
	 * @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.LIGHT_GREEN.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, 7000);//
//		sheet.setColumnWidth(1, 7000);//
		sheet.setColumnWidth(1, 4000);//
		sheet.setColumnWidth(2, 4000);//
		sheet.setColumnWidth(3, 4000);//
		sheet.setColumnWidth(4, 7000);//
		sheet.setColumnWidth(5, 7000);//
		sheet.setColumnWidth(6, 4000);//
		sheet.setColumnWidth(7, 4000);//
		sheet.setColumnWidth(8, 4000);//
		sheet.setColumnWidth(9, 4000);//
		sheet.setColumnWidth(10, 4000);//
}

  

3、设置数据样式

       /**
	 * 数据样式
	 * 
	 * @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.LIGHT_GREEN.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);
	} 

  

4、创建隐藏页和数据域(省市区三级联动下拉框数据隐藏域设置)

        /**
	 * 创建隐藏页和数据域(省市区三级联动下拉框数据隐藏域设置)
	 * @param workbook
	 * @param hideSheetName
	 */
	public void creatHideSheet(HSSFWorkbook workbook) {
		/****************************************************** 创建省市区 ***************************************************/
		HSSFSheet factoryAndModelSheet = workbook.createSheet("factoryAndModelSheet");// 隐藏一些信息
		/*************************************************** 省-市 start ***************************************************/
		//省份
		List<Area> proviceList = 获得省份列表;
		List<String> rowList = null;
		String provinceid = "";
		String provinceCity = "";
		Name name;
		for(int i=0;i<proviceList.size();i++){
			HSSFRow pfModelRow = factoryAndModelSheet.createRow(i);
			rowList = new ArrayList<String>();
			provinceid = proviceList.get(i).getId().toString();
			provinceCity = proviceList.get(i).getProvinceCity();
			rowList.add(provinceCity + "_" + provinceid);
			List<Area> cityList = 根据省份获得城市列表;
			// 添加“省--->市” 名称
			name = workbook.createName();
			name.setNameName( provinceCity+ "_" + provinceid);
			for(int j=0; j<cityList.size(); j++){
				Area area = cityList.get(j);
				rowList.add(area.getProvinceCity()+"_"+area.getId().toString());
			}
			this.creatRow(pfModelRow, rowList);
			name.setRefersToFormula("factoryAndModelSheet!$B$" + (i + 1) + ":$"
					+ this.getcellColumnFlag(cityList.size() + 1) + "$"
					+ (i + 1));
		}
		name = workbook.createName();
		name.setNameName("provice");
		name.setRefersToFormula("factoryAndModelSheet!$A$1:$A$"+ proviceList.size());
		/*************************************************** 省-市 end ***************************************************/
		/*************************************************** 市-区 start ***************************************************/
		//市
		int sm = proviceList.size()+1;
		List<String> cityNList = null;
		List<Area> cityareaList = new LinkedList<Area>();
		String cityid = "";
		String cityCity = "";
		//将所有的市加之cityareaList
		for(int i=0;i<proviceList.size();i++){
			provinceid = proviceList.get(i).getId().toString();
			List<Area> cityList = 获得城市列表;
			cityareaList.addAll(cityList);//加至List
		}
		for(int i=0;i<cityareaList.size();i++){
			HSSFRow pfModelRow = factoryAndModelSheet.createRow(sm+i);
			cityNList = new ArrayList<String>();
			cityid = cityareaList.get(i).getId().toString();
			cityCity = cityareaList.get(i).getProvinceCity();
			cityNList.add(cityCity + "_" + cityid);
			List<Area> cityList = 根据城市查询区域列表;
			// 添加“市--->区” 名称
			name = workbook.createName();
			name.setNameName( cityCity+ "_" + cityid);
			for(int j=0; j<cityList.size(); j++){
				Area area = cityList.get(j);
				cityNList.add(area.getProvinceCity()+"_"+area.getId().toString());
			}
			this.creatRow(pfModelRow, cityNList);
			name.setRefersToFormula("factoryAndModelSheet!$B$" + (sm+i + 1) + ":$"
					+ this.getcellColumnFlag(cityList.size() + 1) + "$"
					+ (sm+i + 1));
		}
		name = workbook.createName();
		name.setNameName("citycityname");
		name.setRefersToFormula("factoryAndModelSheet!$A$"+sm+":$A$"+ cityareaList.size());
		/*************************************************** 市-区 end ***************************************************/
		// 设置隐藏页标志
		workbook.setSheetHidden(workbook.getSheetIndex("factoryAndModelSheet"),true);
}

  

5、创建标题和列头数据

/**
	 * 创建标题应用列头
	 * @param userinfosheet1
	 * @param userName
	 */
	public void creatAppRowHead(HSSFSheet userinfosheet1, String headName) {
		// 设置标题
		HSSFRow rowHead = userinfosheet1.createRow(0);
		userinfosheet1.addMergedRegion(new Region(0, (short) 0, 0, (short) 21));
		POIUtils.createCell(rowHead, (short) 0, headName, headStyle);
		rowHead.setHeight((short) (27 * 20));

		// 设置表头
		HSSFRow row = userinfosheet1.createRow(1);

		HSSFCell merchantIdCell = row.createCell(0);
		merchantIdCell.setCellValue("一");
		merchantIdCell.setCellStyle(titleStyle);

//		HSSFCell mrchtNameCell = row.createCell(1);
//		mrchtNameCell.setCellValue("二");
//		mrchtNameCell.setCellStyle(titleStyle);

		HSSFCell merchantEnameCell = row.createCell(1);
		merchantEnameCell.setCellValue("二");
		merchantEnameCell.setCellStyle(titleStyle);

		HSSFCell abbrCnameCell = row.createCell(2);
		abbrCnameCell.setCellValue("三");
		abbrCnameCell.setCellStyle(titleStyle);

		HSSFCell abbrEnameCell = row.createCell(3);
		abbrEnameCell.setCellValue("四");
		abbrEnameCell.setCellStyle(titleStyle);

		HSSFCell mccIdCell = row.createCell(4);
		mccIdCell.setCellValue("五");
		mccIdCell.setCellStyle(titleStyle);

		HSSFCell addressCell = row.createCell(5);
		addressCell.setCellValue("六");
		addressCell.setCellStyle(titleStyle);

		HSSFCell provinceCell = row.createCell(6);
		provinceCell.setCellValue("七");
		provinceCell.setCellStyle(titleStyle);

		HSSFCell cityNoCell = row.createCell(7);
		cityNoCell.setCellValue("八");
		cityNoCell.setCellStyle(titleStyle);
		
		HSSFCell zoneCell = row.createCell(8);
		zoneCell.setCellValue("九");
		zoneCell.setCellStyle(titleStyle);
		
		HSSFCell telephoneCell = row.createCell(9);
		telephoneCell.setCellValue("十");
		telephoneCell.setCellStyle(titleStyle);
		
		HSSFCell managerCell = row.createCell(10);
		managerCell.setCellValue("十一");
		managerCell.setCellStyle(titleStyle);
}

  

6、设置下拉框

/**
	 * 添加下拉框限制	
	 * @param sheet1
	 */
	public void createSelectValidate(HSSFSheet sheet1) {
				
		//省,第7列
		DVConstraint constraintPosType = DVConstraint.createFormulaListConstraint("provice");
		// 作用域:起始行、终止行、起始列、终止列
		CellRangeAddressList regionsPosType = new CellRangeAddressList(2, 499,6, 6);
		DataValidation data_validation_PosType = new HSSFDataValidation(regionsPosType, constraintPosType);
		sheet1.addValidationData(data_validation_PosType);
		
		//市,第8列
		DVConstraint constraintcityNo = DVConstraint.createFormulaListConstraint("INDIRECT($G$3:$G$500)");
		// 作用域:起始行、终止行、起始列、终止列
		CellRangeAddressList regionscityNo = new CellRangeAddressList(2, 499,7, 7);
		DataValidation data_validation_cityNo = new HSSFDataValidation(regionscityNo, constraintcityNo);
		sheet1.addValidationData(data_validation_cityNo);
		
		//区,第9列
		DVConstraint constraintmanager = DVConstraint.createFormulaListConstraint("INDIRECT($H$3:$H$500)");
		// 作用域:起始行、终止行、起始列、终止列
		CellRangeAddressList regionsmanager = new CellRangeAddressList(2, 499,8, 8);
		DataValidation data_validation_manager = new HSSFDataValidation(regionsmanager, constraintmanager);
		sheet1.addValidationData(data_validation_manager);
	
	}

  

7、工具方法-创建一列数据

        /**
	 * 创建一列数据
	 * 
	 * @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);
			}
		}
	}
	
	// 根据数据值确定单元格位置(比如:28-AB)
	private String getcellColumnFlag(int num) {
		String columFiled = "";
		int chuNum = 0;
		int yuNum = 0;
		if (num >= 1 && num <= 26) {
			columFiled = this.doHandle(num);
		} else {
			chuNum = num / 26;
			yuNum = num % 26;

			columFiled += this.doHandle(chuNum);
			columFiled += this.doHandle(yuNum);
		}
		return columFiled;
	}

	private String doHandle(final int num) {
		String[] charArr = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
				"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
				"W", "X", "Y", "Z" };
		return charArr[num - 1].toString();
	}    

  

 

以上是关于poi之Excel下载之详细设置的主要内容,如果未能解决你的问题,请参考以下文章

我所知道报表之POI创建Excel单元格填充数据设置样式绘制图形

Java操作Excel之POI:java读写excel文件以及打印设置

POI解析Excel之应用反射等技术实现动态读取

Java解析Excel之POI

poi 架包导出excel,并下载

[ExtJS5学习笔记]第三十四节 sencha extjs 5 grid表格之java后台导出excel