zoukankan      html  css  js  c++  java
  • 报表系统 API接口

     

    复杂报表除了提供上述标准化功能之外,还允许用户通过挂接自定义脚本插件以实现个性化报表需求。自定义脚本插件命名规则是XXX.php,其中XXX代表该报表的id(id可以通过查看编辑报表页面的地址而得到),存放路径为webrootgeneralappbuildermodules eportplugin。用户自定义的脚本插必须实现以下函数:

    /**

    *这里实现个性化报表需求

    *@param $obj_custome_report 代表当前复杂报表对象

    *@return void

    */

    function mydraw($obj_custom_report){

    //按以下方式调用复杂报表接口

    //$obj_custom_report->doCreateSheet(“我的报表”);

    }

    复杂报表处理引擎会在解析执行当前报表逻辑完成之后、最终输出报表之前判断本报表是否挂接有脚本插件,如果有,则包含该脚本文件并调用mydraw方法,并给它传递代表当前复杂报表对象的$obj_custom_report。复杂报表自定义脚本插件举例如下:

    <?
    /**
    *这里实现个性化报表需求
    *@param $obj_custome_report 代表当前复杂报表对象
    *@return void
    */
    function mydraw($obj_custom_report){
    //按以下方式调用复杂报表接口
    //$obj_custom_report->doCreateSheet(“我的报表”);
    $arr_align = ["horizontal" => "left", "vertical" => "center"];//对齐方式
    $arr_border = ["style" => "thin", "color" => ["argb" => "FF000000"]];//
    $arr_Borders = ["left"=>$arr_border, "right"=>$arr_border,"top"=>$arr_border,"bottom"=>$arr_border];// 边框
    $arr_header = ["type"=>"solid", "color"=>["argb"=>"FF0000FF"]];//蓝色 表头背景色
    $arr_odd = ["type"=>"solid", "color"=>["argb"=>"FF00FF00"]];//绿色 奇数行背景数
    $arr_even = ["type"=>"solid", "color"=>["argb"=>"FFFFFF00"]];//绿色 偶数行背景色

    //获得数据集所有数据
    $arr_row = $obj_custom_report->doOpenDataset("人员情况");
    if(!empty($arr_row)){
    $i_col = 0;
    foreach($arr_row[0] as $s_key => $s_val){ //输出表头

    $obj_custom_report->doSetValue(0, $i_col, 1, iconv("GBK", "UTF-8", $s_key));
    $obj_custom_report->doSetBorders(0, $i_col, 1, $arr_Borders);
    $obj_custom_report->doSetFill(0, $i_col, 1, $arr_header);
    $obj_custom_report->doSetAlign(0, $i_col, 1, $arr_align);
    $i_col++;
    }

    $i_row = 2;
    $i_prev_row = 2;
    $s_prev_val = "";
    foreach($arr_row as $row){//输出数据
    $i_col = 0;
    foreach($row as $s_val){
    $obj_custom_report->doSetValue(0, $i_col, $i_row, iconv("GBK", "UTF-8", $s_val));
    $obj_custom_report->doSetBorders(0, $i_col, $i_row, $arr_Borders);
    if($i_row % 2 == 0){
    $obj_custom_report->doSetFill(0, $i_col, $i_row, $arr_even);
    }else{
    $obj_custom_report->doSetFill(0, $i_col, $i_row, $arr_odd);
    }
    $obj_custom_report->doSetAlign(0, $i_col, $i_row, $arr_align);
    if($i_col == 5){
    if($s_prev_val != "" && $s_prev_val != $s_val){
    if($i_prev_row < $i_row - 1){
    $obj_custom_report->doMergeCells(0, 5, $i_prev_row, 5, $i_row - 1);
    }
    $i_prev_row = $i_row;
    }
    $s_prev_val = $s_val;
    }
    $i_col++;
    }
    $i_row++;
    }
    if($i_prev_row < $i_row - 1){
    $obj_custom_report->doMergeCells(0, 5, $i_prev_row, 5, $i_row - 1);
    }
    }
    }
    ?>

    运行结果如下图所示:

    复杂报表对象$obj_custom_report包含有丰富的接口供用户调用以实现个性化报表需求。复杂报表对象包含的API说明如下:

    添加空白工作表

    /**
    * 添加空白工作表
    * @param string $sTitle
    * @param int $iSheetIndex 插入工作表位置(基于0)
    * @return MySheet 新工作表对象
    */
    public function doCreateSheet($sTitle = "", $iSheetIndex = NULL)

    拷贝工作表

    /**
    * 拷贝工作表
    * @param string $sSourceSheetName 待拷贝的工作表名称
    * @param string $sTargetSheetName 新工作表名称
    * @param int $iSheetIndex 插入工作表位置(基于0)
    */
    public function doCopySheet($sSourceSheetName, $sTargetSheetName, $iSheetIndex = NULL)

    删除工作表

    /**
    * 删除工作表
    * @param $iSheetIndex 工作表号(基于0)
    */
    public function doRemoveSheet($iSheetIndex)

    获得工作表号

    /**
    * 获得工作表号
    * @param $sSheetName 工作表名
    * @return int
    */
    public function doGetSheetIndex($sSheetName)

    获得工作表名

    /**
    * 获得工作表名
    * @param $sSheetName 工作表名
    * @return string
    */
    public function doGetSheetName($iSheetIndex)

    删除工作表

    /**
    * 删除工作表
    * @param $sSheetName 工作表名
    */
    public function doRemoveSheetByName($sSheetName)

    获得最大列号

    /**
    * 获得最大列号
    * @param $iSheetIndex 工作表号(基于0)
    * @return int
    */
    public function doGetMaxColumn($iSheetIndex)

    获得最大行号

    /**
    * 获得最大行号
    * @param $iSheetIndex
    * @return int
    */
    public function doGetMaxRow($iSheetIndex)

    获得单元格区间

    /**
    * 获得单元格区间
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param int $iRow 行号(基于1)
    * @return array ["x1","y1","x2","y2"]
    */
    public function doGetRegion($iSheetIndex, $iColumn = 0, $iRow = 1)

    获得字体信息

    /**
    * 获得字体信息
    * underline: none double doubleAccounting single singleAccounting
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param int $iRow 行号(基于1)
    * @return array
    */
    public function doGetFont($iSheetIndex, $iColumn = 0, $iRow = 1)

    设置字体信息

    /**
    * 设置字体
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param int $iRow 行号(基于1)
    * @param array $arrFont 字体信息,参考getFont
    */
    public function doSetFont($iSheetIndex, $iColumn = 0, $iRow = 1, $arrFont = [])

    获得对齐信息

    /**
    * 获得对齐方式
    * 水平对齐:general left right center centerContinuous justify
    * 垂直对齐:bottom top center justify
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param int $iRow 行号(基于1)
    * @return array
    */
    public function doGetAlign($iSheetIndex, $iColumn = 0, $iRow = 1)

    设置对齐信息

    /**
    * 设置对齐方式
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param int $iRow 行号(基于1)
    * @param array $arrFont 对齐方式,参考getAlign
    */
    public function doSetAlign($iSheetIndex, $iColumn = 0, $iRow = 1, $arrAlign = [])

    获得单元格边框

    /**
    * 获得单元格边框
    * 对角线方向:const DIAGONAL_NONE = 0; const DIAGONAL_UP = 1; const DIAGONAL_DOWN = 2;const DIAGONAL_BOTH = 3;
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param int $iRow 行号(基于1)
    * @return array
    */
    public function doGetBorder($iSheetIndex, $iColumn = 0, $iRow = 1)

    设置单元格边框

    /**
    * 设置单元格边框
    * 对角线方向:const DIAGONAL_NONE = 0; const DIAGONAL_UP = 1; const DIAGONAL_DOWN = 2;const DIAGONAL_BOTH = 3;
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param int $iRow 行号(基于1)
    * @param array $arrBorders: ["left","right","top","bottom","diagonal","diagonaldirection","allborders"]
    */
    public function doSetBorders($iSheetIndex, $iColumn = 0, $iRow = 1, $arrBorders = [])

    获得单元格填充方式

    /**
    * 获得单元格填充方式
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param int $iRow 行号(基于1)
    * @return array
    */
    public function doGetFill($iSheetIndex, $iColumn = 0, $iRow = 1)

    设置单元格填充方式

    /**
    * 设置单元格填充方式
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param int $iRow 行号(基于1)
    * @param array $arrFills 格式参考getFill
    */
    public function doSetFill($iSheetIndex, $iColumn = 0, $iRow = 1, $arrFills = [])

    获得单元格数据格式化方式

    /**
    * 获得单元格数据格式化方式
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param int $iRow 行号(基于1)
    * @return array
    * code值为:General、@、0、0.00、#,##0.00、#,##0.00-、0%、0.00%、yyyy-mm-dd、yy-mm-dd、dd/mm/yy、d/m/y、d-m-y、d-m、m-y、mm-dd-yy、d-mmm-yy、d-mmm、mmm-yy、m/d/yy h:mm、d/m/y h:mm、h:mm AM/PM、h:mm:ss AM/PM、h:mm、h:mm:ss、mm:ss、h:mm:ss、i:s.S、h:mm:ss;@、yy/mm/dd;@、$#,##0.00-、$#,##0-、[$EUR ]#,##0.00-
    */
    public function doGetNumberFormat($iSheetIndex, $iColumn = 0, $iRow = 1)

    设置单元格数据格式化方式

    /**
    * 设置单元格格式化方式
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param int $iRow 行号(基于1)
    * @param array $arrFormat
    */
    public function doSetNumberFormat($iSheetIndex, $iColumn = 0, $iRow = 1, $arrFormat = [])

    获得列宽度

    /**
    * 获得列宽度
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @return int
    */
    public function doGetColumnWidth($iSheetIndex, $iColumn = 0)

    设置列宽度

    /**
    * 设置列宽度
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param int $iWidth 宽度
    */
    public function doSetColumnWidth($iSheetIndex, $iColumn = 0, $iWidth = 0)

    获得行高度

    /**
    * 获得行高度
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iRow 行号(基于1)
    * @return int
    */
    public function doGetRowHeight($iSheetIndex, $iRow = 1)

    设置行高度

    /**
    * 设置行高度
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iRow 行号(基于1)
    * @param int $iWidth 宽度
    */
    public function doSetRowHeight($iSheetIndex, $iRow = 1, $iHeight = 0)

    获得列是否可视

    /**
    * 获得列是否可视
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @return boolean
    */
    public function doGetColumnVisible($iSheetIndex, $iColumn = 0)

    设置列是否可视

    /**
    * 设置列是否可视
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 列号(基于0)
    * @param boolean $bVisible 是否可视
    */
    public function doSetColumnVisible($iSheetIndex, $iColumn = 0, $bVisible = false)

    获得行是否可视

    /**
    * 获得行是否可视
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iRow 行号(基于1)
    * @return boolean
    */
    public function doGetRowVisible($iSheetIndex, $iRow = 0)

    设置行是否可视

    /**
    * 设置行是否可视
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iRow 行号(基于1)
    * @param boolean $bVisible 是否可视
    */
    public function doSetRowVisible($iSheetIndex, $iRow = 0, $bVisible = false)

    合并单元格

    /**
    * 合并单元格
    * @param $iSheetIndex 工作表号(基于0)
    * @param $iStartCol 起始列号(基于0)
    * @param $iStartRow 起始行号(基于1)
    * @param $iEndCol 终止列号(基于0)
    * @param $iEndRow 终止行号(基于1)
    */
    public function doMergeCells($iSheetIndex, $iStartCol, $iStartRow, $iEndCol, $iEndRow)

    取消合并单元格

    /**
    * 取消合并单元格
    * @param $iSheetIndex 工作表号(基于0)
    * @param $iStartCol 起始列号(基于0)
    * @param $iStartRow 起始行号(基于1)
    * @param $iEndCol 终止列号(基于0)
    * @param $iEndRow 终止行号(基于1)
    */
    public function doUnmergeCells($iSheetIndex, $iStartCol, $iStartRow, $iEndCol, $iEndRow)

    插入行

    /**
    * 插入行
    * @param $iSheetIndex 工作表号(基于0)
    * @param $iBefore 插入行位置(基于1)
    * @param $iNumRows 插入行数
    */
    public function doInsertNewRowBefore($iSheetIndex, $iBefore = 1, $iNumRows = 1)

    插入列

    /**
    * 插入列
    * @param $iSheetIndex 工作表号(基于0)
    * @param $iBefore 插入列位置(基于1)
    * @param $NumColumns 插入列数
    */
    public function doInsertNewColumnBefore($iSheetIndex, $iBefore = 0, $NumColumns = 1)

    删除行

    /**
    * 删除行
    * @param $iSheetIndex 工作表号(基于0)
    * @param $iRow 删除行位置(基于1)
    * @param int $iNumRows 删除行数
    */
    public function doDeleteRow($iSheetIndex, $iRow, $iNumRows = 1)

    删除列

    /**
    * 删除列
    * @param $iSheetIndex 工作表号(基于0)
    * @param int $iColumn 删除列位置(基于0)
    * @param int $iNumColumns 删除列数
    */
    public function doDeleteColumn($iSheetIndex, $iColumn = 0, $iNumColumns = 1)

    获得单元格数据

    /**
    * 获得单元格数据
    * @param $iSheetIndex 工作表号(基于0)
    * @param $iColumn 列号(基于0)
    * @param $iRow 行号(基于1)
    * @return mixed
    */
    public function doGetValue($iSheetIndex, $iColumn, $iRow)

    设置单元格数据

    /**
    * 设置单元格数据
    * @param $iSheetIndex 工作表号(基于0)
    * @param $iColumn 列号(基于0)
    * @param $iRow 行号(基于1)
    * @param mixed $pValue 数值
    */
    public function doSetValue($iSheetIndex, $iColumn, $iRow, $pValue)

    设置单元格日期时间数据

    /**
    * 设置单元格日期时间数据
    * @param $iSheetIndex 工作表号(基于0)
    * @param $iColumn 列号(基于0)
    * @param $iRow 行号(基于1)
    * @param $iYear 年
    * @param $iMonth 月
    * @param $iDay 日
    * @param $iHour 小时
    * @param $iMinute 分钟
    * @param $iSecond 秒
    */
    public function doSetDateTimeValue($iSheetIndex, $iColumn, $iRow, $iYear, $iMonth, $iDay, $iHour, $iMinute, $iSecond)

    获得本地数据库连接

    /**
    * 获得本地数据库连接
    * @return yiidbConnection
    */
    public function doGetDb()

    根据数据库连接操作数据库,常见方法举例如下:

    $command = $connection->createCommand('SELECT * FROM post');

    $posts = $command->queryAll();

    $post = $command->queryOne();

    $command = $connection->createCommand('UPDATE post SET status=1');

    $command->execute();

    $command = $connection->createCommand('SELECT * FROM post WHERE id=:id');

    $command->bindValue(':id', $_GET['id']);

    $post = $command->query();

    获得数据源里配置的数据库连接

    /**
    * 获得第三方数据库访问链接功能
    * @param $s_sername 数据源名称
    * @param string $s_db 数据库名称
    * @return mixed|null 数据库连接
    */
    public function doGetOtherDB($s_sername, $s_db = "")

    获得参数值

    /**
    * 获得参数值
    * @return array
    */
    public function doGetParams()

    打开数据集(返回数据集所有数据)

    /**
    * 打开数据集
    * @param $s_dataset 数据集名称
    * @return array
    */
    public function doOpenDataset($s_dataset)

  • 相关阅读:
    HDU 4539郑厂长系列故事――排兵布阵(状压DP)
    HDU 2196Computer(树形DP)
    HDU 4284Travel(状压DP)
    HDU 1520Anniversary party(树型DP)
    HDU 3920Clear All of Them I(状压DP)
    HDU 3853LOOPS(简单概率DP)
    UVA 11983 Weird Advertisement(线段树求矩形并的面积)
    POJ 2886Who Gets the Most Candies?(线段树)
    POJ 2828Buy Tickets
    HDU 1394Minimum Inversion Number(线段树)
  • 原文地址:https://www.cnblogs.com/tongdaoa/p/15033267.html
Copyright © 2011-2022 走看看