`

POI兼容导出Excel(样式)

 
阅读更多
package ycl.learn.excel;

import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Workbook;

public class ExcelStyle {

	/**
	 * data style
	 * @param workbook
	 * @return
	 */
	public static CellStyle createDataCellStyle(Workbook workbook){
		CellStyle dataCellStyle = workbook.createCellStyle();
		DataFormat format = workbook.createDataFormat(); 
		dataCellStyle.setDataFormat(format.getFormat("m/d/yy"));
		return dataCellStyle;
	}
	
	/**
	 * number style
	 * @param workbook
	 * @return
	 */
	public static CellStyle createNumberCellStyle(Workbook workbook){
		CellStyle numberCellStyle = workbook.createCellStyle();
		DataFormat format = workbook.createDataFormat(); 
		numberCellStyle.setDataFormat(format.getFormat("0.00"));
		return numberCellStyle;
	}
	
	/**
	 * text style
	 * @param workbook
	 * @return
	 */
	public static CellStyle createTextCellStyle(Workbook workbook){
		CellStyle numberCellStyle = workbook.createCellStyle();
		DataFormat format = workbook.createDataFormat(); 
		numberCellStyle.setDataFormat(format.getFormat("@"));
		return numberCellStyle;
	}
	
	/**
	 * append the cellStyle with font
	 * 
	 * @param workbook
	 * @param cellStyle
	 * @return
	 */
	public static CellStyle appendFontST(Workbook workbook,CellStyle cellStyle){
		Font font = workbook.createFont(); 
		font.setBoldweight(Font.BOLDWEIGHT_BOLD);
		font.setFontHeight((short)250);
		font.setFontHeightInPoints((short)12);
		font.setFontName("宋体");
		cellStyle.setFont(font);
		cellStyle.setWrapText(true);
		return cellStyle;
	}
	
	/**
	 * append the cellStyle with color
	 * 
	 * @param workbook
	 * @param cellStyle
	 * @return
	 */
	public static CellStyle appendBackColor(CellStyle cellStyle){
		cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
		cellStyle.setFillBackgroundColor(HSSFColor.LIME.index);
		cellStyle.setFillForegroundColor(CellStyle.THICK_FORWARD_DIAG);
		return cellStyle;
	}
	
	/**
	 * append the cellStyle with border
	 * 
	 * @param cellStyle
	 * @return
	 */
	public static CellStyle appendBorder(CellStyle cellStyle){
		cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
		cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
		cellStyle.setBorderRight(CellStyle.BORDER_THIN);
		cellStyle.setBorderTop(CellStyle.BORDER_THIN);
		cellStyle.setLeftBorderColor(HSSFColor.GREEN.index);
		cellStyle.setRightBorderColor(HSSFColor.GREEN.index);
		cellStyle.setTopBorderColor(HSSFColor.GREEN.index);
		cellStyle.setBottomBorderColor(HSSFColor.GREEN.index);
		return cellStyle;
	}
	
	/**
	 * append the cellStyle with wrapText
	 * 
	 * @param cellStyle
	 * @return
	 */
	public static CellStyle appendWrapText(CellStyle cellStyle){
		cellStyle.setWrapText(true);
		return cellStyle;
	}
	
	/**
	 * append the cellStyle with align.
	 * 
	 * @param cellStyle
	 * @return
	 */
	public static CellStyle appendAlign(CellStyle cellStyle){
		cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
		return cellStyle;
	} 
}



this is the excel cell style.


package ycl.learn.excel;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
import java.util.List;
import java.util.Map;

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.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; 
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import ycl.learn.excel.ExcelHeader.ColumnHeader;
import ycl.learn.excel.ExcelResult.ExcelErrorEnum;
import ycl.learn.excel.ExcelTypeConvert.HeaderType;

public class ExcelWriter {

	public static ExcelResult writerExcel(ExcelParameter parameter) {
		ExcelResult result = new ExcelResult();
		OutputStream os = parameter.getOutputStream();
		Boolean version2007 = parameter.getVerstion2007();
		String sheetName = parameter.getSheetName(); 
		Workbook workbook = null;
		try {
			if (version2007){
				workbook = new XSSFWorkbook(); 
			}else{
				workbook = new HSSFWorkbook(); 
			}
		} catch (Exception e) {
			result.addError(ExcelErrorEnum.SYSTEM_ERROR);
			return result;
		} 
		Sheet sheet=workbook.createSheet(sheetName); 
		sheet.setPrintGridlines(true);
		result = writerSheet(workbook,sheet,parameter);
		try {
			workbook.write(os);
		} catch (IOException e) {
			result.addError(ExcelErrorEnum.SYSTEM_ERROR);
			return result;
		}
		return result; 
	}

	private static ExcelResult writerSheet(Workbook workbook, Sheet sheet, ExcelParameter parameter) {
		ColumnHeader[] chs = parameter.getChs();
		List<Map<String, String>> dataMapList = parameter.getDataMapList();
		String title = parameter.getTitle();
		ExcelResult result = new ExcelResult();
		int rowindex = 0;
		if(title!=null){
			Row row = sheet.createRow(rowindex);
			CellRangeAddress region = new CellRangeAddress(0,0,0,chs.length-1);
			CellStyle cellStyle = ExcelStyle.createDataCellStyle(workbook);
			cellStyle = ExcelStyle.appendBorder(cellStyle);
			cellStyle = ExcelStyle.appendAlign(cellStyle);
			cellStyle = ExcelStyle.appendFontST(workbook, cellStyle);
			for(int i=region.getFirstColumn();i<region.getLastColumn()+1;i++){
				Cell cellregion=row.getCell(i);
				if( cellregion==null){   
					cellregion=row.createCell(i);   
					cellregion.setCellValue("");   
				} 
				//sheet.setDefaultColumnStyle(i, cellStyle);
				cellregion.setCellStyle(cellStyle); 
			}
			
			Cell cell = row.createCell(0);
			cell.setCellValue(title);
			//sheet.setDefaultColumnStyle(0, cellStyle);
			cell.setCellStyle(cellStyle);
			sheet.addMergedRegion(region);//merge cells
			rowindex++;
		}
		Row row = sheet.createRow(rowindex);
		for(int i=0;i<chs.length;i++){ 
			sheet.createFreezePane(0, 2, 0, 2);// freeze cells
			Cell cell = row.createCell(i);
			cell.setCellValue(chs[i].getName());
		}
		
		for(int j=0;j<dataMapList.size();j++){
			row = sheet.createRow(j+rowindex+1);
			for(int k=0;k<chs.length;k++){
				Cell dataCell = row.createCell(k);
				Map<String, String> dataMap = dataMapList.get(j);
				String value = dataMap.get(chs[k].getName());
				if(value == null){
					result.addError(ExcelErrorEnum.HEADER_NOT_MATCH);
				} 
				Object convertValue = chs[k].getHeaderType().getConvertValue(value); 
				if(chs[k].getHeaderType().equals(HeaderType.BOOLEAN)){
					Boolean realValue  = (Boolean)convertValue;
					dataCell.setCellValue(realValue); 
				}else if(chs[k].getHeaderType().equals(HeaderType.DATE)){
					Date realValue  = (Date)convertValue;  
					dataCell.setCellValue(realValue);
					dataCell.setCellType(Cell.CELL_TYPE_NUMERIC);
					CellStyle cellStyle=ExcelStyle.createDataCellStyle(workbook);
					cellStyle = ExcelStyle.appendBorder(cellStyle);
					dataCell.setCellStyle(cellStyle);
				}else if(chs[k].getHeaderType().equals(HeaderType.DOUBLE)){
					Double realValue = (Double)convertValue;
					dataCell.setCellValue(realValue);
					dataCell.setCellType(Cell.CELL_TYPE_NUMERIC);
					CellStyle cellStyle=ExcelStyle.createNumberCellStyle(workbook);
					cellStyle = ExcelStyle.appendBorder(cellStyle);
					dataCell.setCellStyle(cellStyle);
				}else if(chs[k].getHeaderType().equals(HeaderType.TEXT)){
					dataCell.setCellValue((String)convertValue);
					CellStyle cellStyle=ExcelStyle.createTextCellStyle(workbook);
					cellStyle = ExcelStyle.appendBorder(cellStyle);
					dataCell.setCellStyle(cellStyle);
				}else if(chs[k].getHeaderType().equals(HeaderType.STRING)){
					dataCell.setCellValue((String)convertValue);
				}else{
					dataCell.setCellValue((String)convertValue);
				} 
			}
		}
		return result;
	}
}



this is the excel writer, add the cell style, and merge cells and freeze cells. very beautiful function.
分享到:
评论

相关推荐

    POI报表导出excel

    在这个“POI报表导出excel”的案例中,我们将深入探讨如何使用POI 3.6版本来实现报表的导出,包括设置Excel样式、合并单元格以及处理多表头的合并。 首先,我们需要了解Apache POI的核心组件:HSSFWorkbook(用于...

    POI的EXCEL导出,自动换行

    通过以上步骤,我们成功地实现了使用Apache POI在Java中导出Excel文件,并实现了自动换行的功能。这种方式不仅可以提高工作效率,还能确保数据的准确性和完整性。 #### 六、注意事项与优化建议 - **兼容性问题**:...

    poi导入导出Excel通用工具类 兼容xls,xlsx

    总结,"poi导入导出Excel通用工具类 兼容xls,xlsx"这个工具实现了利用Apache POI库处理Excel文件的功能,涵盖了从旧版的.xls到新版的.xlsx格式,提供了方便的导入和导出接口,使得在Java开发中处理Excel数据变得...

    使用poi导入导出excel的相关包.rar

    标题提到的"使用poi导入导出excel的相关包.rar"是一个包含多种POI库的压缩包,适用于进行Excel文件的导入和导出操作。 该压缩包中的文件包括: 1. poi-ooxml-full-5.0.0.jar 和 poi-ooxml-lite-5.0.0.jar:这两个都...

    java 利用poi导出EXCEL

    本主题将深入探讨如何使用POI库导出EXCEL表格,以及如何结合提供的关键代码实现这一功能。 首先,我们需要理解Apache POI库的核心组件——HSSF(Horrible Spreadsheet Format)用于处理.xls格式的Excel文件,而XSSF...

    导出excel文档所需要的poi的jar包

    标题提到的"导出excel文档所需要的poi的jar包"正是指这个功能。 Apache POI的版本3.8是较早的一个稳定版本,尽管现在已经有更新的版本,但3.8版本仍然广泛使用。这里提到了三个核心的jar包: 1. poi-3.8.jar:这是...

    poi导出excel所需jar

    "poi导出excel所需jar"这个标题表明我们正在讨论使用POI库来导出Excel文件时所需的依赖文件。下面将详细介绍这些jar包的功能及其在导出Excel过程中的作用。 1. **poi-ooxml-schemas-3.8-20120326.jar**:此jar包包...

    java导出excel及POI3.10jar包

    Java导出Excel是Java开发中常见的一...在使用POI 3.10进行Java导出Excel的过程中,记得关注官方文档和社区更新,以便获取最新的信息和支持。此外,合理使用缓存和流式处理技术可以进一步优化性能,避免内存溢出等问题。

    poi导出Excel

    本篇将详细介绍如何利用 POI 导出 Excel。 首先,你需要在项目中引入 POI 工具包。你可以通过 Maven 或者直接下载 JAR 包来添加依赖。如果你使用 Maven,可以在项目的 `pom.xml` 文件中添加以下依赖: ```xml ...

    POI导出EXCEL经典实现必备jar包poi-3.0.2

    **导出Excel的基本步骤:** 1. **创建Workbook对象:** 使用HSSFWorkbook或XSSFWorkbook类,根据目标文件格式选择合适的类。 2. **创建Sheet对象:** 在Workbook中添加Sheet,代表Excel工作表。 3. **创建Row对象:*...

    POI实现excel导入导出

    导出Excel文件: 1. **创建Workbook和Sheet**:首先,你需要创建一个新的Workbook实例,然后根据需求创建Sheet。 2. **添加Row和Cell**:在Sheet上添加Row,然后在Row中添加Cell。可以通过`Sheet.createRow(int ...

    导出excel-兼容2007

    总结来说,"导出excel-兼容2007"涉及到使用Apache POI库在Java中生成.xlsx格式的Excel文件,以确保与Excel 2007及更高版本的兼容性。这需要正确配置项目的类路径,包含必要的jar包,并使用提供的API来创建、填充和...

    poi-3.9 使用poi技术处理Excel表导入、导出的包

    导入和导出Excel表是Apache POI的核心功能。下面,我们将深入探讨如何使用POI 3.9处理Excel的相关知识点: 1. **工作簿与工作表**: - **工作簿**:在POI中,工作簿(HSSFWorkbook 或 XSSFWorkbook)代表整个Excel...

    POI实现Excel导出功能

    Apache POI是一个强大的...在项目中使用POI实现Excel导出功能时,记得根据实际情况调整代码,处理异常,优化性能,并测试不同版本的Excel文件兼容性。通过持续学习和实践,你将能够熟练掌握这项技能,提高工作效率。

    java 导出excel,带图片的Excel导出

    在Java编程中,导出Excel是一项常见的任务,特别是在数据分析、报表生成或数据交换等领域。而带图片的Excel导出则增加了复杂性,因为涉及到二进制数据的处理和Excel特定格式的支持。以下是一些关于如何在Java中实现...

    POI批量导入导出

    在导出方面,POI能够根据业务需求生成包含大量数据的Excel文件,可以自定义样式、颜色、字体等,使得导出的文件既实用又美观。在批量导出时,尤其适用于需要将数据库查询结果或者处理后的数据以Excel形式分发给用户...

    poi导入导出及spring

    ### POI导入导出及Spring框架综合应用 #### 一、Apache POI简介与核心功能 Apache POI是Apache软件基金会的Jakarta项目中的一个子项目,它为Java程序员提供了一组API,使得他们能够使用Java来操作Microsoft Office...

    POI导出EXCEL经典实现

    在这个"POI 导出 EXCEL 经典实现"的话题中,我们将探讨如何使用 Apache POI 来创建一个简单的 Excel 文件导出功能。 首先,你需要从 Apache POI 的官方网站(http://poi.apache.org/)下载对应的 JAR 包。在示例中...

    Excel导出数据(根据Excel模板定义)

    在IT行业中,Excel作为一种强大的电子表格工具,常用于数据分析、报告制作和数据交换。"Excel导出数据(根据Excel模板定义)...使用Apache POI库,我们可以实现根据预设模板动态生成和导出Excel文件,满足各种业务需求。

    poi jxl 生成EXCEL 报表

    POI允许开发者通过Java代码创建复杂的Excel表格,包括单元格样式、公式、图表等。 1. **POI使用基础**: - 创建Workbook对象,它是Excel文件的容器。 - 创建Sheet对象,代表Excel工作簿中的单个工作表。 - 在...

Global site tag (gtag.js) - Google Analytics