Java导出自定义文件xlsx/xls格式,合并单元格,列表循环格式

这篇博客介绍了如何使用Java的POI库来导出自定义的xlsx和xls文件,包括如何合并单元格以及设置表格颜色。通过切换HSSF和XSSF,可以轻松在两种文件格式间进行切换。文中提供了设置表格颜色的示例代码,强调了正确配置背景颜色的方法。
摘要由CSDN通过智能技术生成

展示如下
在这里插入图片描述

XSSF对应xlsx文件格式是POI工程对Excel 2007 OOXML (.xlsx)文件操作的纯Java实现
HSSF对应xls文件格式是POI工程对Excel 97(-2007)文件操作的纯Java实现
想切换版本格式就把全文的HSSF和XSSF相互替换就可以了,可能会有个别的方法不适用,转换对应包下的方法即可

package com.ubox.yunzhanghu.cloudSaas.utils;

import java.io.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Excel {
   

	private XSSFWorkbook workbook;
    private XSSFSheet sheet;
    private String bDate;
    private int year;

    /**
     * 创建行元素
     * @param style    样式
     * @param height   行高
     * @param value    行显示的内容
     * @param row1     起始行
     * @param row2     结束行
     * @param col1     起始列
     * @param col2     结束列
     */
    private void createRow(CellStyle style, int height, String value, int row1, int row2, int col1, int col2){
   

        sheet.addMergedRegion(new CellRangeAddress(row1, row2, col1, col2));  //设置从第row1行合并到第row2行,第col1列合并到col2列
        XSSFRow rows = sheet.createRow(row1);        //设置第几行
        rows.setHeight((short) height);              //设置行高
        XSSFCell cell = rows.createCell(col1);       //设置内容开始的列
        cell.setCellStyle(style);                    //设置样式
        cell.setCellValue(value);                    //设置该行的值
    } 

    /**
     * 创建样式
     * @param fontSize   字体大小
     * @param align  水平位置  左右居中2 居右3 默认居左 垂直均为居中
     * @param bold   是否加粗
     * @return
     */
    private XSSFCellStyle getStyle(int fontSize,int align,boolean bold,boolean border){
   
        Font font = workbook.createFont();
        font.setFontName("宋体");
        font.setFontHeightInPoints((short) fontSize);// 字体大小
        if (bold){
   
            font.setBold(true);
        }
        
        XSSFCellStyle style = workbook.createCellStyle();
        style.setFont(font);                         //设置字体
        style.setAlignment(HorizontalAlignment.CENTER);          // 左右居中2 居右3 默认居左
        style.setAlignment(HorizontalAlignment.CENTER);// 上下居中1
        if (border){
   
        	style.setBorderLeft(BorderStyle.valueOf((short) 2));
            style.setBorderRight(BorderStyle.valueOf((short) 2));
            style.setBorderBottom(BorderStyle.valueOf((short) 2));
            style.setBorderTop(BorderStyle.valueOf((short) 2));
            style.setLocked(true);
        }
        return style;
    }

    /**
     * 根据数据集生成Excel,并返回Excel文件流
     * @param data 数据集
     * @param sheetName Excel中sheet单元名称
     * @param headNames 列表头名称数组
     * @param colKeys 列key,数据集根据该key进行按顺序取值
     * @return
     * @throws IOException
     */
    public InputStream getExcelFile(List<Map> data, String sheetName, String[] headNames,
                                    String[] colKeys, int colWidths[],String bDate) throws IOException {
   
        this.bDate = bDate;
        workbook = new XSSFWorkbook();
        sheet = workbook.createSheet(sheetName);
        // 创建表头 startRow代表表体开始的行
        int startRow = createHeadCell( headNames, colWidths);

        // 创建表体数据
        XSSFCellStyle cellStyle = getStyle(14,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值