Giter Site home page Giter Site logo

poi-util's Introduction

poi-util 加强POI相关操作工具包

迭代记录

  • 2020年11月27日11:33:35 完成Excel导出的部分

  • 2021年3月10日16:38:21 0.0.3版本发布

    • Excel导入部分 新增正则检验,可通过注解的方式配置字段的正则表达式
  • 2021年3月11日14:15:26 0.0.4 版本发布

    • Excel转h5功能,实现Excel在线预览

maven 坐标

<dependency>
    <groupId>com.gitee.bodboy</groupId>
    <artifactId>poi-utils</artifactId>
    <version>0.0.2-SNAPSHOT</version>
</dependency>

工具包说明

继承工具类 完结时间
Excel导出
通用导出fillCustomer 2020年11月27日11:33:35
定制导出 fillCommon 2020年11月27日11:33:35
Excel 导入 transformation 自动校验 2020年11月27日17:16:47
Excel转HTML excelToH5支持固定表头 2021年3月11日14:16:21
WORD模版导出 convertWord 2020年12月2日11:17:49
自动全局调整格式位水平排列 2020年12月2日11:17:49
默认按照模板文件样式 2020年12月2日11:17:49
Excel 模版导出 未开发

1. 结构说明

2. 使用说明

该部分的核心功能是自定义注解,在你需要导出的实体类中,
将你需要作为表头导出的字段加上自定义注解 @FieldName ,
注解的属性有value,为Excel表头名称 require是否必填,默认为否
simpleDate时间格式为,默认为 空  

3. 调用说明

实体类示例

@Data
public class ProjectVo {

    @FieldName(value = "项目")
    private String name;

    @FieldName(value = "电话" ,pattern = "/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$/")
    private String phone;

    private String person;

    @FieldName(value = "金额")
    private Double money;

    @FieldName(value = "负责人")
    private String processPeople;

    @FieldName(value = "周期")
    private String cycle;

    @FieldName(value = "记录日期",dateFormat = "yyyy-MM-dd")
    private Date date;
}

导出功能调用,目前Excel导出分两种

  • 通用导出(默认注解value为表头,根据字段值的长度来自适应宽度,全局字体上下左右居中)

  • 定制导出 (支持多sheet页导出,支持自定义标题,表头,样式,字体等)

3.1 通用导出Excel

调用方法

    
    Workbook wb = new XSSFWorkbook();
    //模拟数据
    List<ProjectVo> list = mockData();
    //调用导出方法 
    // 参数说明 wb对象   集合数据  sheetName 默认为sheet
    ExcelExport.getInstance().fillCommon(wb,list,null);
    FileOutputStream out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\测试导出.xlsx");
    wb.write(out);
    out.close();

效果如下

3.2 定制导出Excel
    //定制excel
    Workbook wb = new XSSFWorkbook();
    Sheet sheet = wb.createSheet("定制表头导出");
    CellStyle cellStyle = wb.createCellStyle();
    Font font = wb.createFont();
    List<ProjectVo> list = mockData();

    Map<String, List> declaredFieldsInfo = ClassUtils.getDeclaredFieldsInfo(list.get(0));
    int size = declaredFieldsInfo.get(Constants.HEAD).size();
    sheet.addMergedRegion(new CellRangeAddress(0,0,0,size -1 ));
    //主体部分
    Row row = sheet.createRow(0);
    Cell cell = row.createCell(0);
    font.setBold(true);
    font.setFontHeightInPoints((short) 16);
    font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);

    CellStyle headStyle = wb.createCellStyle();
    headStyle.setFont(font);
    //设置对齐样式
    headStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
    headStyle.setFillForegroundColor(HSSFColor.DARK_RED.index);
    cell.setCellType(1);
    cell.setCellValue("这是定制的单元格头");
    cell.setCellStyle(headStyle);
    
    
    //核心导出部分  前面部分可以自己定制表头,标题,全局样式,多sheet等 
    
    ExcelExport.getInstance().fillCustomer(sheet,1,null,cellStyle,list);
    FileOutputStream out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\定制导出.xlsx");
    wb.write(out);
    out.close();

效果如下所示

3.3 Excel导入功能

导入功能还是基于注解部分,会去查找你实体类@Field注解值和Excel表头对应的上的字段,然后将数值对实体类进行数据填充

实体类注解可以参考导入

方法调用入口ExcelImport.getInstance().transformation() ,参数说明

/**
     * 标题所在行号 默认为 0
     */
    private Integer rowNum = Integer.valueOf(0);

    /**
     * 是否格式话标题  去掉 空格  换行符
     */
    private Boolean formatTitle = Boolean.valueOf(true);

    /**
     * 指定存放错误日志的字段名
     */
    private String fieldError =  null ;

    /**
     * 指定记录表格行数的字段名
     */
    private String fieldRows =  null;

导出的数据的实体列, 相关注解说明,@required 是否为必填,根据字段类型进行数据格式校验,@dateFormat格式校验

@Data
public class ProjectVo {

    @FieldName(value = "项目")
    private String name;

    @FieldName(value = "电话")
    private String phone;

    @FieldName(value = "联系人")
    private String person;

    @FieldName(value = "金额")
    private Double money;

    @FieldName(value = "负责人" ,required = true)
    private String processPeople;

    @FieldName(value = "周期")
    private String cycle;

    @FieldName(value = "记录日期",dateFormat = "yyyy-MM-dd")
    private Date date;

    private String error;

    private Integer rows;
}

可以每个参数都有默认值,不设置即认为是默认。可以通过链式操作来设置各个属性值

List <ProjectVo> list = ExcelImport.getInstance().setRowNum(5).setFieldRows("rows").isFormatTitle(true).setFieldError("error").transformation(sheet ,ProjectVo.class);

导出效果如下所示

3.4 WORD模板导出文件 (目前仅支持docx文档 不兼容07版本以下)
  • 支持图片(http路径图片资源)
  • 支持多个格式的文本内容
  • 支持纯文本内容
  • 支持文本 + 列表模式

方法调用入口 WordExport.getInstance().convertWord(in , resMap , fileName , isDefaultSyle)

参数说明

  • in 文件直接输入流 ,读取模版文件并转换成FileInputStream + resMap 需要填充word文档的数据,k-v形式, k必须对应这个模版中的${}中的标识
  • fileName 导出文件的名称
  • isDefaultSyle 是否使用水平样式 这个参数非必要,不传为默认模版样式

模版文件示例

数据写入效果

代码调用

3.5 ExcelHtml
  • 支持源文件格式
  • 支持自定义固定行数
  • 灵活调用
    • 可以是文件路径
    • 可以是excel Wookbook对象

调用案例

private static void testToH5() throws IOException {
  String path = "C:\\Users\\Administrator\\Desktop\\测试导出.xlsx";
  Workbook workbook = ExcelTools.readExcel(path);
  // String s = ExcelToHtml.getInstance().excelToH5(path, null, true,1);
  String s = ExcelToHtml.getInstance().excelToH5(null, workbook, true,1);
  System.out.println(s);
}

控制台输出 image.png 页面预览 image.png


发布指令 mvn clean deploy -P

poi-util's People

Stargazers

 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.