【工具类】Excel导出那些事儿(五)

接上一篇博客,继续介绍双标题导出.

/**
 * 双标题excel导出
 * @param response
 * @param fileName 文件名
 * @param sheetName sheet页名
 * @param firstTitle 第一行表头标题 
 * @param title  第二行标题
 * @param content 每一列对应值
 * @param list 单元格下拉选项(可根据具体需求去留)
 */
public static void exportForTwoTitle(HttpServletResponse response, String fileName, String sheetName, String firstTitle, String[] title, String[][] content, List<T> list) {
    XSSFWorkbook wb = new XSSFWorkbook();
    OutputStream os = null;
    try {
        wb = exportXlsForTwoTitle(sheetName, firstTitle,title, content, wb,list);
        ExcelUtil.setResponse(response, fileName);
        os = response.getOutputStream();
        wb.write(os);
        os.flush();
    } catch (Exception e) {
        logger.error("io error");
    } finally {
        try {
            wb.close();
            if (os != null) {
                os.close();
            }
        } catch (Exception e) {
            logger.error("close io error");
        }
    }
}

/**
 * 导出Excel(双标题)
 *
 * @param sheetName sheet名称
 * @param title     标题
 * @param values    内容
 * @param wb        HSSFWorkbook对象
 * @return
 */
public static XSSFWorkbook exportXlsForTwoTitle(String sheetName, String firstTitle, String[] title, String[][] values, XSSFWorkbook wb,List<T> list) {

    // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
    if (wb == null) {
        wb = new XSSFWorkbook();
    }

    // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
    XSSFSheet sheet = wb.createSheet(sheetName);
    //设置默认列宽
    sheet.setDefaultColumnWidth(20);
    // 第四步,创建单元格,并设置值表头 设置表头居中
    XSSFCellStyle style = wb.createCellStyle();
    // 创建一个居中格式
    style.setAlignment(HorizontalAlignment.CENTER);
    //设置文本格式
    XSSFDataFormat format = wb.createDataFormat();
    style.setDataFormat(format.getFormat("@"));
    // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
    XSSFRow row0 = sheet.createRow(0);
    row0.setHeightInPoints(175);
    //sheet.autoSizeColumn(1, true);
    XSSFCellStyle style0 = wb.createCellStyle();
    // 创建一个居中格式
    style0.setAlignment(HorizontalAlignment.LEFT);
    // 自动换行
    style0.setWrapText(true);
    // 生成一个字体
    XSSFFont font = wb.createFont();
    font.setFontHeightInPoints((short) 11);
    font.setColor(HSSFColor.ROYAL_BLUE.index);
    font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
    font.setFontName("仿宋_GB2312");

    // 把字体 应用到当前样式
    style0.setFont(font);
    XSSFCell cell0 = row0.createCell(0);
    // 单元格合并
    CellRangeAddress region = new CellRangeAddress(0,0, 0,9 );
    sheet.addMergedRegion(region);
    cell0.setCellValue(firstTitle);
    cell0.setCellStyle(style0);
    XSSFRow row = sheet.createRow(1);
    XSSFCell cell;
    //创建标题
    for (int i = 0; i < title.length; i++) {
        cell = row.createCell(i);
        cell.setCellValue(title[i]);
        cell.setCellStyle(style);
    }
	//设置某一列字段的下拉框值选项
    String[] typeList = Type.getAllEnum().toArray(new String[]{});
    XSSFDataValidation dataValidationType = setColumnList(sheet,typeList,1);
    if (dataValidationType != null) {
        sheet.addValidationData(dataValidationType);
    }

    //********************************************************
    //创建内容
    if(values != null && values.length >0){
        //创建内容
        for (int i = 0; i < values.length; i++) {
            row = sheet.createRow(i + 2);
            for (int j = 0; j < values[i].length; j++) {
                //将内容按顺序赋给对应的列对象
                cell = row.createCell(j);
                cell.setCellStyle(style);
                cell.setCellValue(values[i][j]);
                cell.setCellType(XSSFCell.CELL_TYPE_STRING);
            }
        }
    }
    return wb;
}

/**
 * 设置指定字段下拉选项
 * @param sheet 当前sheet
 * @param textList 下拉选项
 * @param colNum 第几列
 * @return
 */
public static XSSFDataValidation setColumnList(XSSFSheet sheet, String[] textList, int colNum) {
    XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
    XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper
            .createExplicitListConstraint(textList);
    CellRangeAddressList addres = new CellRangeAddressList(1,65536,colNum,colNum);
    XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(
            dvConstraint, addres);
    validation.setSuppressDropDownArrow(true);
    return validation;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Java Excel 导出工具类的示例: ```java import java.io.FileOutputStream; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class ExcelUtil { /** * 导出Excel * @param title 表格标题 * @param headers 表头 * @param dataset 数据集合 * @param out 输出流 */ public static void exportExcel(String title, String[] headers, List<Object[]> dataset, FileOutputStream out) { try { // 创建工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作表 HSSFSheet sheet = workbook.createSheet(title); // 设置表格默认列宽度为15个字符 sheet.setDefaultColumnWidth(15); // 创建标题行 HSSFRow row = sheet.createRow(0); HSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建标题单元格 HSSFCell cell; for (int i = 0; i < headers.length; i++) { cell = row.createCell(i); cell.setCellValue(headers[i]); cell.setCellStyle(style); } // 填充数据 for (int i = 0; i < dataset.size(); i++) { Object[] objArr = dataset.get(i); row = sheet.createRow(i + 1); for (int j = 0; j < objArr.length; j++) { // 创建数据单元格 row.createCell(j).setCellValue(String.valueOf(objArr[j])); } } // 输出Excel文件 workbook.write(out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 使用示例: ```java public class TestExcelUtil { public static void main(String[] args) { try { FileOutputStream out = new FileOutputStream("D:/test.xls"); String[] headers = { "姓名", "年龄", "性别" }; List<Object[]> dataset = new ArrayList<Object[]>(); dataset.add(new Object[] { "张三", 20, "男" }); dataset.add(new Object[] { "李四", 22, "女" }); dataset.add(new Object[] { "王", 25, "男" }); ExcelUtil.exportExcel("学生信息表", headers, dataset, out); System.out.println("导出成功!"); } catch (Exception e) { e.printStackTrace(); } } } ``` 该示例使用 Apache POI 库来实现 Excel 导出功能,并且支持设置表格标题、表头、数据集合以及输出流等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值