java导出excel表格

我是基于POI进行导出的。
首先,我们应该要知道的是,一个Excel文件对应一个workbook,一个workbook中有多个sheet组成,一个sheet是由多个行(row)和列(cell)组成。那么我们用POI导出一个Excel表格的顺序应该是:
1、用HSSFWorkbook打开或者创建“Excel文件对象”
2、用HSSFWorkbook对象返回或者创建Sheet对象
3、用Sheet对象返回行对象row,用行对象得到Cell对象
4、对Cell对象读写。

我是先获取数据,写入一个二维数组中,然后传给excel工具类,将标题也传给工具类,由工具类创建excel并写入excel,之后压缩,最后删除excel,保留压缩文件。
导出Excel应用实例:

工具类代码:

package cn.com.dhcc.baihangcreditcommon.util;

import java.io.File;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ExcelUtil {
	
	public static void getExcel(String excelFileName,String []titles,String [][]values){
		try {

			//1. 创建Excel对象
			// .xls  HSSFWorkbook
			// .xlsx XSSFWorkbook
			Workbook workbook = new HSSFWorkbook();

			// 设置单元格的日期样式
			CellStyle cellStyle = workbook.createCellStyle();
			CreationHelper creationHelper = workbook.getCreationHelper();
			cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-MM-dd"));
			// 创建一个居中格式
			cellStyle.setAlignment(CellStyle.ALIGN_CENTER);

			// 2. 创建工作页对象
			Sheet sheet = workbook.createSheet(Constant.SHEET_NAME);

			// 3. 创建行对象
			Row row = sheet.createRow(0);

			// 4. 声明列对象
			Cell cell = null;
			
			// 5. 标题
			for (int i = 0; i < titles.length; i++) {
				cell = row.createCell(i);
				cell.setCellValue(titles[i]);
				cell.setCellStyle(cellStyle);
			}
			
			// 6. 单元格的内容
			for(int i=0 ; i < values.length ; i++){
	            row = sheet.createRow(i + 1);
	            for(int j=0 ; j < values[i].length ; j++){
	                //将内容按顺序赋给对应的列对象
	                row.createCell(j).setCellValue(values[i][j]);
	            }
	        }
			
			// 5. 创建Excel文件
			// 文件路径+文件名
			String filePathName = XXX + "\\" + excelFileName;
			// 写入
			File file = new File(filePathName);
			// 如果文件路径不存在,则创建
			if (!file.exists()) {
				file.getParentFile().mkdirs();
			}
			FileOutputStream outputStream = new FileOutputStream(file);
			workbook.write(outputStream);
			// 关闭流,否则文件不能删除
			outputStream.close();
			log.info("生成excel成功,{}" , filePathName);
			
			// 6. 压缩excel
			// 要生成的压缩文件名
			String zipFileName = excelFileName.replaceAll(".xls", ".zip");
			// 压缩文件的文件路径+文件名
			String zipFilePathName = XXX + "\\" + zipFileName;
			ZipUtils.zipCompress(zipFilePathName , file);
			
			// 删除excel文件
			boolean b = file.delete();
			if(b == false){
				log.info("{}删除失败" , filePathName);
			}else{
				log.info("{}删除成功" , filePathName);
			}
			
		} catch (Exception e) {
			log.info("生成excel出现异常");
			e.printStackTrace();
		}
	}

}

调用:

private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
	@SuppressWarnings("null")
	private void getBsInErr(List<String> filenameList){
		// Excel的标题
		String[] titles = Constant.EXCEL_TITLE;
		
		for (String filename : filenameList) {
			List<BSinerr> bSinErrs = bsInErrDao.getBSinErrByFileName(filename);
			if(null == bSinErrs || bSinErrs.size() == 0){
				// 该类型没有可以下载的错误信息
				log.info("{},没有错误信息" , filename);
				continue;
			}
			// excel文件名 
			String excelFileName = filename.replaceAll(".txt", "Err.xls");
			String[][] content =new String[bSinErrs.size()][titles.length];
			
			// 为单元格赋值
			for (int i = 0; i < bSinErrs.size(); i++) {
				
				BSinerr bSinerr = bSinErrs.get(i);
				// 数据类型
				content[i][0] = bSinerr.getDataType();
				// 错误时间
				Date errTime = bSinerr.getErrTime();
				content[i][1] = sdf.format(errTime);
				// 文件名
				content[i][2] = bSinerr.getFileName();
				// 错误行数
				Long lineNo = bSinerr.getLineNo();
				content[i][3] = String.valueOf(lineNo);
				// REQ_ID 
				content[i][4] = bSinerr.getReqID();
				// 数据项
				content[i][5] = bSinerr.getFieldID();
				// 错误值
				content[i][6] = bSinerr.getFieldValue();
				// 错误代码
				content[i][7] = bSinerr.getErrCode();
				// 错误信息
				BSerrDic bsErrDic = bsErrDicDao.getBsErrDicByErrCode(bSinerr.getErrCode());
				content[i][8] = bsErrDic.getErrMsg();
				// 法人机构
				content[i][9] = bSinerr.getOrgEntity();
			}
			
			// 生成excel
			ExcelUtil.getExcel(excelFileName,titles, content);
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值