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
相关文章
|
7天前
|
Java API Apache
|
11天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
23 4
|
15天前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
|
1月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
1月前
|
数据处理 Python
Python 高级技巧:深入解析读取 Excel 文件的多种方法
在数据分析中,从 Excel 文件读取数据是常见需求。本文介绍了使用 Python 的三个库:`pandas`、`openpyxl` 和 `xlrd` 来高效处理 Excel 文件的方法。`pandas` 提供了简洁的接口,而 `openpyxl` 和 `xlrd` 则针对不同版本的 Excel 文件格式提供了详细的数据读取和处理功能。此外,还介绍了如何处理复杂格式(如合并单元格)和进行性能优化(如分块读取)。通过这些技巧,可以轻松应对各种 Excel 数据处理任务。
157 16
|
1月前
|
前端开发 JavaScript
💥【exceljs】纯前端如何实现Excel导出下载和上传解析?
本文介绍了用于处理Excel文件的库——ExcelJS,相较于SheetJS,ExcelJS支持更高级的样式自定义且易于使用。表格对比显示,ExcelJS在样式设置、内存效率及流式操作方面更具优势。主要适用于Node.js环境,也支持浏览器端使用。文中详细展示了如何利用ExcelJS实现前端的Excel导出下载和上传解析功能,并提供了示例代码。此外,还提供了在线调试的仓库链接和运行命令,方便读者实践。
253 5
|
1月前
|
JSON 数据格式
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
63 2
|
1月前
|
IDE 开发工具 数据安全/隐私保护
Python编程--实现用户注册信息写入excel文件
Python编程--实现用户注册信息写入excel文件
|
24天前
|
前端开发 JavaScript API
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
110 0
|
29天前
|
前端开发 JavaScript Java
导出excel的两个方式:前端vue+XLSX 导出excel,vue+后端POI 导出excel,并进行分析、比较
这篇文章介绍了使用前端Vue框架结合XLSX库和后端结合Apache POI库导出Excel文件的两种方法,并对比分析了它们的优缺点。
192 0