All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.joylau.office.excel.support.template.expression.CommonCellHelper Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (c) 2017 by JoyLau. All rights reserved
 ******************************************************************************/

package cn.joylau.office.excel.support.template.expression;

import cn.joylau.commons.utils.StringUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

import java.util.Date;

/**
 * 默认的模板单元格渲染辅助器
 */
public class CommonCellHelper implements CellHelper {

    /**
     * 表格实例
     */
    private Sheet sheet;

    /**
     * 当前行实例
     */
    private Row nowRow;


    @Override
    public void setSheet(Sheet sheet) {
        this.sheet = sheet;
        nowRow=null;
    }

    @Override
    public void initCell(Object value, Cell cell) {
        initCellValue(cell, value);
    }

    @Override
    public void nextCell(Object value, Cell cell) {
        //模板列索引
        int nowColumn = cell.getColumnIndex();
        //数据列所有
        Cell realCell = nowRow.getCell(nowColumn);
        if (realCell == null) {
            realCell = nowRow.createCell(nowColumn);
        }
        //复制样式
        realCell.setCellStyle(cell.getCellStyle());
        //初始化单元格值
        initCellValue(realCell, value);
    }

    @Override
    public void nextRow(Cell cell) {
        if (nowRow == null) {
            //首次渲染行,则将表达式所在行替换为数据行
            nowRow = cell.getRow();
        } else {
            //创建下一行
            int rowNum = nowRow.getRowNum() + 1;
            //将最后一行移动到当前行,以实现插入行效果
            sheet.shiftRows(rowNum,sheet.getLastRowNum(),1,true,false);
            Row tmp = sheet.createRow(rowNum);
            tmp.setHeight(nowRow.getHeight());
            tmp.setHeightInPoints(nowRow.getHeightInPoints());
            nowRow = tmp;
        }
    }

    protected void initCellValue(Cell cell, Object value) {
        if (value == null) {
            cell.setCellValue("");
            return;
        }
        if (value instanceof Number) {
            cell.setCellValue(StringUtils.toDouble(value));
        } else if (value instanceof Date) {
            cell.setCellValue((Date) value);
        } else {
            cell.setCellValue(String.valueOf(value));
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy