`
江雨行
  • 浏览: 24548 次
文章分类
社区版块
存档分类
最新评论

导出Excel封装类(POI实现)

 
阅读更多

 package com.yuxinglab.poi.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
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.usermodel.WorkbookFactory;

/**
 * Excel模版类 提供Excel模版文件,找到"datas"所在位置,以此作为数据插入位置
 * 
 * @author yuxing
 * 
 */
public class ExcelTemplate {
	private static ExcelTemplate excelTemplate = new ExcelTemplate();
	private Workbook workbook;
	private int initColIndex; // 数据的初始化列数
	private int initRowIndex; // 数据的初始化行数
	private int curColIndex; // 数据当前列数
	private int curRowIndex; // 数据当前行数
	private Row curRow; // 当前行
	private Sheet sheet;

	private ExcelTemplate() {
	}

	public static ExcelTemplate getInstance() {
		return excelTemplate;
	}

	public final static String DATA_BEGIN = "datas";

	// 读取模版
	public ExcelTemplate readExcelTemplateFromClassPath(String path) {
		try {
			workbook = WorkbookFactory.create(ExcelTemplate.class
					.getResourceAsStream(path));
			initTemplate();
		} catch (InvalidFormatException e) {
			e.printStackTrace();
			throw new RuntimeException("读取模版文件失败!请检查文件格式.");
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("模版文件不存在!请检查.");
		}
		return this;
	}

	public ExcelTemplate readExcelTemplateFromPath(String path) {
		try {
			workbook = WorkbookFactory.create(new File(path));
			initTemplate();
		} catch (InvalidFormatException e) {
			e.printStackTrace();
			throw new RuntimeException("读取模版文件失败!请检查文件格式.");
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("模版文件不存在!请检查.");
		}
		return this;
	}

	private void initTemplate() {
		sheet = workbook.getSheetAt(0);
		initConfigData();
		createRow();

	}

	private void initConfigData() {
		boolean flag = false;
		for (Row row : sheet) {
			if (flag) {
				break;
			}
			for (Cell c : row) {
				if (c.getCellType() != c.CELL_TYPE_STRING) {
					continue;
				}
				String str = c.getStringCellValue().trim();
				if (str.equals(DATA_BEGIN)) {
					initColIndex = c.getColumnIndex();
					initRowIndex = row.getRowNum();
					curColIndex = initColIndex;
					curRowIndex = initRowIndex;
					flag = true;
					break;
				}

			}
		}
	}

	public static void main(String[] args) {
		ExcelTemplate excelTemplate = getInstance().readExcelTemplateFromPath(
				"d:/template.xls");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createCell("111");
		excelTemplate.createRow();
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createCell("222");
		excelTemplate.createRow();
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createCell("333");
		excelTemplate.createRow();
		excelTemplate.writeToFile("d:/01.xls");
	}

	public void createCell(String value) {
		curRow.createCell(curColIndex).setCellValue(value);
		curColIndex++;
	}

	public void createRow() {
		curRow = sheet.createRow(curRowIndex);
		curRowIndex++;
		curColIndex = initColIndex;

	}

	public void writeToFile(String filePath) {
		FileOutputStream fileOutputStream = null;
		try {
			fileOutputStream = new FileOutputStream(filePath);
			workbook.write(fileOutputStream);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			throw new RuntimeException("写入的文件" + filePath + "不存在!");
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("写入数据失败:"+e.getMessage());
		} finally {
			try {
				if (fileOutputStream != null) {
					fileOutputStream.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	public void writeToStream(OutputStream outputStream) {
		try {
			workbook.write(outputStream);
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException("写入流失败:"+e.getMessage());
		}
	}
}

 对于web应用,可以使用如下代码:

response.setContentType("application/vnd.ms-excel");
		response.setHeader("Content-disposition",
				"attachment;filename=file.xls");
		OutputStream ouputStream = null;
		try {
			ouputStream = response.getOutputStream();
			excelTemplate.writeToStream(ouputStream);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				ouputStream.flush();
				ouputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

 效果如下:

  Excel最大行数65536!

 注意jar包是否冲突!

  

  • 大小: 25.7 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    自定义动态导出excel封装类

    本文将详细讲解如何实现一个自定义的动态导出Excel封装类,以满足各种不同的需求。 首先,我们要理解为什么要自定义封装Excel导出。通常,Java开发中可以使用Apache POI库或JExcelAPI等第三方库来操作Excel。这些库...

    java使用POI导出 Excel工具类

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

    使用POI,实现excel文件导出,图片url导出文件,图片和excel文件导出压缩包

    使用POI导出Excel文件** 导出Excel文件主要涉及以下几个步骤: - **创建Workbook对象**:这是Excel文件的容器,可以使用`XSSFWorkbook`(针对.xlsx)或`HSSFWorkbook`(针对.xls)创建。 - **创建Sheet对象**:...

    easyuiPoi导出Excel工具类封装(支持合并单元格)

    在EasyUIPoI中,导出Excel的过程被封装成了一套简单的API。首先,你需要创建一个模板文件,定义好Excel的结构和样式,例如单元格的合并、字体、颜色等。模板文件可以使用Microsoft Excel来创建,保存为`.xlsx`格式,...

    poi导出excel通用类

    标题“poi导出excel通用类”指的是使用Apache POI库创建一个可以用于导出Excel文件的Java类。Apache POI是开源项目,提供了一组API,使得开发者可以在Java应用程序中读写Microsoft Office格式的文件,包括Excel。在...

    POI实现excel导入导出

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

    poi导出导入封装(使用注解建立实体与excel映射关系+反射设置实体属性值)

    poi导出导入封装(使用注解建立实体与excel映射关系+反射设置实体属性值), poi导出导入封装(使用注解建立实体与excel映射关系+反射设置实体属性值) poi导出导入封装(使用注解建立实体与excel映射关系+反射设置...

    poi 导出多表头

    总之,利用 Apache POI 实现多表头的 Excel 导出,需要理解 POI API,合理组织数据结构,以及灵活运用单元格合并和样式设置。结合提供的代码文件,你可以进一步研究和学习如何在实际项目中应用这些技术。

    poi导出excel demo

    在本示例中,"poi导出excel demo"指的是使用Apache POI库创建和导出Excel文件的演示。这个项目可能包含了一个或多个Java源代码文件,展示了如何使用POI API来生成Excel工作簿、工作表、单元格等内容。 Apache POI ...

    java 使用poi导出excel工具类

    java的poi的导入工具类,只需要传入两个arrayList,一个是execl的标题,一个是ececl的数据,就可以直接导出到execl里面,支持最新的execl,全新封装的,让每一个人都会使用poi导出execl!

    POI导出Excel表格

    通过上述步骤,你可以使用Apache POI结合Struts 2实现从Java Web应用中导出Excel报表的功能。这个过程涉及到了Java编程、面向对象设计、Web框架和文件处理等多个技术领域,对于Java开发者来说是一项非常实用的技能。

    使用ITEXT导出EXCEL工具类

    总结来说,使用ITEXT导出Excel虽然不是其主要功能,但通过创建模拟Excel结构的PDF文档并转换,可以实现这一目标。不过,这种方式可能不如直接使用Apache POI等专门的Excel处理库那么高效和灵活。在实际开发中,应...

    基于poi的excel导入导出封装

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

    注解式excel导出/导入(poi)

    自己封装的excel导出/导入,可以根据注解来导出excel.本项目一共有13个类,里面还包含了一个反射工具,一个编码工具,10分值了。下面是测试代码 public class Test { public static void main(String[] arg) throws ...

    Java poi 实现excel导入导出

    **导出Excel数据:** 1. **创建Workbook对象**:使用`WorkbookFactory.create()`或`new XSSFWorkbook()`(对于.xlsx)创建一个新的Excel文件。 2. **添加Sheet对象**:调用Workbook的`createSheet()`方法创建新的...

    poi导出复杂excel

    总的来说,Apache POI为Java开发者提供了一套强大的工具,可以方便地处理Excel文件,实现各种复杂的操作,包括创建和导出带有合并行和列的表头。对于大型企业或数据分析应用,这种能力尤为关键,因为它可以极大地...

    Poi导出Excel工具类

    在这个场景中,"Poi导出Excel工具类"是一个已经封装好的Java类,设计用于高效地导出大量数据到Excel文件中,并且支持多sheet页的布局。这个工具类简化了开发过程,使得开发者无需关心底层细节,只需调用预定义的方法...

    java导入导出excel需要poi包

    标题中的"java导入导出excel需要poi包"指的是使用Apache POI库来实现Java程序对Excel文件的导入和导出功能。 Apache POI提供了丰富的API,使得开发者可以轻松地创建、修改和读取Excel文件。以下是使用POI进行Excel...

    Excel导出类封装

    具体到"导出Excel"这个文件,可能是一个示例代码或者已经封装好的类库,包含了上述的一些功能实现。例如,它可能包含一个`exportToExcel()`方法,接收一个数据列表和列名数组,然后利用POI库创建一个新的Excel工作簿...

    poi 导入导出Excel相关jar包

    在实际项目中,为了简化POI的使用,通常会封装一些工具类或者服务,提供简单的接口供其他模块调用,如批量导入数据到Excel、导出特定格式的报表等。同时,需要注意的是,处理大量数据时,由于内存占用问题,可能需要...

Global site tag (gtag.js) - Google Analytics