报表系统 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)

原文地址:https://www.cnblogs.com/tongdaoa/p/15033267.html