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); } }
相关推荐
这个2014年的稳定版本(poi-3.10.1)提供了对微软Office格式的强大支持,使得Java开发者能够以编程方式处理这些文件,极大地扩展了Java在企业级应用中的功能性。 首先,我们要了解JAVA-POI的核心功能。在Excel处理...
描述中提到的“Java-poi所需的jar包,poi导出Word文档、Execl文档”,这意味着这个压缩包里可能包含了一系列POI项目的jar文件,如poi-ooxml、poi-ooxml-schemas、poi-ooxml-lite等。这些jar文件分别对应不同的功能...
Java POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在Java环境中,如果你需要读取、写入或修改Excel文件,Java POI库是一个非常实用的工具。这里的"java-poi3.7"指的是...
这个"Java-POI-jar包"包含了处理这些文件所需的类和接口。下面将详细阐述Java POI的基本概念、主要功能、使用场景以及如何在项目中引入和使用。 1. **基本概念**: - **Apache POI**:Java POI是Apache的一个子...
java-poi-excel-导出20万条记录
Java使用Poi导出PPT幻灯片java-poi,示例使用XMLSlideShow和XSLFSlide创建了一页胶片,并导入了一张图片,最后通过write方法导出成PPT幻灯片文件。
Java-POI报表整合项目案例是Java开发中的一个重要实践,主要涉及到使用Apache POI库来创建、读取和编辑Microsoft Office格式的文件,尤其是Excel电子表格。在企业级应用中,这种技术常用于数据导入导出、自动化报表...
本示例“java-poi-excel-导出20万条记录【源代码】”展示了如何使用Apache POI库来高效地处理大数据量的Excel导出,避免内存溢出的问题。Apache POI是一个流行的开源Java API,用于读写Microsoft Office格式的文件,...
- **Apache POI-OOXML-Schemas**:包含了Office Open XML的Java类型定义。 综上所述,Java POI是一个强大且灵活的工具,适用于各种需要在Java中处理Microsoft Office文件的场景。正确理解和使用这个库,可以大大...
<artifactId>poi-ooxml <version>4.1.2 ``` 在生成带有图片的Excel文件时,主要涉及以下几个关键步骤: 1. **创建工作簿对象**:使用`WorkbookFactory.create()`方法创建一个新的Excel工作簿对象。例如: ```...
Java POI 是一个开源库,专门用于处理Microsoft Office格式的文件,如Word(.doc, .docx)、Excel(.xls, .xlsx)等。它提供了API,使得开发者能够使用Java编程语言创建、修改和读取这些文件。在这个“java-poi教你...
"java读取 word 所需 jar 包"可能包含了这些依赖,例如poi-ooxml、poi-ooxml-schemas和poi-ooxml-lite等。将这些JAR文件加入到项目的类路径中,才能正常使用POI库。 总的来说,Java POI为开发者提供了强大的工具,...
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...
POI无法读取到word每一段所在的页码。我给出了代码和所有的解释,用POI读取word中的页码。也算是小方法了,基本很准确,为什么要加一个基本呢?因为,分页标志符号在第一行为空白行的时候没有分页符!!所以你的文档...
Java中的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,包括Word文档。在这个“java--Poi 生成word文档”的示例中,我们将深入探讨如何利用POI库来生成Word文档。Apache POI提供...
在Java编程领域,Apache POI库是一个非常重要的工具,它允许开发者读取、写入和修改Microsoft Office格式的文件,包括Excel工作簿。本项目"ExcelImport.zip"专注于使用Java POI库处理Excel表格的导入与导出功能,...
<artifactId>poi-ooxml <version>4.1.2 ``` 2. **读取Excel文件**:使用POI API创建`Workbook`对象,通过`FileInputStream`读取Excel文件。例如: ```java FileInputStream fis = new FileInputStream(new File...
poi-3.x解析ppt和pptx内容