excel合并列导出文件

简介: excel合并列导出文件

image.png

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
    </dependency>

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>3.17</version>
    </dependency>

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.17</version>
    </dependency>

@Log(title = "字典类型", businessType = BusinessType.EXPORT)
@PreAuthorize("@ss.hasPermi('system:dict:export')")
@PostMapping("/export")
public void export(HttpServletResponse response, SysDictType dictType) throws IOException
{
List list = dictTypeService.selectDictTypeList(dictType);
//List pilebodysList = pilebodycheckService.pilebodystatisticsmonth(sysDepartDto, month);
//设置序号
for (int i = 1;i <= list.size();i++){
list.get(i-1).setDictId(Long.valueOf(i));
}
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// response.setContentType("application/vnd.ms-excel");
// response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("存量建筑垃圾堆体治理进度月报表", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
//内容样式策略
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
//垂直居中,水平居中
contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);
contentWriteCellStyle.setBorderTop(BorderStyle.THIN);
contentWriteCellStyle.setBorderRight(BorderStyle.THIN);
contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);
//设置 自动换行
contentWriteCellStyle.setWrapped(true);
// 字体策略
WriteFont contentWriteFont = new WriteFont();
// 字体大小
contentWriteFont.setFontHeightInPoints((short) 12);
contentWriteCellStyle.setWriteFont(contentWriteFont);
//头策略使用默认
WriteCellStyle headWriteCellStyle = new WriteCellStyle();

    //excel如需下载到本地,只需要将response.getOutputStream()换成File即可(注释掉以上response代码)
    EasyExcel.write(response.getOutputStream(), SysDictType.class)
            //设置输出excel版本,不设置默认为xlsx
           // .excelType(ExcelTypeEnum.XLS).head(SysDictType.class)
            //设置拦截器或自定义样式
            .registerWriteHandler(new MonthSheetWriteHandler())
            .registerWriteHandler(new HorizontalCellStyleStrategy(headWriteCellStyle,contentWriteCellStyle))
            .sheet("存量建筑垃圾堆体治理进度月报表")
            //设置默认样式及写入头信息开始的行数
            .useDefaultStyle(true).relativeHeadRowIndex(1)
            //这里的addsumColomn方法是个添加合计的方法,可删除
            .doWrite(list/*pilebodycheckService.addSumColomn(pilebodysList)*/);
   // return new WebApiResponse(200, "生成excel文件成功", null);
}

package com.AAA.web.ExcelUtil;

import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;

public class MonthSheetWriteHandler implements SheetWriteHandler {

@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {

}

@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
    Workbook workbook = writeWorkbookHolder.getWorkbook();
    Sheet sheet = workbook.getSheetAt(0);
/*    Row row1 = sheet.createRow(0);
    row1.setHeight((short) 500);
    Cell cell = row1.createCell(0);
    //设置单元格内容
    cell.setCellValue("附件2");*/
    //设置标题
    Row row2 = sheet.createRow(0);
    row2.setHeight((short) 800);
    Cell cell1 = row2.createCell(0);
    cell1.setCellValue("存量建筑垃圾堆体治理进度月报表");
    CellStyle cellStyle = workbook.createCellStyle();
    cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
    cellStyle.setAlignment(HorizontalAlignment.CENTER);
    Font font = workbook.createFont();
    font.setBold(true);
    font.setFontHeight((short) 400);
    cellStyle.setFont(font);
    cell1.setCellStyle(cellStyle);
    sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 0, 0, 17));
    //设置填表日期,填报人,联系方式
/*    Row row3 = sheet.createRow(2);
    row3.setHeight((short) 500);*/

/ row3.createCell(1).setCellValue("填表日期");
row3.createCell(11).setCellValue("填表人");
row3.createCell(15).setCellValue("联系方式");
/

}
}

package com.AAA.common.core.domain.entity;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.AAA.common.annotation.Excel;
import com.AAA.common.annotation.Excel.ColumnType;
import com.AAA.common.core.domain.BaseEntity;

import java.util.Date;

/**

  • 字典类型表 sys_dict_type
    *
  • @author ruoyi
    /
    @Data
    @ToString
    @NoArgsConstructor
    @Accessors(chain = true)
    @ContentRowHeight(45)
    @HeadRowHeight(50)
    public class SysDictType /
    extends BaseEntity*/
    {
    private static final long serialVersionUID = 1L;

    /* 字典主键 /
    @ExcelProperty(value = {"字典主键","字典主键"},index = 0)
    @ColumnWidth(30)

    private Long dictId;

    /* 字典名称 /
    @ExcelProperty(value = {"字典名称","字典名称"},index = 1)
    @ColumnWidth(30)

    private String dictName;

    /* 字典类型 /
    // @Excel(name = "字典类型")
    @ExcelProperty(value = {"字典类型","字典类型"},index = 2)
    @ColumnWidth(30)

    private String dictType;

    /* 状态(0正常 1停用) /
    @ExcelProperty(value = {"合并列","状态"},index = 3)
    private String status;

    /* 创建时间 /
    @ExcelProperty(value = {"合并列","创建时间"},index = 4)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ColumnWidth(30)

    private Date createTime;

    /* 备注 /
    @ExcelProperty(value = {"合并列","备注"},index = 5)
    @ColumnWidth(30)

    private String remark;

    public Long getDictId()
    {

     return dictId;
    

    }

    public void setDictId(Long dictId)
    {

     this.dictId = dictId;
    

    }
    // @ExcelProperty(value = {"字典类型","字典类型"},index = 0)

    @NotBlank(message = "字典名称不能为空")
    @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符")
    public String getDictName()
    {

     return dictName;
    

    }

    public void setDictName(String dictName)
    {

     this.dictName = dictName;
    

    }

    @NotBlank(message = "字典类型不能为空")
    @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符")
    @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)")
    public String getDictType()
    {

     return dictType;
    

    }

}

package com.AAA.common.core.domain.entity;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.AAA.common.annotation.Excel;
import com.AAA.common.annotation.Excel.ColumnType;
import com.AAA.common.core.domain.BaseEntity;

import java.util.Date;

/**

  • 字典类型表 sys_dict_type
    *
  • @author ruoyi
    /
    @Data
    @ToString
    @NoArgsConstructor
    @Accessors(chain = true)
    @ContentRowHeight(45)
    @HeadRowHeight(50)
    public class SysDictType /
    extends BaseEntity*/
    {
    private static final long serialVersionUID = 1L;

    /* 字典主键 /
    @ExcelProperty(value = {"字典主键","字典主键"},index = 0)
    @ColumnWidth(30)

    private Long dictId;

    /* 字典名称 /
    @ExcelProperty(value = {"字典名称","字典名称"},index = 1)
    @ColumnWidth(30)

    private String dictName;

    /* 字典类型 /
    // @Excel(name = "字典类型")
    @ExcelProperty(value = {"字典类型","字典类型"},index = 2)
    @ColumnWidth(30)

    private String dictType;

    /* 状态(0正常 1停用) /
    @ExcelProperty(value = {"合并列","状态"},index = 3)
    private String status;

    /* 创建时间 /
    @ExcelProperty(value = {"合并列","创建时间"},index = 4)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ColumnWidth(30)

    private Date createTime;

    /* 备注 /
    @ExcelProperty(value = {"合并列","备注"},index = 5)
    @ColumnWidth(30)

    private String remark;

    public Long getDictId()
    {

     return dictId;
    

    }

    public void setDictId(Long dictId)
    {

     this.dictId = dictId;
    

    }
    // @ExcelProperty(value = {"字典类型","字典类型"},index = 0)

    @NotBlank(message = "字典名称不能为空")
    @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符")
    public String getDictName()
    {

     return dictName;
    

    }

    public void setDictName(String dictName)
    {

     this.dictName = dictName;
    

    }

    @NotBlank(message = "字典类型不能为空")
    @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符")
    @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)")
    public String getDictType()
    {

     return dictType;
    

    }

}

/**

  • 开始时间
    excel中不显示 /
    @ExcelIgnore
相关文章
|
12天前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分到不同的工作表中。本文通过一个示例代码展示了如何生成一个包含总成绩表和三个班级表的Excel文件。代码首先创建了一个包含学生姓名、班级和各科成绩的数据框,然后按班级分组,将每个班级的数据分别写入不同的工作表。最后,生成的Excel文件将包含四个工作表,分别为总成绩表和三个班级的成绩表。
22 6
按条件将Excel文件拆分到不同的工作表
|
11天前
|
Python
批量将不同的工作簿合并到同一个Excel文件
本文介绍如何使用Python的`pandas`库批量合并不同工作簿至同一Excel文件。通过模拟生成三个班级的成绩数据,分别保存为Excel文件,再将这些文件合并成一个包含所有班级成绩的总成绩单。步骤包括安装必要库、生成数据、保存与合并工作簿。
21 6
|
11天前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分为多个工作表。本文通过一个具体示例,展示了如何根据学生班级将成绩数据拆分到不同的工作表中,并生成一个包含总成绩表和各班级成绩表的Excel文件。代码简洁明了,适合初学者学习和应用。
26 6
|
20天前
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
24 1
|
22天前
|
数据格式 UED
记录一次NPOI库导出Excel遇到的小问题解决方案
【11月更文挑战第16天】本文记录了使用 NPOI 库导出 Excel 过程中遇到的三个主要问题及其解决方案:单元格数据格式错误、日期格式不正确以及合并单元格边框缺失。通过自定义单元格样式、设置数据格式和手动添加边框,有效解决了这些问题,提升了导出文件的质量和用户体验。
138 3
|
1月前
|
Java API Apache
|
1月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
43 4
|
2月前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
78 6
|
2月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
2月前
|
前端开发 JavaScript API
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
182 0