展示如下
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,