org.jxstar.report.xls.ReportXlsGrid.java Source code

Java tutorial

Introduction

Here is the source code for org.jxstar.report.xls.ReportXlsGrid.java

Source

/*
 * ReportXlsGrid.java 2010-11-11
 * 
 * Copyright 2010 Guangzhou Donghong Software Technology Inc.
 * Licensed under the www.jxstar.org
 */
package org.jxstar.report.xls;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.jxstar.report.ReportException;
import org.jxstar.report.util.ReportXlsUtil;
import org.jxstar.util.MapUtil;
import org.jxstar.util.resource.JsMessage;

/**
 * Excel
 *
 * @author TonyTan
 * @version 1.0, 2010-11-11
 */
public class ReportXlsGrid extends ReportXls {

    public Object output() throws ReportException {
        _log.showDebug("excel grid report output ...");

        String area_num = MapUtil.getValue(_mpMainArea, "page_size", "0");
        if (area_num.length() == 0 || area_num.equals("0")) {//"???"
            throw new ReportException(JsMessage.getValue("reportxlsgrid.hint01"));
        }

        //
        int pos = 0;
        //?
        int pageSize = Integer.parseInt(area_num);
        //
        int pageNum = ReportXlsUtil.calPageNum(_lsMainRecord.size(), pageSize);

        //?
        HSSFWorkbook tmpwb = ReportXlsUtil.readWorkBook(_xlsFile);
        HSSFSheet tmpsheet = tmpwb.getSheetAt(0);

        HSSFSheet sheet = _hssfWB.getSheetAt(0);

        //===================Grid??=========================
        String not_page = _mpMainArea.get("not_page");
        if (not_page.equals("1")) {
            if (insertSheetRow(sheet, pageSize)) {
                //?1?? 
                pageNum = 1;
                pageSize = _lsMainRecord.size();
            }
        }
        //==========================================================

        //
        for (int i = 0; i < pageNum; i++) {
            pos = i * pageSize;

            if (i == 0) {
                sheet = ReportXlsUtil.fillGrid(sheet, _lsMainRecord, _lsMainCol, _mpUser, pageSize, pos, i + 1,
                        pageNum);
                sheet = ReportXlsUtil.fillHead(sheet, _lsHeadInfo, _mpUser);
            } else {
                tmpsheet = ReportXlsUtil.fillGrid(tmpsheet, _lsMainRecord, _lsMainCol, _mpUser, pageSize, pos,
                        i + 1, pageNum);
                tmpsheet = ReportXlsUtil.fillHead(tmpsheet, _lsHeadInfo, _mpUser);

                //?
                sheet = ReportXlsUtil.appendSheet(sheet, tmpsheet);
                tmpwb = ReportXlsUtil.readWorkBook(_xlsFile);
                tmpsheet = tmpwb.getSheetAt(0);
            }
            //SHEET???
            if (i == 0)
                sheet.setForceFormulaRecalculation(true);

            //??
            if (!ReportXlsUtil.isAllowOut(sheet))
                break;
        }

        return _hssfWB;
    }

    //?
    private boolean insertSheetRow(HSSFSheet sheet, int pageSize) throws ReportException {
        //??
        if (!_lsMainRecord.isEmpty()) {
            //??
            int rows = _lsMainRecord.size() - pageSize;

            if (rows > 0) {
                //???
                String areaId = MapUtil.getValue(_mpMainArea, "area_id");
                int firstRow = ReportXlsUtil.getFirstRows(areaId);
                if (firstRow < 0)
                    return false;

                //???
                int startRow = firstRow + pageSize;
                ReportXlsUtil.insertSheetRow(sheet, startRow, rows);
                return true;
            }
        }

        return false;
    }
}