`

利用POI进行OFFICE的导入导出之EXECL导出

阅读更多
package com.util.report;

import java.util.Date;

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.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.Region;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;

import com.ibm.icu.text.SimpleDateFormat;

public abstract class ReportExcelUltity {

	private HttpServletResponse response;

	private HSSFWorkbook workbook;
	private HSSFSheet sheet;

	private HSSFRow row;

	private String fileName;

	private String[] header;

	private String title;
	
	private int lineNum;  //从0开始

	private HSSFCellStyle contentCellStyle;

	private int [][] storeWidth = new int[100][1];
	
	void setConfiguration(String fileName) {
		//response.setContentType("ms-excel");
		response.setContentType("application/ms-excel" );

		response.setHeader("Content-Disposition", "attachment;filename="
				+ fileName + ".xls");

		sheet = workbook.createSheet(fileName);
		
	}

	void setTitle() {
		HSSFCellStyle style = workbook.createCellStyle();
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);
		Font font = workbook.createFont();
		font.setFontHeightInPoints((short)16);
		font.setColor(HSSFColor.BLUE.index);
		font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
		font.setBoldweight((short)10);
		style.setFont(font);
		
		sheet.addMergedRegion(new Region(0,(short)0,1,(short)(header.length-1))); //标题
		sheet.addMergedRegion(new Region(2,(short)0,2,(short)(header.length-1)));//时间
		//第几行,第几个单元格,第几行,第几个单元格(从0开始)
		sheet.createFreezePane( 2, 4);  //列数,行数(从1开始)
		HSSFRow row = sheet.createRow(0); //从0开始
		HSSFCell cell = row.createCell(0); //从0开始
		cell.setCellValue(this.title);
		cell.setCellStyle(style);
		
		 row = sheet.createRow(2); //从0开始
		 cell = row.createCell(0); //从0开始
		 cell.setCellValue(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
		 style= workbook.createCellStyle();
		 style.setAlignment(HSSFCellStyle.ALIGN_RIGHT);
		 
		 cell.setCellStyle(style);
		 
		lineNum = 2;
	}

	void setHeader(String[] headers) throws Exception {

		row = sheet.createRow(++lineNum);

		HSSFCellStyle style = workbook.createCellStyle();
		style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);
		style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
		Font font = workbook.createFont();
		font.setColor(HSSFColor.YELLOW.index);
		font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
		style.setFont(font);
		
		for (int i = 0; i < headers.length; i++) {

			Cell cell = row.createCell(i);
			cell.setCellValue(headers[i]);	
			cell.setCellStyle(style);
			setMaxWidth(i, headers[i]);
		}

	}

	public abstract void setContent() throws Exception;

	public ReportExcelUltity(HttpServletResponse response) {
		this.response = response;
		try {
			workbook = new HSSFWorkbook();
			contentCellStyle = this.getWorkbook().createCellStyle();
			contentCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public void export(String fileName, String title, String[] header) {
		try {

			this.fileName = fileName;
			this.header = header;
			this.title = title;
			setConfiguration(fileName);
			setTitle();
			setHeader(header);
			setContent();
			handleLast();
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				releaseResource();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	private void handleLast() throws Exception {
		// TODO Auto-generated method stub
		for (int j = 0; j < header.length; j++) {
			storeWidth[j][0] = storeWidth[j][0] == 0?1:storeWidth[j][0];
			if (storeWidth[j][0] < 4){ 
				getSheet().setColumnWidth(j,(storeWidth[j][0])*800);			
			}if(storeWidth[j][0] > 255){
				getSheet().setColumnWidth(j,(storeWidth[j][0]));			
			}
			else
				getSheet().setColumnWidth(j,(storeWidth[j][0])*400);
			}
		workbook.write(response.getOutputStream());
	}

	public void releaseResource() throws Exception {
		
		response.getOutputStream().flush();
		response.getOutputStream().close();
	}

	public HSSFWorkbook getWorkbook() {
		return workbook;
	}

	public int getLineNum() {
		return lineNum;
	}

	public void setLineNum(int lineNum) {
		this.lineNum = lineNum;
	}

	public void  setMaxWidth(int index,String str){  //设置每列的最大宽度
		
		if (!StringUtils.isBlank(str) && storeWidth[index][0] < str.length()) {
			storeWidth[index][0] = str.length();
		}
	}

	

	public HSSFSheet getSheet() {
		return sheet;
	}

	/**
	 * 增加单元格,填充内容
	 * @param row
	 * @param desc
	 * @param index
	 * @return
	 */
	public  Cell addCell(Row row,String desc,int index) {
		// TODO Auto-generated method stub
		Cell cell = row.createCell(index);
		cell.setCellValue(desc);
		cell.setCellStyle(contentCellStyle);
		setMaxWidth(index, desc);
		return cell;
	}
	
	protected Row getNextRow(){
		
		return workbook.getSheet(fileName).createRow(++lineNum);
	}
	

}
 @SuppressWarnings("unchecked") public String getDataExcelAndPdf(AuditRecord record, String condiftion) { Class auditClass = record.getClass(); Method methods[] = auditClass.getDeclaredMethods(); String resultString = ""; for (Method methodMeta : methods) { if (methodMeta.getName().startsWith("get")) { if (methodMeta.getName().substring(3).toUpperCase().equals( condiftion.toUpperCase())) { try { Object o = methodMeta.invoke(record); if (o != null) { resultString += (o.toString()); } } catch (Exception e) { e.printStackTrace(); } } } } return resultString; }
 chinese代表第一行的中文名称,english代表数据列对应的英文名称
String chinese = ServletActionContext.getRequest().getParameter("chinese");
String engish = ServletActionContext.getRequest().getParameter("english");
			// 此处根据exportRows 去数据库中查询数据,设置到exportRows中
			exportRows = getAllReportRecord(tableName);
			chineseArray = chinese.split(",");
			englishArray = engish.split(",");
			HttpServletResponse response = ServletActionContext.getResponse();
			new ReportExcelUltity(response) {
				@Override
				public void setContent() throws Exception {
					// TODO Auto-generated method stub
	
					CellStyle cellStyle = this.getWorkbook().createCellStyle();
					cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
	
					for (int i = 0; i < exportRows.size(); i++) {
						Row row = getNextRow();
						int n = 0;
						for (String string : englishArray) {
							if (string.equals("srcIp"))
								string = "srcToString";
							else if (string.equals("destIp"))
								string = "destToString";
							addCell(row, getDataExcelAndPdf(exportRows.get(i),string), n++);
						}
	
					}
				}
	
			}.export("AuditBSReport", "AuditBSReport", chineseArray);

 

下面是导出的类POI

 

 

分享到:
评论

相关推荐

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    POI实现Excel导入导出并附带加载进度条

    Apache POI是一个强大的库,它允许开发者使用Java来读取、写入和修改Microsoft Office格式的文件,包括Excel(.xlsx, .xls)。本项目通过Apache POI实现了Excel的导入与导出功能,并在操作过程中加入了进度条展示,...

    SSM框架利用poi导入导出Excel文件 demo

    在本示例"SSM框架利用poi导入导出Excel文件 demo"中,我们将探讨如何在SSM项目中使用Apache POI库来实现Excel文件的导入与导出功能。 Apache POI是一个流行的开源库,它允许开发者在Java应用程序中创建、修改和显示...

    excel poi工具类 导入 导出 合并单元格 计算公式

    这个“excel poi工具类”是利用Apache POI库来实现对Excel文件进行导入、导出、合并单元格以及处理计算公式的功能。下面我们将深入探讨这些知识点。 **1. Apache POI库介绍** Apache POI是一个开源项目,它为Java...

    POI实现excel导入导出

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

    Java poi 实现excel导入导出

    在提供的“java-excel导入导出”压缩包中,可能包含了示例代码、说明文档以及测试数据,可以帮助初学者快速理解和使用Java POI进行Excel操作。通过学习和实践这些示例,你可以掌握Java POI库的基本用法,并能灵活...

    JAVA实现数据库数据导入导出到Excel(POI)所需jar包

    Apache POI是一个流行的API,专为处理Microsoft Office格式的文件,如Excel(.xlsx, .xls)。本教程将详细介绍如何使用POI库在Java中实现这一功能,并介绍所需的jar包。 首先,我们需要理解Apache POI的基本概念。...

    POI批量导入导出

    在批量导入导出过程中,POI允许程序创建、修改和保存Excel文件,包括设置工作表、单元格的各种属性。例如,可以创建新的工作簿,添加工作表,设定单元格的值,设置单元格样式,甚至处理公式和图表。这使得Java应用...

    SpringBoot +Mybatis +POI导入、导出Excel文件

    总的来说,"SpringBoot + Mybatis + POI导入、导出Excel文件"的项目是一个实用的工具,可以帮助开发者快速实现数据交换功能,提高工作效率。通过理解SpringBoot的自动配置、Mybatis的SQL映射以及POI的Excel操作,...

    Springboot+Poi实现Excel的导入导出

    1. **导出Excel**:首先,使用MyBatis执行SQL查询获取数据,然后通过POI创建一个Workbook对象,代表Excel工作簿。接着,创建Sheet对象表示工作表,并在其中添加Row和Cell来填充数据。最后,将Workbook写入到本地文件...

    java利用poi对excel进行导入导出

    Java POI 是一个开源库,专门用于处理Microsoft Office格式的文件,尤其是Excel。在Java世界中,当你需要读取、写入或者修改Excel文件时,POI库是首选工具之一。下面将详细介绍如何使用Java POI对Excel进行导入和...

    springboot+mybatis+poi 实现excel导入导出

    本篇文章将详细介绍如何利用SpringBoot和MyBatis结合Apache POI实现Excel的导入导出功能。 首先,SpringBoot是一个基于Spring框架的轻量级开发工具,它简化了新Spring应用的初始搭建以及开发过程。SpringBoot通过...

    利用poi实现导入导出Excel工具类

    标题"利用poi实现导入导出Excel工具类"指出我们将探讨如何利用Apache POI来创建一个工具类,用于在Java应用程序中方便地进行Excel文件的导入和导出操作。 Apache POI库提供了HSSF(处理.xls文件)和XSSF(处理.xlsx...

    用poi操作excele的导入导出

    在Java编程环境中,Apache POI库是一个非常实用的工具,它允许开发者读取、创建、修改Microsoft Office格式的文件,包括Excel...通过熟练掌握Apache POI,开发者可以方便地实现Excel的导入导出功能,提高工作效率。

    POI千万级导入导出EXCEL工具.zip

    标题中的“POI千万级导入导出EXCEL工具”指的是使用Apache POI库来处理大量数据的Excel导入和导出功能。Apache POI是Java语言中用于读写Microsoft Office格式档案的开源库,特别是Excel(XLS和XLSX)文件。在大数据...

    poi_excel导入导出各种excel文件实例

    Apache POI 是一个开源项目,专门用于处理 Microsoft Office 格式的文件,包括 Excel。这个实例主要探讨如何使用 Apache POI 库在 ...通过实践和不断学习,可以更熟练地运用 Apache POI 实现 Excel 文件的导入导出。

    基于poi的excel导入导出封装

    在"基于poi的excel导入导出封装"这个主题中,我们将深入探讨如何使用Apache POI库来实现Excel文件的导入和导出功能。 **一、Apache POI基本概念** 1. **工作簿(Workbook)**: 在Apache POI中,工作簿是Excel文件...

    Java操作Excel之Poi模板导入导出

    在"Java操作Excel之Poi模板导入导出"这个主题中,我们将深入探讨如何使用POI库来处理Excel模板,并进行数据的导入和导出。 首先,了解Excel模板的基本概念。模板通常包含预定义的样式、格式和计算,开发人员可以...

Global site tag (gtag.js) - Google Analytics