java导出excel,多个工作簿,特殊的格式

项目需要根据信息类型,不同的类型放到不同的工作簿中,之前没有做过,这里记录一下;以待查阅。直接上代码

package com.ideabank.util;

import java.io.File;
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.commons.collections.MapUtils;
import org.apache.commons.io.IOUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
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.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFSheet;

public class ImportBeiAnUtils {
	private static Workbook workBook;
    private static Sheet sheet;
    private static Sheet sheet2;
    
    public static void main(String[] args) {
    	String[] keys1 = new String[] { "姓名(CN)", "单位(OU)","电子邮件(EMAIL)","身份证号码(ID)","用户单位自定义(TITLE)" };
    	String[] keys2 = new String[] { "姓名(CN)", "单位(OU)","电子邮件(EMAIL)","身份证号码(ID)","用户单位自定义(TITLE)" };
    	ExcelExporter("个人证书","机构证书",keys1,keys2);
    	List<Map<String, Object>> datas1 = new ArrayList<>();
    	 for (int i = 0; i < 10; i++) {
             Map data = new HashMap<>();
             data.put("姓名(CN)", "姓名" + i);
             data.put("单位(OU)", "单位" + i);
             data.put("电子邮件(EMAIL)", "age" + i);
             data.put("身份证号码(ID)", "age" + i);
             data.put("用户单位自定义(TITLE)", "age" + i);
             datas1.add(data);
         }
    	 List<Map<String, Object>> datas2 = new ArrayList<>();
    	 for (int i = 0; i < 10; i++) {
             Map data = new HashMap<>();
             data.put("姓名(CN)", "姓名" + i);
             data.put("单位(OU)", "单位" + i);
             data.put("电子邮件(EMAIL)", "age" + i);
             data.put("身份证号码(ID)", "age" + i);
             data.put("用户单位自定义(TITLE)", "age" + i);
             datas2.add(data);
         }
        createTableRows(datas1,keys1, datas2,keys2);
        try {
        	exportExcel(new FileOutputStream(new File("e:/test3.xls")),keys1,keys2);
        	System.out.println("成功");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    
	
    public static void ExcelExporter(String sheetName1,String sheetName2,String[] keys1,String[] keys2) {
        // 创建一个工作簿
        workBook = new HSSFWorkbook();
        // 创建一个工作表sheet
        sheet = workBook.createSheet(sheetName1);
        sheet2 = workBook.createSheet(sheetName2);
        initHeader(keys1,keys2);
    }
	/**
     * 初始化表头信息
     */
    private static void  initHeader(String[] keys1,String[] keys2) {
        //  第一个工作簿 创建第一行
        Row row = sheet.createRow(0);
        row = sheet.createRow(0);
        CellStyle cellStyle = workBook.createCellStyle();
        for (int i = 0;i<keys1.length;i++) {
        	Cell cell = row.createCell(i);
        	cell.setCellValue(keys1[i]);
            setCellStyle(cell,cellStyle);
        }
        //  第二个工作簿 创建第一行
        Row row2 = sheet2.createRow(0);
        row2 = sheet2.createRow(0);
        for (int i = 0;i<keys2.length;i++) {
        	Cell cell2 = row2.createCell(i);
        	cell2.setCellValue(keys2[i]);
            setCellStyle(cell2,cellStyle);
        }
        
    }
    public static void mergeCell(int startRow, int endRow, int startCol, int endCol) {
        CellRangeAddress region = new CellRangeAddress(startRow, endRow, startCol, endCol);
        sheet.addMergedRegion(region);
    }
    
    public static void createTableRows(List<Map<String, Object>> datas1, String[] keys1,List<Map<String, Object>> datas2, String[] keys2) {
    	CellStyle cellStyle = workBook.createCellStyle();
    	//第一个工作簿写数据
    	for (int i = 0, length_1 = datas1.size(); i < length_1; i++) {
            Map<String, Object> data = datas1.get(i);
            Row row = sheet.createRow(i + 1);
            Cell cell = null;
            for (int j = 0, length_2 = keys1.length; j < length_2; j++) {
                // 单元格获取map中的key
                String key = keys1[j];
                String value = MapUtils.getString(data, key, "");
                cell = row.createCell(j);
                cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                cell.setCellValue(value);
                setCellStyle(cell,cellStyle);
            }
        }
    	//第二个工作簿写数据
        for (int i = 0, length_1 = datas2.size(); i < length_1; i++) {
            Map<String, Object> data = datas2.get(i);
            Row row = sheet2.createRow(i + 1);
            Cell cell = null;
            for (int j = 0, length_2 = keys2.length; j < length_2; j++) {
                // 单元格获取map中的key
                String key = keys2[j];
                String value = MapUtils.getString(data, key, "");
                cell = row.createCell(j);
                cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                cell.setCellValue(value);
                setCellStyle(cell,cellStyle);
            }
        }
    }
    public static void setCellStyle(Cell cell,CellStyle cellStyle) {
        // 设置样式
//        CellStyle cellStyle = workBook.createCellStyle();
        // 设置字体
        Font font = workBook.createFont();
        font.setFontName("宋体");
//        font.setBold(true);
        font.setFontHeightInPoints((short) 11);

        cellStyle.setFont(font);
        cell.setCellStyle(cellStyle);
    }
    public static void exportExcel(OutputStream outputStream,String [] headerNames1,String [] headerNames2) {
        // 导出之前先自动设置列宽
    	autoAllSizeColumn(headerNames1,headerNames2);
        try {
            workBook.write(outputStream);
        } catch (IOException e) {
        	
        } finally {
            IOUtils.closeQuietly(outputStream);
        }
    }
    /**
     * 根据表头自动调整列宽度
     */
    public static void autoAllSizeColumn(String [] headerNames1,String [] headerNames2) {
        if (sheet instanceof SXSSFSheet) {// 如果是SXSSFSheet,需要调用trackAllColumnsForAutoSizing方法一次
            SXSSFSheet tmpSheet = (SXSSFSheet) sheet;
            tmpSheet.trackAllColumnsForAutoSizing();
        }
        for (int i = 0, length = headerNames1.length; i < length; i++) {
            sheet.autoSizeColumn(i);
        }
        if (sheet2 instanceof SXSSFSheet) {// 如果是SXSSFSheet,需要调用trackAllColumnsForAutoSizing方法一次
            SXSSFSheet tmpSheet = (SXSSFSheet) sheet2;
            tmpSheet.trackAllColumnsForAutoSizing();
        }
        for (int i = 0, length = headerNames2.length; i < length; i++) {
            sheet2.autoSizeColumn(i);
        }
    }
}

这里是固定的两个,需要多个,不固定的,传个参数即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值