`
xurichusheng
  • 浏览: 344967 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

将查询结果导入excel 中

阅读更多

 

1. 数据库:oracle 10g2

    JDK: 1.6.0_20

    jar 包:jxl-2.6.6.jar   log4j.jar   ojdbc14-10.2.0.4.0.jar

 

2. 导出的核心代码 ExcelOutput

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

import jxl.Workbook;
import jxl.write.WritableFont;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import org.apache.log4j.Logger;

/**
 * @ClassName: ExcelOutput
 * @Description: Excel文档生成功能
 * @author 
 * @company 
 * @date 2012-6-29
 * @version V1.0
 */

public final class ExcelOutput {

	private static Logger log = Logger.getLogger(ExcelOutput.class);

	// 实例
	private static final ExcelOutput INSTANCE = new ExcelOutput();

	private ExcelOutput() {
	}

	/**
	 * @Title: getInstance
	 * @Description: 获取ExcelOutput实例,使用单例
	 * @return ExcelOutput
	 * @author 
	 * @date 2012-6-25
	 */
	public static ExcelOutput getInstance() {
		return INSTANCE;
	}

	/**
	 * 取得用于下载excel文件的输出流
	 * 
	 * @param os
	 *            输出流,如response.getOutputStream()或FileOutputStream
	 * @param subject
	 *            主题,用于表示工作表的名称
	 * @param titles
	 *            标题行,用于显示在表格的第一行
	 * @param list
	 *            实际内容,是List集合对象. 每一值又是一个List对象,表示一行的记录,注意每个值是String都对象
	 * @return 输出流
	 */

	public void createOutPutStreamForObjs(OutputStream os, String subject,
			String[] titles, List<Object[]> list) {

		log.info("start to create excel file.");

		WritableWorkbook wwb = null;
		try {
			// 通过模板得到一个可写的Workbook
			wwb = Workbook.createWorkbook(os);
			// 第几个工作表
			int number = 0;
			// 一个工作表插入3000条记录
			int num = 3000;

			while ((number + 1) * num <= list.size()) {
				// 生成名为subject + number的工作表,0表示这是第一页
				jxl.write.WritableSheet ws = wwb.createSheet(subject + number,
						number);

				// 表格头
				// 添加带有字型Formatting的对象
				jxl.write.WritableFont wfTitle = new jxl.write.WritableFont(
						WritableFont.TAHOMA, 12, WritableFont.BOLD, false);
				jxl.write.WritableCellFormat wcfFTitle = new jxl.write.WritableCellFormat(
						wfTitle);
				for (int i = 0; i < titles.length; i++) {
					jxl.write.Label labelCFTitle = new jxl.write.Label(i, 0,
							titles[i], wcfFTitle);
					ws.addCell(labelCFTitle);
				}

				// 表格内容
				jxl.write.WritableFont wf = new jxl.write.WritableFont(
						WritableFont.TAHOMA, 11, WritableFont.NO_BOLD, false);
				jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(
						wf);
				int numI = 0;
				for (int i = number * num; i < (number + 1) * num; i++) {

					Object[] subList = (Object[]) list.get(i);
					for (int j = 0; j < subList.length; j++) {
						String text = subList[j] == null ? "" : subList[j]
								.toString();
						jxl.write.Label labelCF = new jxl.write.Label(j,
								numI + 1, text, wcfF);
						ws.addCell(labelCF);
					}
					numI++;
				}
				number = number + 1;
			}

			if (list.size() > number * num) {
				jxl.write.WritableSheet ws = wwb.createSheet(subject + number,
						number);

				// 表格头
				// 添加带有字型Formatting的对象
				jxl.write.WritableFont wfTitle = new jxl.write.WritableFont(
						WritableFont.TAHOMA, 12, WritableFont.BOLD, false);
				jxl.write.WritableCellFormat wcfFTitle = new jxl.write.WritableCellFormat(
						wfTitle);
				for (int i = 0; i < titles.length; i++) {
					jxl.write.Label labelCFTitle = new jxl.write.Label(i, 0,
							titles[i], wcfFTitle);
					ws.addCell(labelCFTitle);
				}

				// 表格内容
				jxl.write.WritableFont wf = new jxl.write.WritableFont(
						WritableFont.TAHOMA, 11, WritableFont.NO_BOLD, false);
				jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(
						wf);
				int numI = 0;
				for (int i = number * num; i < list.size(); i++) {

					Object[] subList = (Object[]) list.get(i);
					for (int j = 0; j < subList.length; j++) {
						String text = subList[j] == null ? "" : subList[j]
								.toString();
						jxl.write.Label labelCF = new jxl.write.Label(j,
								numI + 1, text, wcfF);
						ws.addCell(labelCF);
					}
					numI++;
				}
			}
			// 写入Exel工作表
			wwb.write();
		} catch (RowsExceededException e) {
			log.error("create excel file '" + subject + "' fail!", e);
		} catch (FileNotFoundException e) {
			log.error("create excel file '" + subject + "' fail!", e);
		} catch (WriteException e) {
			log.error("create excel file '" + subject + "' fail!", e);
		} catch (IOException e) {
			log.error("create excel file '" + subject + "' fail!", e);
		} catch (Exception e) {
			log.error("create excel file '" + subject + "' fail!", e);
		} finally {
			// 关闭Excel工作薄对象
			try {
				if (wwb != null) {
					wwb.close();
				}
				os.flush();
				os.close();
			} catch (WriteException e) {
				log.error("close WritableWorkbook fail!", e);
			} catch (IOException e) {
				log.error("close WritableWorkbook fail!", e);
			} catch (Exception e) {
				log.error("close WritableWorkbook fail!", e);
			}

			log.info("end to create excel file.");
		}
	}
}

 

测试方法(Junit4):

 

@Test
	public void export() {

		Connection conn = JDBCUtil.getInstance().getConnection();

		String sql = "SELECT DEPTNO, DNAME, LOC FROM DEPT";

		PreparedStatement ps = null;
		ResultSet rs = null;

		try {
			ps = conn.prepareStatement(sql);

			rs = ps.executeQuery();

			List<Object[]> list = new ArrayList<Object[]>(3);
			Object[] objs = null;

			while (rs.next()) {

				objs = new Object[] { rs.getInt("DEPTNO"),
						rs.getString("DNAME"), rs.getString("LOC") };

				list.add(objs);
			}

			// 生成excel文件
			createExcel(list);

		} catch (SQLException e) {
			log.error("SQLException", e);
		} catch (Exception e) {
			log.error("Others Exception!", e);
		} finally {
			JDBCUtil.getInstance().close(conn, ps, rs);
		}
	}

	/**
	 * @Title: createExcel
	 * @Description: 生成excel文件
	 * @param lsit
	 *            : 查询结果集
	 * @author 
	 * @date 2012-6-29
	 */
	private void createExcel(List<Object[]> list) {

		// 文件名
		String name = "部门信息";
		// excel文件表头
		String[] head = { "部门编号", "部门名称", "位置" };

		File file = new File(name + ".xls");

		if (!file.exists()) {
			try {
				file.createNewFile();
			} catch (IOException e) {
				log.error("create file fail!", e);
			}
		}

		OutputStream os = null;

		try {
			os = new FileOutputStream(file);
		} catch (FileNotFoundException e) {
			log.error("create OutputStream fail!", e);
		}

		// 生成excel文件
		ExcelOutput.getInstance().createOutPutStreamForObjs(os, name, head,
				list);
	}
 

运行成功后,会在工程的根目录下生成 部门信息.xls

 


 

 

web 环境下的方法:

这里使用struts2.

查询条件 QueryParam

/**
 * @ClassName: QueryParam
 * @Description: 查询条件
 * @author 
 * @company 
 * @date 2012-6-29
 * @version V1.0
 */

public class QueryParam {

	private Integer deptNo;
	private String deptName;
	private String location;
	
	@Override
	public String toString() {
		
		StringBuffer buf = new StringBuffer("QueryParam:[");
		
		buf.append("deptNo=").append(deptNo);
		buf.append(",deptName=").append(deptName);
		buf.append(",location=").append(location);
		buf.append("]");
		
		return buf.toString();
	}

	// 这里省略 getter/setter
}

 

public void getAllDept(QueryParam params) throws Exception {

		StringBuffer buf = new StringBuffer();

		buf.append("SELECT DEPTNO, DNAME, LOC FROM DEPT where 1=1 ");

		if (params.getDeptNo() != null) {
			buf.append(" and DEPTNO = ").append(params.getDeptNo());
		}

		if (null != params.getDeptName() && !"".equals(params.getDeptName())) {
			buf.append(" and DNAME like %").append(params.getDeptName())
					.append("%");
		}

		if (null != params.getLocation() && !"".equals(params.getLocation())) {
			buf.append(" and LOC like %").append(params.getLocation())
					.append("%");
		}
		
		Connection conn = JDBCUtil.getInstance().getConnection();
		
		PreparedStatement ps = null;
		ResultSet rs = null;

		try {
			ps = conn.prepareStatement(buf.toString());

			rs = ps.executeQuery();

			List<Object[]> list = new ArrayList<Object[]>(3);
			Object[] objs = null;

			while (rs.next()) {

				objs = new Object[] { rs.getInt("DEPTNO"),
						rs.getString("DNAME"), rs.getString("LOC") };

				list.add(objs);
			}

			// 生成excel文件
			createExcel(list);

		} catch (SQLException e) {
			log.error("SQLException", e);
		} catch (Exception e) {
			log.error("Others Exception!", e);
		} finally {
			JDBCUtil.getInstance().close(conn, ps, rs);
		}
	}
 

 

action 方法:

 

在action类中定义一个私有的属性 private QueryParam queryParam;设置其setter/getter方法

 

public void getExport() {

	log.info("start to export dept.");

	if (null != queryParam) {

		try {
			// 调用service层,查找要导出的数据
			List<Object[]> list = getAllDept(queryParam);

			if (null != list && !list.isEmpty()) {

				log.info("export dept to excel. The data count is:"
						+ unitList.size());
			} else {
				log.info("export dept to excel. The data count is empty.");
			}

			HttpServletResponse response = ServletActionContext
					.getResponse();

			OutputStream os = response.getOutputStream();
			response.reset();

			// 文件名
			String name = "部门信息";
			// excel文件表头
			String[] head = { "部门编号", "部门名称", "位置" };

			byte[] fileNameByte = (name + ".xls").getBytes("GBK");
			// 文件名
			String fileName = new String(fileNameByte, "ISO8859-1");

			response.setHeader("Content-disposition",
					"attachment; filename=" + fileName);
			response.setContentType("application/msexcel");

			// 生成excel文件
			ExcelOutput.getInstance().createOutPutStreamForObjs(os, name,
					head, list);

		} catch (Exception e) {
			log.error("export dept excel file fail!", e);
		}

		log.info("end to export dept.");
	}

}
 

 

  • 大小: 5.9 KB
分享到:
评论

相关推荐

    PB中导入EXCEL数据.doc

    在 PowerBuilder 中,开发者常常需要将 EXCEL 数据导入到应用程序中,以便进行数据分析、处理和展示。在本文中,我们将探讨如何使用 PowerBuilder 将 EXCEL 数据导入到应用程序中。 OLE 对象 在 PowerBuilder 中,...

    Navicat for MySql 导入EXCEL中文乱码问题解决

    下面将详细介绍解决Navicat for MySQL导入Excel中文乱码问题的有效步骤: 1. **调整连接属性中的编码设置** - 在Navicat for MySQL中打开当前连接的名称,然后点击鼠标右键选择“连接属性”。 - 在弹出的窗口中...

    C#将数据导入excel和Excel数据导入数据库

    此外,注意数据类型匹配,Excel中的数据可能需要转换为适合数据库字段的数据类型。 总之,C#结合NPOI或其他库,配合SQL Server,提供了强大的数据处理能力,可以从Excel文件中提取数据并将其存储到数据库中,这对...

    在VS中使用代码导入Excel表中的数据

    在Visual Studio(VS)开发环境中,使用代码导入Excel表中的数据是一项常见的任务,尤其是在数据分析、报表生成或数据处理的应用程序中。以下是一些关键的知识点,涵盖了如何从数据库导出数据到Excel,以及如何将...

    vb批量将excel数据导入access以及批量将access数据库中的数据导入excel源代码

    标题提到的“vb批量将excel数据导入access以及批量将access数据库中的数据导入excel源代码”是解决这类问题的一种有效方案。下面将详细介绍这两个过程的关键知识点。 1. Excel数据导入Access: - **数据连接**:...

    matlab导入excel数据教程

    将 Excel 中的数据导入 Matlab 是一种常见的数据处理需求。以下是 Matlab 导入 Excel 数据的教程。 1. 使用 xlsread 命令导入 Excel 数据 在 Matlab 中,可以使用 xlsread 命令将 Excel 中的数据读取到 Matlab 中...

    如何在informatica里导入excel文件当做源文件

    本文详细介绍了如何在 Informatica 中导入 Excel 文件作为源文件的步骤,从准备 Excel 电子表格到定义范围和指定数据类型,最后将 Excel 文件导入 Informatica。通过本文,我们可以轻松地将 Excel 文件导入 ...

    将Excel文件导入到数据库中或将数据库中文件导出Excel中

    3. 执行导出:通过数据库管理工具或编程接口执行导出命令,将查询结果保存为文件。 4. 在Excel中打开:在导出完成后,可以直接在Excel中打开生成的文件,进行进一步的数据分析或处理。 对于压缩包中的“导入与导出...

    将GridView中数据导入Excel中

    而将GridView中的数据导入Excel,能够方便用户对数据进行更复杂的处理、分析或分享。本实例提供了一个有效的方法,实现了从GridView到Excel的转换,并且在导入过程中保留了GridView的格式,使得Excel文件看起来与原...

    jeecg导入Excel

    例如,Excel中的"姓名"列可能对应数据库表的"name"字段。 4. **数据验证**: 在导入数据前,Jeecg会进行数据验证,检查数据的合法性,如非空校验、数据类型校验、唯一性校验等,确保导入的数据符合业务规则。 5. ...

    Developer导入Excel数据

    Developer 导入 Excel 数据是指使用 PLSQL Developer 工具将 Excel 文件中的数据导入到 Oracle 数据库中。这种操作可以帮助开发者快速地将 Excel 文件中的数据导入到数据库中,以便进行后续的数据处理和分析。 ...

    批量文件夹名称导入excel

    例如,使用Windows命令行工具`dir /b`可以列出文件夹中的所有文件名,然后通过管道(|)传递给`clip`命令,将结果复制到剪贴板,最后在Excel中粘贴。 - 利用VBA宏:Excel的Visual Basic for Applications (VBA) ...

    C# 导入Excel文件到ListView和导出ListView到Excel文件

    以上就是C#中导入Excel文件到ListView和导出ListView到Excel文件的基本步骤和技术要点。这个过程涉及到文件操作、数据处理和UI控件的使用,是C#开发者必备的技能之一。通过熟练掌握这些技巧,你将能够更高效地进行...

    FineReport实现EXCEL数据导入自由报表

    二是在线导入Excel中的数据到填报表。 第一部分,添加导入Excel按钮,涉及到FineReport的界面设置。首先,需要打开已经准备好的填报模板,在模板的Web属性设置中找到填报页面设置,选择为该模板单独设置,勾选使用...

    vb.net将excel中的数据导入到数据库

    - `Fill`: 将查询结果填充到`dataset`中,指定表名为`"Rwb"`。 #### 4. 显示数据数量 使用`MessageBox.Show`显示已导入的数据行数: ```vb MessageBox.Show(dataset.Tables(0).Rows.Count) ``` #### 5. 连接SQL ...

    织梦dedecms批量导入excel表文章内容插件

    5. 检查结果:导入完成后,务必检查导入的文章是否正确无误,包括内容、分类、发布时间等是否与Excel中的数据一致。 此插件支持自定义字段,这意味着你可以根据自己的网站需求添加额外的字段,比如“关键词”、...

    PLSQL Developer导入数据excel表格

    本教程将详细讲解如何使用PLSQL Developer导入Excel表格数据。 首先,让我们了解一下PLSQL Developer中的"ODBC导入器"功能。ODBC(Open Database Connectivity)是一种标准的数据库访问接口,允许应用程序通过ODBC...

    多线程导入excel 数据

    在Java编程中,多线程导入Excel数据是一项常见的任务,特别是在大数据处理和高并发场景下。这个场景通常涉及到性能优化和资源管理,以确保系统稳定性和数据一致性。下面将详细阐述多线程导入Excel数据的核心知识点。...

    jsp 导入 excel的例子

    本例子将介绍如何在JSP中利用POI库来实现Excel数据的导入功能。 首先,我们需要在项目中引入Apache POI的相关依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache.poi ...

    用Jxls实现数据导入excel实例

    本文将详细介绍如何使用Jxls实现数据导入Excel的实例。 Jxls库的核心功能在于提供了一种声明式的方式来处理Excel模板,通过使用Apache POI库来操作Excel文件。它的主要优点是将数据和样式分离,让开发者可以专注于...

Global site tag (gtag.js) - Google Analytics