`
philip01
  • 浏览: 47110 次
  • 来自: ...
社区版块
存档分类
最新评论
阅读更多
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
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.util.CellRangeAddress;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 报表设计思想是: 1、先设计Excel模板 2、通过文件名来找到对应的模板 3、子类实现填入对应数据
 * ClassName:ExcelTemplateReport
 * 
 * Function: TODO ADD FUNCTION Reason: TODO ADD REASON
 * 
 * @author springmvc2006@sina.com
 * @version
 * @since Ver 1.0.1
 * @Date 2012-10-31
 */
public class CopyOfExcelTemplateReport {
	protected Logger logger = LoggerFactory.getLogger(getClass());

	/**
	 * replaceExcelCell(主要是替换标记) (这里描述这个方法适用条件 – 可选)
	 * 
	 * @param inputStream
	 * @param sheetName
	 * @param map
	 * @throws Exception
	 * @exception
	 * @since 1.0.1
	 */
	public void replaceExcelCell(InputStream inputStream, String sheetName,
			Map<String, Object> map, OutputStream outputStream)
			throws Exception {
		HSSFWorkbook workbook = null;
		HSSFSheet worksheet = null;
		try {
			workbook = new HSSFWorkbook(inputStream);
			worksheet = workbook.getSheet(sheetName);
			HSSFRow hssfRow = null;
			HSSFCell hssfCell = null;
			String cellValue = null;
			String tmpValue = null;

			for (int i = 0, size = worksheet.getPhysicalNumberOfRows(); i < size; i++) {
				hssfRow = worksheet.getRow(i);
				if (hssfRow != null) {
					for (int j = 0, len = hssfRow.getLastCellNum(); j < len; j++) {
						hssfCell = hssfRow.getCell(j);
						cellValue = hssfCell.getStringCellValue();
						if (StringUtils.isNotEmpty(cellValue)) {
							if (cellValue.indexOf("#data_") > -1) {
								tmpValue = (String) map.get(cellValue.trim());
								if (StringUtils.isNotEmpty(tmpValue)) {
									hssfCell.setCellValue(tmpValue);
								} else {
									hssfCell.setCellValue("");
								}
							}
						}
					}
				}
			}
			workbook.write(outputStream);
			outputStream.flush();
		} catch (Exception e) {
			throw e;
		} finally {
			if (inputStream != null) {
				try {
					inputStream.close();
					inputStream = null;
				} catch (IOException e) {
				}
			}
		}
	}

	/**
	 * mergedRegion(合并单元格) (这里描述这个方法适用条件 – 可选)
	 * 
	 * @param inputStream
	 * @param sheetName
	 * @param mergedParams
	 *            void
	 * @exception
	 * @since 1.0.1
	 */
	public void mergedRegion(InputStream inputStream, String sheetName,
			List<MergedParam> mergedParams, OutputStream outputStream)
			throws Exception {
		HSSFWorkbook workbook = null;
		HSSFSheet worksheet = null;
		try {
			workbook = new HSSFWorkbook(inputStream);
			worksheet = workbook.getSheet(sheetName);
			if (mergedParams != null && mergedParams.size() > 0) {
				MergedParam mergedParam = null;
				CellRangeAddress cellRangeAddress = null;
				int startRow = -1;
				int endRow = -1;
				int startCol = -1;
				int endCol = -1;
				HSSFCellStyle cloneStyle = null;
				HSSFCellStyle tmpStyle = null;
				HSSFRow row_temp = null;
				HSSFFont font = null;
				for (int k = 0, size = mergedParams.size(); k < size; k++) {
					mergedParam = mergedParams.get(k);
					if (mergedParam == null) {
						continue;
					}
					startRow = mergedParam.getStartRow();
					endRow = mergedParam.getEndRow();
					startCol = mergedParam.getStartCol();
					endCol = mergedParam.getEndCol();
					cellRangeAddress = new CellRangeAddress(startRow, endRow,
							startCol, endCol);
					worksheet.addMergedRegion(cellRangeAddress);

					// 设置样式
					cloneStyle = mergedParam.getStyle();

					for (int i = startRow; i <= endRow; i++) {
						row_temp = getRow(worksheet, i);
						for (int j = startCol; j <= endCol; j++) {
							HSSFCell cell_temp = row_temp.getCell(j);
							if (cell_temp == null) {
								cell_temp = row_temp.createCell(j);
							}
							cloneStyle = cell_temp.getCellStyle();
							if (cloneStyle != null) {
								cloneStyle = workbook.createCellStyle();
							}
							tmpStyle = cell_temp.getCellStyle();
							cloneStyle.cloneStyleFrom(tmpStyle);
							
						    cloneStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
						    cloneStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
						    cloneStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
						    cloneStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
						    cloneStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中    
						    cloneStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中    
							// 单元格字体
							font = workbook.createFont(); 
						    if (mergedParam.isBold()) {
								font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
							}else{
								font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
							}
						    cloneStyle.setFont(font);
							cell_temp.setCellStyle(cloneStyle);
						}
					}
				}
			}
			workbook.write(outputStream);
			outputStream.flush();
		} catch (Exception e) {
			throw e;
		} finally {
			if (inputStream != null) {
				inputStream.close();
				inputStream = null;
			}
		}
	}
	
	
	/**
	 * addRow(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param startRow
	 * @param startCol
	 * @param dataList 
	 *void
	 * @exception 
	 * @since  1.0.1
	*/
	public void addRows(InputStream inputStream, String sheetName, int startRow, int startCol, List<List<String>> dataList, OutputStream outputStream)throws Exception {
		HSSFWorkbook workbook = null;
		HSSFSheet worksheet = null;
		try {
			workbook = new HSSFWorkbook(inputStream);
			worksheet = workbook.getSheet(sheetName);
			
			if (dataList != null && dataList.size() > 0) {
				HSSFRow row = null;
				HSSFCell cell = null;
				List<String> tmpList = null;
				String cellString = null;
				HSSFCellStyle cellStyle = worksheet.getWorkbook().createCellStyle();
				HSSFFont font = workbook.createFont();	
				font.setFontName("宋体");
				font.setFontHeight((short)200);
				cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直
				cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐	
				cellStyle.setFont(font);
				cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
				cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
				cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
				cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
				cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
				
				for(int i=startRow, size = startRow + dataList.size(); i < size; i++){
					row =getRow(worksheet, i);
					tmpList = dataList.get(i-startRow);
					if (tmpList != null && tmpList.size() > 0) {
						for (int j = startCol, len = startCol+tmpList.size(); j < len; j++) {
							cell = getCell(row, j);
							if (cellStyle != null) {
								cellStyle.setWrapText(true);   
								cell.setCellStyle(cellStyle);
							}
							cellString = tmpList.get(j-startCol);
							cell.setCellType(HSSFCell.ENCODING_UTF_16);
							cell.setCellValue(new HSSFRichTextString(cellString));
						}
					}
				}
			}
			workbook.write(outputStream);
			outputStream.flush();
		}catch (Exception e) {
			throw e;
		} finally {
			if (inputStream != null) {
				inputStream.close();
				inputStream = null;
			}
		}
	}

	/**
	 * getRow(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param workbook
	 * @param worksheet
	 * @param rowIndex
	 * @return HSSFRow
	 * @exception 
	 * @since  1.0.1
	*/
	private HSSFRow getRow(HSSFSheet worksheet,
			int rowIndex) {
		HSSFRow row = worksheet.getRow(rowIndex);
		if (row == null) {
			row = worksheet.createRow(rowIndex);
			row.setHeight((short) (300));
		}
		return row;
	}
	
	
	/**
	 * getRow(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param workbook
	 * @param worksheet
	 * @param rowIndex
	 * @return HSSFRow
	 * @exception 
	 * @since  1.0.1
	*/
	private HSSFCell getCell(HSSFRow row, int cellIndex) {
		HSSFCell cell = row.getCell(cellIndex);
		if (cell == null) {
			cell = row.createCell(cellIndex);
		}
		return cell;
	}

	/**
	 * writeOutput(这里用一句话描述这个方法的作用) (这里描述这个方法适用条件 – 可选)
	 * 
	 * @param inputStream
	 * @param outputStream
	 *            void
	 * @exception
	 * @since 1.0.1
	 */
	public void writeOutput(InputStream inputStream, OutputStream outputStream)
			throws Exception {
		HSSFWorkbook workbook = null;
		HSSFSheet worksheet = null;
		try {
			workbook = new HSSFWorkbook(inputStream);
			workbook.write(outputStream);
		} catch (Exception e) {
			throw e;
		} finally {
			if (inputStream != null) {
				inputStream.close();
				inputStream = null;
			}
			if (outputStream != null) {
				outputStream.close();
				outputStream = null;
			}
		}
	}
	
	/**
	 * writeOutputEx(这里用一句话描述这个方法的作用)
	 * (这里描述这个方法适用条件 – 可选)
	 * @param inputStream
	 * @param fileName
	 * @param request
	 * @param response
	 * @throws Exception 
	 *void
	 * @exception 
	 * @since  1.0.1
	 */
	public void writeOutputEx(InputStream inputStream, String fileName, HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		HSSFWorkbook workbook = null;
		HSSFSheet worksheet = null;
		try {
			workbook = new HSSFWorkbook(inputStream);
			
			response.reset(); 
			response.setCharacterEncoding("utf-8");  
			response.setContentType("application/x-msdownload ");  
		    if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0){
		    	try {
			    	fileName = new String(fileName.getBytes("utf-8"), "ISO8859-1");
				} catch (Exception e) {
				}
		    }else{
				try {
					fileName = URLEncoder.encode(fileName, "UTF-8");
				} catch (UnsupportedEncodingException e1) {
				} 
			}
			response.setHeader("Content-Disposition", "attachment;fileName="+fileName);  
			OutputStream os = null;
			try {
				os = response.getOutputStream();  
				workbook.write(os);
				os.flush();
			} catch (Exception e) {
				logger.error(e.toString());			
			}finally{
				try {
					os.close();
				} catch (IOException e) {
					logger.error(e.toString());
				}
				os = null;
			}
			
		} catch (Exception e) {
			throw e;
		} finally {
			if (inputStream != null) {
				inputStream.close();
				inputStream = null;
			}
		}
	}
	

	public static void main(String[] args) throws Exception {
		

		CopyOfExcelTemplateReport abstractReport = new CopyOfExcelTemplateReport();

		Map map = new HashMap();
		map.put("#data_value1", "事业");
		ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
		abstractReport.replaceExcelCell(new FileInputStream(
				"D:/log/人员信息统计报表.xls"), "人员信息统计报表", map, arrayOutputStream);

		
		//合并
		ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(
				arrayOutputStream.toByteArray());
		List<MergedParam> mergedParams = new ArrayList<MergedParam>();
		HSSFCellStyle cloneStyle = null;
		mergedParams.add(new MergedParam(20, 0, 39, 0, true));
		arrayOutputStream = new ByteArrayOutputStream();
		abstractReport.mergedRegion(arrayInputStream, "人员信息统计报表", mergedParams,
				arrayOutputStream);
		
		
		//加入列表
		arrayInputStream = new ByteArrayInputStream(
				arrayOutputStream.toByteArray());
		
		List<String> tmpStringList = null;
		List<List<String>> listData = new ArrayList<List<String>>();
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("1");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("ssss1sss");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("1");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("1");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("1");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("ssss1sss");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("1");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("1");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("1");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("ssss1sss");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("1");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("1");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("1");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("ssss1sss");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("1");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		
		
		tmpStringList = new ArrayList<String>();
		tmpStringList.add("1");
		tmpStringList.add("2");
		tmpStringList.add("3");
		tmpStringList.add("4");
		tmpStringList.add("5");
		listData.add(tmpStringList);
		
		arrayOutputStream = new ByteArrayOutputStream();
		abstractReport.addRows(arrayInputStream, "人员信息统计报表", 24, 1, listData, arrayOutputStream);
		arrayInputStream = new ByteArrayInputStream(arrayOutputStream.toByteArray());
		OutputStream outputStream = new FileOutputStream(new File("D:/log/人员信息统计报表1.xls"));		
		abstractReport.writeOutput(arrayInputStream, outputStream);
		

	
	}
}

 

  • 大小: 69.8 KB
分享到:
评论

相关推荐

    JAVA-POI, 最新版,提供微软office最全面的API

    这个2014年的稳定版本(poi-3.10.1)提供了对微软Office格式的强大支持,使得Java开发者能够以编程方式处理这些文件,极大地扩展了Java在企业级应用中的功能性。 首先,我们要了解JAVA-POI的核心功能。在Excel处理...

    java-POI相关jar包

    描述中提到的“Java-poi所需的jar包,poi导出Word文档、Execl文档”,这意味着这个压缩包里可能包含了一系列POI项目的jar文件,如poi-ooxml、poi-ooxml-schemas、poi-ooxml-lite等。这些jar文件分别对应不同的功能...

    java-poi3.7

    Java POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在Java环境中,如果你需要读取、写入或修改Excel文件,Java POI库是一个非常实用的工具。这里的"java-poi3.7"指的是...

    Java-POI-jar包

    这个"Java-POI-jar包"包含了处理这些文件所需的类和接口。下面将详细阐述Java POI的基本概念、主要功能、使用场景以及如何在项目中引入和使用。 1. **基本概念**: - **Apache POI**:Java POI是Apache的一个子...

    java-poi-excel-导出20万条记录

    java-poi-excel-导出20万条记录

    Java使用Poi导出PPT幻灯片java-poi

    Java使用Poi导出PPT幻灯片java-poi,示例使用XMLSlideShow和XSLFSlide创建了一页胶片,并导入了一张图片,最后通过write方法导出成PPT幻灯片文件。

    Java-POI报表整合项目案例

    Java-POI报表整合项目案例是Java开发中的一个重要实践,主要涉及到使用Apache POI库来创建、读取和编辑Microsoft Office格式的文件,尤其是Excel电子表格。在企业级应用中,这种技术常用于数据导入导出、自动化报表...

    java-poi-excel-导出20万条记录【源代码】

    本示例“java-poi-excel-导出20万条记录【源代码】”展示了如何使用Apache POI库来高效地处理大数据量的Excel导出,避免内存溢出的问题。Apache POI是一个流行的开源Java API,用于读写Microsoft Office格式的文件,...

    Java-poi操作需要的包.zip

    - **Apache POI-OOXML-Schemas**:包含了Office Open XML的Java类型定义。 综上所述,Java POI是一个强大且灵活的工具,适用于各种需要在Java中处理Microsoft Office文件的场景。正确理解和使用这个库,可以大大...

    Java-poi生成带有图片的Excel

    &lt;artifactId&gt;poi-ooxml &lt;version&gt;4.1.2 ``` 在生成带有图片的Excel文件时,主要涉及以下几个关键步骤: 1. **创建工作簿对象**:使用`WorkbookFactory.create()`方法创建一个新的Excel工作簿对象。例如: ```...

    java-poi教你如何生成office文档.7z

    Java POI 是一个开源库,专门用于处理Microsoft Office格式的文件,如Word(.doc, .docx)、Excel(.xls, .xlsx)等。它提供了API,使得开发者能够使用Java编程语言创建、修改和读取这些文件。在这个“java-poi教你...

    java-poi完美读写word(doc/docx)和TXT。附jar包

    "java读取 word 所需 jar 包"可能包含了这些依赖,例如poi-ooxml、poi-ooxml-schemas和poi-ooxml-lite等。将这些JAR文件加入到项目的类路径中,才能正常使用POI库。 总的来说,Java POI为开发者提供了强大的工具,...

    word源码java-java-poi:Word文档自动刷格式

    java-poi 轻松Word排版 关键字 轻松Word排版、自动刷格式、自动排版、自动刷文档、刷全文、整体格式、格式化整个文档 自动刷格式程序说明 自动格式化Word文档格式程序使用Java为基础语言,使用开源组件poi对Office ...

    Java开发案例-springboot-52-POI导出Excel-源代码+文档.rar

    Java开发案例-springboot-52-POI导出Excel-源代码+文档.rar Java开发案例-springboot-52-POI导出Excel-源代码+文档.rar Java开发案例-springboot-52-POI导出Excel-源代码+文档.rar Java开发案例-springboot-52-POI...

    JAVA-POI读取word每一段所在页码(附依赖jar包).zip

    POI无法读取到word每一段所在的页码。我给出了代码和所有的解释,用POI读取word中的页码。也算是小方法了,基本很准确,为什么要加一个基本呢?因为,分页标志符号在第一行为空白行的时候没有分页符!!所以你的文档...

    java--Poi 生成word文档

    Java中的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,包括Word文档。在这个“java--Poi 生成word文档”的示例中,我们将深入探讨如何利用POI库来生成Word文档。Apache POI提供...

    Excel.zip java-poi-excel 导入Import导出Goout excel表格

    在Java编程领域,Apache POI库是一个非常重要的工具,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel工作簿。本项目"ExcelImport.zip"专注于使用Java POI库处理Excel表格的导入与导出功能,...

    java-poi导出导入excel文件到数据库

    &lt;artifactId&gt;poi-ooxml &lt;version&gt;4.1.2 ``` 2. **读取Excel文件**:使用POI API创建`Workbook`对象,通过`FileInputStream`读取Excel文件。例如: ```java FileInputStream fis = new FileInputStream(new File...

    java-poi3.x-ppt

    poi-3.x解析ppt和pptx内容

Global site tag (gtag.js) - Google Analytics