使用POI将数据导出到Excel文件

  1. public void exportResultInfo(String fileName,String savePath) throws Exception{  
  2.         HSSFWorkbook book = new HSSFWorkbook();  
  3.     String[] greenUrlLabel = new String[] { "A", "B", "C",  
  4.                 "D", "E", "F" };  
  5.         createSheet2(book, "result_info", greenUrlLabel, dataList);  
  6.         downLoad(book, fileName, savePath);  
  7.           
  8.     }  
public void exportResultInfo(String fileName,String savePath) throws Exception{
		HSSFWorkbook book = new HSSFWorkbook();
    String[] greenUrlLabel = new String[] { "A", "B", "C",
				"D", "E", "F" };
		createSheet2(book, "result_info", greenUrlLabel, dataList);
		downLoad(book, fileName, savePath);
		
	}

部分代码解释: dataList是从数据中获取到的数据,也就是你想导出的数据

                         createSheet2(book, "result_info", greenUrlLabel, dataList);将数据写到book中

                         downLoad(book, fileName, savePath);将book写到excel中,对应的方法分别如下。

将数据写到book中:

  1. public void createSheet2(HSSFWorkbook book, String sheetName,  
  2.             String[] label, List<Object[]> list) {  
  3.   
  4.         // 单sheet 最大行数  
  5.         // final Integer MAX_ROW_SIZE = 65536;  
  6.         final Integer MAX_ROW_SIZE = 65535;  
  7.         // 创建Sheet并设置sheetName  
  8.         HSSFSheet sheet = null;  
  9.   
  10.         // sheet number  
  11.         int sheetNum = 0;  
  12.   
  13.         // sheet data row  
  14.         int rowCount = 0;  
  15.         sheet = book.createSheet(sheetName);  
  16.         sheetNum++;  
  17.         // 首行填写表头  
  18.         HSSFRow row00 = sheet.createRow(rowCount++);// 创建行 rowCount+1  
  19.         for (int t = 0; t < label.length; t++) {  
  20.             HSSFCell cell0 = row00.createCell(t);  
  21.             cell0.setCellValue(label[t]);  
  22.         }  
  23.   
  24.         // 数据行遍历  
  25.         if (list != null && list.size() > 0) {  
  26.             for (int i = 1; i <= list.size(); i++) {  
  27.   
  28.                 // rowCount 为0时 新sheet初始化、表头数据初始化  
  29.                 if (rowCount == 0) {  
  30.                     // 创建新Sheet  
  31.                     sheet = book.createSheet(sheetName + "_" + sheetNum);  
  32.                     sheetNum++;  
  33.   
  34.                     // 首行填写表头  
  35.                     HSSFRow row0 = sheet.createRow(rowCount++);// 创建行  
  36.                     // rowCount+1  
  37.                     for (int t = 0; t < label.length; t++) {  
  38.                         HSSFCell cell0 = row0.createCell(t);  
  39.                         cell0.setCellValue(label[t]);  
  40.                     }  
  41.   
  42.                 }  
  43.   
  44.                 // 创建数据行  
  45.                 HSSFRow row = sheet.createRow(rowCount++); // 第二行开始  
  46.                 Object[] objects = list.get(i - 1); // 填写数据集合的第一行  
  47.   
  48.                 // 列循环  
  49.                 if (objects != null && objects.length > 0) {  
  50.                     for (int j = 1; j <= objects.length; j++) {  
  51.                         // 创建Cell  
  52.                         HSSFCell cell = row.createCell(j - 1);  
  53.   
  54.                         // 获取数据对象  
  55.                         Object obj = objects[j - 1];  
  56.                         // 填写数据  
  57.                         cell.setCellValue(new HSSFRichTextString(  
  58.                                 getStringValueFromObject(obj)));  
  59.                     }  
  60.                 }  
  61.   
  62.                 // rowcount 归零判断 归零 新Sheet页面的开始  
  63.                 if (rowCount == MAX_ROW_SIZE) {  
  64.                     rowCount = 0;  
  65.                 }  
  66.                 Contants.expCount++;  
  67.             }  
  68.         }  
  69.     }  
public void createSheet2(HSSFWorkbook book, String sheetName,
			String[] label, List<Object[]> list) {

		// 单sheet 最大行数
		// final Integer MAX_ROW_SIZE = 65536;
		final Integer MAX_ROW_SIZE = 65535;
		// 创建Sheet并设置sheetName
		HSSFSheet sheet = null;

		// sheet number
		int sheetNum = 0;

		// sheet data row
		int rowCount = 0;
		sheet = book.createSheet(sheetName);
		sheetNum++;
		// 首行填写表头
		HSSFRow row00 = sheet.createRow(rowCount++);// 创建行 rowCount+1
		for (int t = 0; t < label.length; t++) {
			HSSFCell cell0 = row00.createCell(t);
			cell0.setCellValue(label[t]);
		}

		// 数据行遍历
		if (list != null && list.size() > 0) {
			for (int i = 1; i <= list.size(); i++) {

				// rowCount 为0时 新sheet初始化、表头数据初始化
				if (rowCount == 0) {
					// 创建新Sheet
					sheet = book.createSheet(sheetName + "_" + sheetNum);
					sheetNum++;

					// 首行填写表头
					HSSFRow row0 = sheet.createRow(rowCount++);// 创建行
					// rowCount+1
					for (int t = 0; t < label.length; t++) {
						HSSFCell cell0 = row0.createCell(t);
						cell0.setCellValue(label[t]);
					}

				}

				// 创建数据行
				HSSFRow row = sheet.createRow(rowCount++); // 第二行开始
				Object[] objects = list.get(i - 1); // 填写数据集合的第一行

				// 列循环
				if (objects != null && objects.length > 0) {
					for (int j = 1; j <= objects.length; j++) {
						// 创建Cell
						HSSFCell cell = row.createCell(j - 1);

						// 获取数据对象
						Object obj = objects[j - 1];
						// 填写数据
						cell.setCellValue(new HSSFRichTextString(
								getStringValueFromObject(obj)));
					}
				}

				// rowcount 归零判断 归零 新Sheet页面的开始
				if (rowCount == MAX_ROW_SIZE) {
					rowCount = 0;
				}
				Contants.expCount++;
			}
		}
	}

部分代码解释:由于早期的excel最大的行数只能到65535,所以在这地方做了判断,但数据条数大于这个数的时候,重新开一个sheet页,进行写入。

将book写到excel中:

  1. public String downLoad(HSSFWorkbook workbook, String fileName,  
  2.             String savePath) throws IOException {  
  3.         FileOutputStream fos = null;  
  4.         ByteArrayOutputStream byteos = null;  
  5.         try {  
  6.             // 将HSSFWorkbook 写入字节流  
  7.             byteos = new ByteArrayOutputStream();  
  8.             workbook.write(byteos);  
  9.   
  10.             // 获取所有字节及其长度  
  11.             byte[] xlsBytes = byteos.toByteArray();  
  12.              int length = xlsBytes.length;        
  13.             // 获取 流ServletOutputStream  
  14.             File file = new File(savePath + File.separator + fileName);  
  15.             if (!file.getParentFile().exists())  
  16.                 file.getParentFile().mkdirs();  
  17.             if (!file.exists())  
  18.                 file.createNewFile();  
  19.             fos = new FileOutputStream(file);  
  20.             fos.write(xlsBytes);  
  21.             System.out.println("End of transform the file :" + fileName);  
  22.             fos.flush();  
  23.         } catch (final IOException e) {  
  24.             throw e;  
  25.         } finally {  
  26.             // 关闭字节流  
  27.             if (byteos != null) {  
  28.                 byteos.close();  
  29.             }  
  30.             if (fos != null)  
  31.                 try {  
  32.                     fos.close();  
  33.                 } catch (IOException e) {  
  34.                     e.printStackTrace();  
  35.                 }  
  36.         }  
  37.         return null;  
  38.     }  
public String downLoad(HSSFWorkbook workbook, String fileName,
			String savePath) throws IOException {
		FileOutputStream fos = null;
		ByteArrayOutputStream byteos = null;
		try {
			// 将HSSFWorkbook 写入字节流
			byteos = new ByteArrayOutputStream();
			workbook.write(byteos);

			// 获取所有字节及其长度
			byte[] xlsBytes = byteos.toByteArray();
			 int length = xlsBytes.length;		
			// 获取 流ServletOutputStream
			File file = new File(savePath + File.separator + fileName);
			if (!file.getParentFile().exists())
				file.getParentFile().mkdirs();
			if (!file.exists())
				file.createNewFile();
			fos = new FileOutputStream(file);
			fos.write(xlsBytes);
			System.out.println("End of transform the file :" + fileName);
			fos.flush();
		} catch (final IOException e) {
			throw e;
		} finally {
			// 关闭字节流
			if (byteos != null) {
				byteos.close();
			}
			if (fos != null)
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}
		return null;
	}

      这块就是将book写到对于的excel文件中,这里的filename可以自己给定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值