首页 > 其他分享 >hutool poi 基于模板的Excel文件导出

hutool poi 基于模板的Excel文件导出

时间:2022-12-08 16:46:07浏览次数:41  
标签:origin writer Excel hutool param ExcelColumnConfig destFile poi config

 /**
     * 写Excel文件
     *
     * @param data             数据
     * @param configs          列配置
     * @param destFile         目标文件
     * @param templateFile     模板文件
     * @param onlyAlias        是否仅写出有别名的列
     * @param isWriteKeyAsHead 是否写出标题行
     * @return excel写对象
     */
    private static BigExcelWriter writerExcel(Collection data, List<ExcelColumnConfig> configs, File destFile, File templateFile, boolean onlyAlias, boolean isWriteKeyAsHead, int startRowIndex) {
        BigExcelWriter writer = null;
        if (templateFile != null) {
            //根据模板写数据
            try {
                SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(new XSSFWorkbook(templateFile), -1);
                writer = new BigExcelWriter(sxssfWorkbook, "sheet1");
            } catch (Exception ex) {
                log.error("构造BigExcelWriter异常:", ex);
            }
            log.info("exportExcel templateFile:" + templateFile);
        } else {
            //直接根据目标文件写数据
            writer = new BigExcelWriter(-1);
            log.info("exportExcel destFile:" + destFile);
        }
        //添加列别名
        if (CollUtil.isNotEmpty(configs)) {
            for (ExcelColumnConfig config : configs) {
                writer.addHeaderAlias(config.getOrigin(), config.getAlias());
            }
        }

        //设置起始行
        writer.setCurrentRow(startRowIndex);

        // 只写出加了别名的字段
        writer.setOnlyAlias(onlyAlias);

        // 写入数据
        writer.write(data, isWriteKeyAsHead);

        // 调整列样式(在写入数据后方可调整样式)
        if (CollUtil.isNotEmpty(configs)) {
            //从标题行下一行开始覆写整列单元格样式
            if (isWriteKeyAsHead) {
                startRowIndex++;
            }
            int columnIndex = 0;
            for (ExcelColumnConfig config : configs) {
                //创建新样式
                CellStyle cellStyle = writer.createCellStyle();
                //设置边框
                StyleUtil.setBorder(cellStyle, BorderStyle.THIN, IndexedColors.BLACK);
                //设置对齐方式
                if (config.getHorizontalAlignment() != null) {
                    cellStyle.setAlignment(config.getHorizontalAlignment());
                    cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
                }
                //设置数据格式
                if (config.getFmt() != null) {
                    cellStyle.setDataFormat(config.getFmt());
                }
                writer.setColumnStyleIfHasData(columnIndex, startRowIndex, cellStyle);

                //列号递增
                columnIndex++;
            }
        }

        //手动设置目标输出文件
        writer.setDestFile(destFile);
        log.info("exportExcel destFile:" + destFile);
        return writer;
    }
@Data
@Accessors(chain = true)
public class ExcelColumnConfig {

    /**
     * 属性名
     */
    private String origin;

    /**
     * 列名
     */
    private String alias;

    /**
     * 水平对齐方式
     */
    private HorizontalAlignment horizontalAlignment;

    /**
     * 数据格式
     *
     * @see BuiltinFormats
     */
    private Short fmt;

    /**
     * 快速创建配置对象
     *
     * @param origin 属性名
     * @param alias  别名
     * @return 新建对象
     */
    public static ExcelColumnConfig makeConfig(String origin, String alias) {
        return new ExcelColumnConfig().setOrigin(origin).setAlias(alias);
    }

    /**
     * 快速创建配置对象
     *
     * @param origin              属性名
     * @param alias               别名
     * @param horizontalAlignment 水平对齐方式
     * @return 新建对象
     */
    public static ExcelColumnConfig makeConfig(String origin, String alias, HorizontalAlignment horizontalAlignment) {
        return new ExcelColumnConfig().setOrigin(origin).setAlias(alias).setHorizontalAlignment(horizontalAlignment);
    }

}

 

标签:origin,writer,Excel,hutool,param,ExcelColumnConfig,destFile,poi,config
From: https://www.cnblogs.com/hdwang/p/16966513.html

相关文章

  • Dockerfile中CMD和ENTRYPOINT的区别
    CMD和ENTRYPOINT同样作为容器启动时执行的命令,区别有以下几点:CMD的命令会被dockerrun的命令覆盖而ENTRYPOINT不会如使用CMD["/bin/bash"]或ENTRYPOINT["/bin/bash"]后,......
  • 【开源库推荐】#4 Poi-办公文档处理库
    原文:【开源库推荐】#4Poi-办公文档处理库-Stars-One的杂货小窝github仓库apache/poiApachePOI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microso......
  • VBA-Excel边框加颜色
    Subfont_sty(RngAsRange)Rng.SelectSelection.Font.Bold=TrueWithSelection.Interior.Pattern=xlSolid.PatternColorIndex=xlAutom......
  • NPOI导出
    1、在服务层安装NPOI包  2、直接在服务层创建.cs文件using引用NPOI3、在Dto中加入Description特性主要用于枚举和属性   4、创建工作簿设置表格中样式以及......
  • 爬取的数据存入csv文件-用excel直接打开乱码解决方法
    如图所示:解决方法:用记事本打开另存为,编码格式为ansicsv部分源码......
  • 用vba把excel文件发布转化为pdf格式文件
    SubPDF()DimasyAsWorksheetDimspathAsStringspath=Excel.ThisWorkbook.PathForEachasyInExcel.ThisWorkbook.WorksheetssName=spath&"\"&as......
  • spring boot中Excel文件下载踩坑大全
    项目场景:Springboot文件下载调用接口下载springboot工程的resources目录下的excel模板文件,非常常见的一个文件下载功能,但是却容易遇到很多坑,下面总结记录下。问题一:下载的......
  • Excel VLOOKUP 函数的使用
    需要注意的几个地方:IFERROR,第一个参数,是需要判断的值VLOOKUP,第二个参数,匹配的区域,第一列,必须是匹配的列。比如:第一个参数是订单号,那么第二个参数的那个区域的第一列......
  • 在Excel中,如何将超出单元格的文字自动隐藏;;excel行序号不连续
    excel行号不连续的原因,并给出相应的行号不连续的解决方法_office教程网(office26.com) 自行搜索,标题就是搜索关键词......
  • 从excel中查找对应的SN
    #!/usr/bin/pythonimportxlrdimportos'''#readlastlineheaddatawithopen('ReadMac.txt',"r")asfile:file_content=file.readlines()#把全文档读取......