`
53873039oycg
  • 浏览: 841344 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

poi导出excel报表(备忘)

 
阅读更多

     poi导出excel这种很多人写,我写的也是导出excel,代码网上一搜一大把,我也不上传了,简单的讲下导出excel的思路。本文是写给自己备忘的,可以不用看。

    前提条件:

    报表是固定的,数据只统计最近的15天,数据量很小。

 

    (一)创建报表模板

     因为报表格式是固定的,所以可以采用模版导出的方式,可以手动创建模版,我第一次做的时候只给了我个截图,作为程序员能用代码就用代码,所以写了个简单的类来创建报表模版。

    用于报表大部分是2列的,有合并表头的情况存在,自己定义的表头数据格式为(只支持表头<=2行的):

   

测试调查公司#2#1$

   格式:表头标题名#跨2行#跨1列$

 

    然后自己解析,创建表头,这很容易就实现了,效果如下:

   

 

 

   (二)调整报表模版

    使用代码由于要兼容大部分报表情况,有些列宽度设置的不是很合理,需要手动调整,看到这里,请不要吐槽说我的方法又是个手动完成的,没全部用代码,谢谢。

 

    调整后的样式为:

   

 

  (三)插入数据

   这部分对于大部分程序员来说太容易了,给个JavaBean使用反射一下就OK了,So easy!

   我的报表要求是对于某些连续列在数据相同情况下要求合并,这就有问题了。

   问题1:表头下的数据要和表头列一致,最下面的表头如果有合并n列为1列的情况发生,数据也要这样做

  

   问题2:相同列在跨行合并时候可能列有合并n列为1列的情况。

 

   解决方法:

   问题1:得到报表excel报表某个sheet页下所有的合并区域,在写数据时候注意数据和最下面的表头一致,该合并的合并就OK了。

    

/**
	 * 得到sheet页中所有的合并区域
	 * @param sheet
	 * @return
	 */
	public Map<String, Integer> getSheetMergeRegion(XSSFSheet sheet) {
		int num = sheet.getNumMergedRegions();
		Map<String, Integer> mergMap = new TreeMap<String, Integer>();
		CellRangeAddress cellR = null;
		String str = null;
		for (int i = 0; i < num; i++) {
			cellR = sheet.getMergedRegion(i);
			// 最后一行+第一列,最后一列
			str = cellR.getLastRow() + "#" + cellR.getFirstColumn();
			mergMap.put(str, cellR.getLastColumn());
		}
		return mergMap;
	}

 

   问题2:对于已经有合并n列为1列的情况,由于要合并相同列下n行为1列,先把报表excel某个sheet页下要合并的列拆分为n列单元格,在合并单元格。

  

   得到所有合并区域的id,方便删除,有删除操作时候每次必须取最新的合并区域信息,否则删除时候报错。

public Map<String, Integer> getSheetMergeRegionIndex(XSSFSheet sheet) {
		int num = sheet.getNumMergedRegions();
		Map<String, Integer> mergMap = new TreeMap<String, Integer>();
		CellRangeAddress cellR = null;
		String str = null;
		for (int i = 0; i < num; i++) {
			cellR = sheet.getMergedRegion(i);
			// 最后一行+第一列,id
			str = cellR.getLastRow() + "#" + cellR.getFirstColumn();
			mergMap.put(str, i);
		}
		return mergMap;
	}

   对于已合并过的单元格,再合并是没有效果的,所以需要先把合并过的单元格拆分在一起合并。

// 合并单元格
//拆分 再合并 注意复制单元格样式
	public void splitAndMergeCells(XSSFSheet sheet, int startRow, int endRow,
			int startCell, int endCell) {
		XSSFCellStyle tmpCellStyle = null;
		XSSFRow tmpRow = sheet.getRow(startRow);
		XSSFCell tmpCell = tmpRow.getCell(startCell);
		String tmpValue = tmpCell.getStringCellValue();
		tmpCellStyle = tmpCell.getCellStyle();
		Map<String, Integer> indexMap=new HashMap<String, Integer>();
		String tmpKey = null;
		String tmpKey2 = null;
		for (int r = startRow; r <= endRow; r++) {
			//用于有删除合并单元格,每次取最新的单元格信息
			indexMap = getSheetMergeRegionIndex(sheet);
			for (Map.Entry<String, Integer> map : indexMap.entrySet()) {
				tmpKey = map.getKey();
				tmpKey2 = new String(r + "#" + startCell);
				if (tmpKey.equals(tmpKey2)) {
					//删除合并的单元格
					sheet.removeMergedRegion(map.getValue());
				}
			}
			indexMap = null;
		}
		tmpRow = sheet.getRow(startRow);
		tmpCell = tmpRow.getCell(startCell);
		tmpCell.setCellValue(tmpValue);
		tmpCell.setCellStyle(tmpCellStyle);
		sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, startCell,
				endCell));
	}

 

   报表导出效果如下:

 

 

   

     本文系原创,转载请注明出处,估计也没人转载,谢谢。

    全文完。

 

  • 大小: 201.7 KB
  • 大小: 165.8 KB
  • 大小: 137.6 KB
  • 大小: 49.1 KB
0
1
分享到:
评论

相关推荐

    POI导出Excel报表

    用于导入导出Excel,方便好用 支持动态用流写至客户端

    POI导出Excel文件

    以下是一个简化的示例,演示了如何使用POI导出Excel: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io....

    使用ITEXT导出PDF、WORD,APACHE POI导出EXCEL报表文件

    本文将深入探讨如何使用ITEXT库导出PDF和Word,以及利用Apache POI库导出Excel报表文件。 首先,让我们来了解ITEXT库。ITEXT是一个开源Java库,专门用于创建和修改PDF文档。使用ITEXT,你可以方便地生成包含文本、...

    java使用POI导出 Excel工具类

    java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。

    POI导出Excel表格

    在这个“POI导出Excel表格”的实例中,我们将深入探讨如何利用Apache POI进行Excel文件的导入与导出操作。 首先,我们需要在项目中集成Apache POI库。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```...

    java poi导出excel

    在Java中,如果你需要导出Excel文件,Java POI是一个非常实用的工具。下面将详细介绍如何使用Java POI来实现Excel的导出。 1. **引入依赖** 在Java项目中使用POI,首先需要在项目的构建文件(如Maven的pom.xml或...

    POI报表导出excel

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

    poi导出excel生成下拉列表

    poi作为导出excel常用的工具,方便快捷。对于excel指定下拉列表的列,如何生成呢?本文提供如何生成下拉列表的excel列

    POI导出 POI导出 POI导出

    POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI导出POI...

    poi导出excel需要的jar

    "poi导出excel需要的jar"指的是在使用Apache POI进行Excel导出时,你需要包含特定的JAR依赖文件。 首先,要实现POI导出Excel的功能,你需要下载Apache POI相关的JAR文件。这些文件通常包括以下核心组件: 1. **poi...

    Java使用POI实现Excel报表的导入和导出

    ExportExcel类为导出Excel报表通用类。 1.将源代码导入eclipse中 2.部署项目,启动tomcat服务器 3.web页面具体路径:http://localhost:80/poi 4.点击Read excel 2003 or 2007,可以读取2003或2007版Excel 5.点击...

    poi导出根据模板导出excel和简单列表导出excel源码

    在本案例中,我们关注的是如何使用 Apache POI 库来导出 Excel 文件,特别是根据模板导出和简单列表导出。下面将详细介绍这个过程。 1. **Apache POI 概述** Apache POI 提供了 Java API 来读写 Microsoft Office ...

    poi导出excel参考方法

    POI导出Excel参考方法 POI(Poor Obfuscation Implementation)是一个Java的API,用于操作Microsoft Office文档,包括Excel、Word、PowerPoint等。下面是POI导出Excel参考方法的相关知识点: 1. POI的基本概念 ...

    Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)

    Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)

    springboot+poi导出指定格式Excel模板

    springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式...

    POI的EXCEL导出,自动换行

    ### POI的EXCEL导出,自动换行 在日常工作中,经常需要处理大量的数据导入导出任务,...无论是简单的数据导出还是复杂的报表生成,POI都能够提供相应的解决方案。希望本文能够帮助大家更好地理解和使用Apache POI。

    poi导出excel表格

    本教程将详细讲解如何使用Apache POI在Web环境中导出Excel表格,避免生成不必要的临时文件,从而优化系统资源管理。 一、Apache POI简介 Apache POI 是一个开源项目,它提供了Java API来处理Microsoft的Office格式...

    Java实现POI导出Excel

    Java实现POI导出Excel是Java开发者常用的一种技术,用于生成和操作Microsoft Office Excel文件。在Java中,Apache POI库提供了对微软Office文档格式的支持,包括读取和写入Excel文件。这篇博客文章...

    POI导出Excel工具类,自动设置标题 列名 文件名,可插入图片,合并单元格

    在这个场景中,我们关注的是如何使用POI来创建一个功能丰富的Excel导出工具类,它能够自动设置标题、列名、文件名,并且支持插入图片以及合并单元格。下面将详细介绍这些功能的实现。 首先,要创建一个Excel工作簿...

Global site tag (gtag.js) - Google Analytics