`
vvv6628341
  • 浏览: 1599 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论
阅读更多
我们一般都用POI来做这个
首先 针对要导出的表 做excel的模板
然后 自己写一个工具类 来根据不同的表使用不同模板导出数据
前不久在一个项目中也有这种要求,写了一个类来处理
补充:
第168行至169行之间(即writeSheet(HSSFSheet sheet, ResultSet resultSet)方法第一句)加
resultSet.beforeFirst();
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.model.Workbook;

/**
 * Microsoft Excel 写入器。
 *
 * @author HeDYn
 * @version 0.1.2009-03-01
 */
public class ExcelWriter {
	
	private File xlsFile = null;
	private String dateFormat = null;
	
	private HSSFWorkbook workbook = null;
	private SimpleDateFormat dateFormatter = null;
	
	/**
	 * 创建一个Excel文件写入器,所有数据将写入到指定的xls文件中
	 *
	 * @param xlsFile 指定目标文件位置,原位置已存在同名文件将被覆盖
	 */
	public ExcelWriter(File xlsFile) {
		this(xlsFile, null);
	}
	
	/**
	 * 创建一个Excel文件写入器,所有数据将写入到指定的xls文件中;
	 * 写入日期时以指定格式形式写入
	 *
	 * @param xlsFile 指定目标文件位置,原位置已存在同名文件将被覆盖
	 * @param dateFormat 日期格式,如果为null则按本地日期格式
	 */
	public ExcelWriter(File xlsFile, String dateFormat) {
		this.xlsFile = xlsFile;
		workbook = new HSSFWorkbook();
		
		setDateFormat(dateFormat);
	}
	
	/**
	 * 返回Excel文件
	 *
	 * @return
	 */
	public File getFile() {
		return xlsFile;
	}
	
	/**
	 * 返回写入日期时所用的格式
	 *
	 * @return 格式化字符串
	 */
	public String getDateFormat() {
		return dateFormat;
	}
	
	/**
	 * 设置写入日期时采用的格式
	 *
	 * @param dateFormat 日期格式化字符串
	 */
	public void setDateFormat(String dateFormat) {
		this.dateFormat = dateFormat;
		if (dateFormat == null) {
			dateFormatter = new SimpleDateFormat();
		} else {
			dateFormatter = new SimpleDateFormat(dateFormat);
		}
	}
	
	/**
	 * 清空缓存,将数据写入物理存储介质
	 *
	 * @throws IOException
	 */
	public void flush() throws IOException {
		FileOutputStream fileOut = null;
		try {
			fileOut = new FileOutputStream(xlsFile);
			workbook.write(fileOut);
		} catch (IOException e) {
			throw e;
		} finally {
			fileOut.close();
		}
	}
	
	/**
	 * 新增一个工作薄并将数组中的数据写入
	 *
	 * @param data 需写入的数组数据
	 */
	public void writeSheet(Object[][] data) {
		HSSFSheet sheet = workbook.createSheet();
		writeSheet(sheet, data);
	}
	
	/**
	 * 新增一个工作薄并将JDBC数据库返回结果集的列名及数据写入
	 *
	 * @param resultSet 数据库返回结果集
	 */
	public void writeSheet(ResultSet resultSet) throws SQLException {
		HSSFSheet sheet = workbook.createSheet();
		writeSheet(sheet, resultSet);
	}
	
	/**
	 * 新增一个指定名称的工作薄并将数组中的数据写入,
	 * 如果表中已经存在该名称的工作薄将抛出运行时异常
	 *
	 * @param sheetName 新增的工作薄名称
	 * @param data 需写入的数组数据
	 */
	public void writeSheet(String sheetName, Object[][] data) {
		HSSFSheet sheet = workbook.createSheet(sheetName);
		writeSheet(sheet, data);
	}
	
	/**
	 * 新增一个指定名称的工作薄并将数据库返回结果集的列名及数据写入,
	 * 如果表中已经存在该名称的工作薄将抛出运行时异常
	 *
	 * @param sheetName 新增的工作薄名称
	 * @param resultSet 数据库返回结果集
	 */
	public void writeSheet(String sheetName, ResultSet resultSet) throws SQLException {
		HSSFSheet sheet = workbook.createSheet(sheetName);
		writeSheet(sheet, resultSet);
	}
	
	/**
	 * 写入数组中的数据到指定的工作薄
	 */
	private void writeSheet(HSSFSheet sheet, Object[][] data) {
		for (int i=0; i<data.length; i++) {
			HSSFRow row = sheet.createRow(i);
			for (int j=0; j<data[i].length; j++) {
				HSSFCell cell = row.createCell(j);
				writeCell(cell, data[i][j]);
			}
		}
	}
	
	/**
	 * 写入数据库结果集的列名及数据到指定工作薄
	 */
	private void writeSheet(HSSFSheet sheet, ResultSet resultSet) throws SQLException {
		ResultSetMetaData metaData = resultSet.getMetaData();
		int rowNum = 0;
		// 写入列名
		HSSFRow header = sheet.createRow(rowNum);
		int colCount = metaData.getColumnCount();
		for (int i=0; i<colCount; i++) {
			HSSFCell cell = header.createCell(i);
			writeCell(cell, metaData.getColumnLabel(i+1));
		}
		
		// 写入数据
		while (resultSet.next()) {
			rowNum++;
			HSSFRow row = sheet.createRow(rowNum);
			for (int i=0; i<colCount; i++) {
				HSSFCell cell = row.createCell(i);
				writeCell(cell, resultSet.getObject(i+1));
			}
		}
	}
	
	/**
	 * 写入数据到指定单元格
	 */
	private void writeCell(HSSFCell cell, Object obj) {
		if (obj instanceof Date) {
			// 日期以文本形式写入
			Date d = (Date) obj;
			cell.setCellValue(new HSSFRichTextString(dateFormatter.format(d)));
		} else if (obj instanceof Boolean) {
			boolean b = (Boolean) obj;
			cell.setCellValue(b);
		} else if (obj instanceof Number) {
			double d = ((Number) obj).doubleValue();
			cell.setCellValue(d);
		} else {
			String s = (String) obj;
			cell.setCellValue(new HSSFRichTextString(s));
		}
	}
}
 
分享到:
评论
发表评论

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

相关推荐

    poi报表+详细文档

    在这个“poi报表+详细文档”的压缩包中,我们很可能会找到关于如何使用POI库来创建和操作Excel报表的详细教程和实例代码。 在Excel报表的创建中,Apache POI提供了一个强大的API,允许开发者用Java编程语言来处理...

    POI报表导出excel

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

    POI报表Excel

    POI报表Excel

    POI报表技术

    【标题】:POI报表技术 在Java开发中,POI报表技术主要指的是Apache POI库,这是一个用于读写Microsoft Office格式文件的开源Java库。它允许开发者在Java应用程序中创建、修改和显示Excel、Word和PowerPoint文档。...

    POI报表Word导出

    POI报表Word导出

    poi报表导入导出视频

    【标题】"poi报表导入导出视频"涉及的是Java编程中的Apache POI库,这个库主要用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在报表领域,POI库常常被用来进行数据的导入和导出操作,极大地提高...

    POI报表.rar

    标题中的"POI报表.rar"表明这是一个与Apache POI库相关的压缩文件,通常用于处理Microsoft Office格式,特别是Excel。在企业环境中,特别是电信系统和银行系统,数据的管理和报告是至关重要的,而Excel由于其强大的...

    Apache之PoI 报表导出

    在"Apache之PoI 报表导出"这个主题中,我们将深入探讨如何利用Apache POI库将数据库中的数据高效地导出到Excel报表中。 1. **Apache POI简介** Apache POI是一个开源项目,它提供了API来创建、修改和显示Microsoft...

    Java-POI报表整合项目案例

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

    POI报表,poi案例,例子,EXAMPLE,说明文档,帮助文档。

    以下是对"POI报表,poi案例,例子,EXAMPLE,说明文档,帮助文档"的详细说明: 1. **POI报表**: 在Java开发中,如果你需要生成或处理Excel报表,Apache POI提供了一套强大的API。你可以创建复杂的电子表格,包括...

    dwr结合jQuery实现Ajax技术 ,Oracle作为后台数据库,jxl + poi报表

    “jxl + poi报表”涉及的是Java中处理Excel文件的两个库。jxl是一个开源库,用于读取和写入Microsoft Excel文件。它提供了方便的API,让开发者能够创建、修改或读取Excel工作簿、工作表和单元格数据。另一方面,...

    poi报表

    在本教程中,我们将深入探讨如何使用POI库生成Excel报表。 **1. POI简介** POI是Apache软件基金会Jakarta项目的一部分,提供了一个纯Java的解决方案来处理Microsoft Excel(XLS)文件。HSSF(Horrible Spreadsheet ...

    poi报表导入导出.zip

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

    poi报表资料.zip

    用poi操作Excel作报表效率很高,本资源包含以下内容: 1,POI的Jar包,2.5和3.9版本的; 2,Excel文件输出的java源代码; 3,导出设置的帮助文档和关键代码和Java示例代码; 4,示例教程文档等等 5,报表样式

    poi生成excel报表合并列

    在这个场景中,我们关注的是如何使用POI来生成具有合并列的Excel报表。生成这样的报表时,通常是为了呈现层次化的数据,例如组织结构、产品分类或者地区分层等。下面将详细介绍如何利用Apache POI实现这一功能。 ...

    POI技术简单应用开发报表简单使用

    **POI技术简单应用开发报表简单使用** Apache POI是一个流行的开源库,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。在Java编程环境中,它为开发者提供了强大的API,允许他们读取、写入和...

    apache poi报表导入导出实例 基于服务器下载报表。导入项目既可以运行。

    导入源码既可运行,注释详细,一看就懂。...如果代码报错,请自行将tomcat部署进去,可以进行下载报表测试。简单易用,可以收藏。实例excel文件在src目录下的excle目录下,请测试的时候修改相关路径。

    poi制作报表

    【poi制作报表】是关于Java开发中利用Apache POI库创建和操作Microsoft Excel报表的技术介绍。Apache POI是一个开源项目,主要目标是处理OLE2对象,尤其是与Microsoft Office相关的文件格式,如Excel(HSSF接口)和...

    POI导出报表

    【POI导出报表】是Java开发中一个常见的任务,主要涉及如何利用Apache POI库来生成和导出Word、Excel以及PDF格式的报表。Apache POI是一个流行的开源项目,它为Microsoft Office文档(如Word、Excel)提供读写功能,...

    Apache之 excel的POI报表导出

    在本文中,我们将深入探讨如何利用Apache POI实现Excel报表的导出功能,以及如何在Web应用程序中为用户提供下载选项。 首先,我们需要在项目中引入Apache POI的依赖。通常,你可以通过Maven或Gradle来管理这些依赖...

Global site tag (gtag.js) - Google Analytics