poi导出到excel方法封装

package com.tgb.lk;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class ExportTest02 {
	public static void main(String[] args) {
		// 初始化数据
		List<Map> list = new ArrayList<Map>();
		for (int i = 0; i < 10; i++) {
			Map map = new HashMap();
			map.put("id", i);
			map.put("name", "姓名" + i);
			list.add(map);
		}

		String[] alias = { "编号", "姓名" };// excel的列头
		String[] names = { "id", "name" };// 数据List中的Map的key值.
		FileOutputStream out = null;
		try {
			out = new FileOutputStream("d:\\success2.xls");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}

		exportExcel(list, alias, names, "学生信息表", 60000, out);
		System.out.println("----执行完毕----------");
	}

	/**
	 * 对list数据源将其里面的数据导入到excel表单
	 * 
	 * @param fieldName
	 *            [] 导出到excel文件里的表头名
	 * @param columnIt
	 *            [] 导出到excel文件里的表头NAME
	 * @param sheetName
	 *            工作表的名称
	 * @param sheetSize
	 *            每个sheet中数据的行数,此数值必须小于65536
	 * @param output
	 *            java输出流
	 */
	public static boolean exportExcel(List list, String[] fieldName,
			Object[] columnIt, String sheetName, int sheetSize,
			OutputStream output) {
		HSSFWorkbook workbook = new HSSFWorkbook();// 产生工作薄对象
		if (sheetSize >= 65536) {
			sheetSize = 65536;
		}
		double sheetNo = Math.ceil(list.size() / sheetSize);
		for (int index = 0; index <= sheetNo; index++) {
			HSSFSheet sheet = workbook.createSheet();// 产生工作表对象
			workbook.setSheetName(index, sheetName+index);//设置工作表的名称.
			HSSFRow row = sheet.createRow(0);// 产生一行
			HSSFCell cell;// 产生单元格

			// 写入各个字段的名称
			for (int i = 0; i < fieldName.length; i++) {
				cell = row.createCell(i); // 创建第一行各个字段名称的单元格
				cell.setCellType(HSSFCell.CELL_TYPE_STRING); // 设置单元格内容为字符串型
				// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
				// //为了能在单元格中输入中文,设置字符集为UTF_16
				cell.setCellValue(fieldName[i]); // 给单元格内容赋值
			}

			int startNo = index * sheetSize;
			int endNo = Math.min(startNo + sheetSize, list.size());
			// 写入各条记录,每条记录对应excel表中的一行
			for (int i = startNo; i < endNo; i++) {
				row = sheet.createRow(i + 1 - startNo);
				HashMap map = (HashMap) list.get(i);
				for (int j = 0; j < columnIt.length; j++) {
					cell = row.createCell(j);
					cell.setCellType(HSSFCell.CELL_TYPE_STRING);
					// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
					Object value = map.get(columnIt[j]);
					if (value != null) {
						cell.setCellValue(map.get(columnIt[j]).toString());
					} else
						cell.setCellValue("");
				}
			}
		}
		try {
			output.flush();
			workbook.write(output);
			output.close();
			return true;
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("Output is closed ");
			return false;
		}

	}
}


 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 在Java中导出Excel时,可以采用jxl或poi等第三方库进行操作。在导出Excel的过程中,如果Excel文件过大或数据量较多,可能会导致导出时间较长,因此需要添加进度条来提示用户导出的进度。 一般情况下,可以使用Swing组件中的JProgressBar(进度条)来实现进度条效果。在导出Excel的过程中,可以通过不断更新进度条的值来展示进度。在更新进度条时,需要注意线程同步问题,避免出现并发问题。 具体实现步骤如下: 1. 创建一个进度条(JProgressBar)并设定进度条的最大值(即导出数据总量); 2. 在导出Excel数据的过程中,根据实际情况更新进度条的值(使用setValue()方法); 3. 为了避免更新进度条与导出Excel数据的线程冲突,可以使用SwingWorker类来进行多线程操作; 4. 在导出完毕后,将进度条设置为完成状态(setValue(maximum))。 同时,为了让用户能够明确了解到导出进度,还可以在进度条下添加文字提示或使用弹窗等方式提醒用户导出的进度。通过以上步骤,即可在Java中实现导出Excel带进度条功能。 ### 回答2: Java导出Excel进度条在实际开发中很常见,对于数据量较大的导出操作尤其有用。常用的实现方式是利用多线程和Ajax技术配合完成。下面简单介绍一下具体步骤: 1. 在服务器端,将导出Excel的代码封装成一个单独的方法,并把方法放入一个线程中运行。 2. 在前端页面中,使用Ajax向服务器端发送请求,触发Excel导出操作,并异步获取服务器端返回的导出进度信息。 3. 在前端页面中实现进度条功能,即获取服务器端返回的导出进度信息,计算已完成的比例,并将进度条实时反映到页面上。 4. 当导出操作完成后,服务器端将导出结果存储到指定的位置并返回导出完成信息给前端页面,此时前端页面可以提示用户下载导出结果。 实现Java导出Excel进度条需要涉及到多线程,Ajax,进度条等相关技术,需要开发人员熟练掌握。正确使用这些技术可以大大提高导出操作的用户体验,减少用户等待时间,提高系统的可用性。 ### 回答3: 在Java中,我们可以使用Apache POI库来创建和操作Excel文件。但是,当我们从数据库或其他数据源中提取大量数据并写入Excel文件时,这可能需要一些时间。在这种情况下,为了提高用户体验并显示进度,我们可以创建一个进度条。 首先,我们需要创建一个工作表,并确定需要写入Excel的列和行的数量。然后,我们可以创建一个进度条的GUI组件并在主线程中运行。我们可以使用Swing的JProgressBar组件,并将其添加到JFrame的容器中。 接下来,我们需要在程序中安排一个方法来更新进度条。在此方法中,我们要计算导出过程的百分比,并将其传递给进度条。在Apache POI中,我们可以使用Row和Cell类来写入数据。在写入每个单元格之后,我们可以使用更新百分比的方法来调用进度条,以便在GUI上添加进度。 完成导出后,我们可以使用Swing的JOptionPane来提示用户Excel文件已成功生成,并提供打开文件所需的选项。 最后,为了确保在开始导出之前显示进度条GUI,我们可以使用SwingUtilities工具类的invokeLater()方法在事件调度线程上执行GUI初始化任务。这将确保GUI在导出开始之前准备就绪,并且不会与导出线程发生冲突。 总之,Java导出Excel进度条可以通过创建Swing的JProgressBar组件和更新方法来实现。通过在事件调度线程上初始化GUI,并在导出过程中更新进度条,我们可以提高用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值