workbook => '....' // ???
),
'leave_open' => false, // if you call addrows?? later..
-
+ 'nonspacer' => false, // should add line between head and header row.
));
callbacks: renderer
var $formats = array();
var $workbook = false;
var $worksheet= false;
-
- function Pman_Core_SimpleExcel($data,$cfg)
+ var $postRender = array();
+ var $outfile2;
+
+ function __construct($data,$cfg)
{
// print_r($cfg);exit;
require_once 'Spreadsheet/Excel/Writer.php';
$cfg['formats'] = isset($cfg['formats']) ? $cfg['formats'] : array();
+ $this->formats['_default_date_format_'] = $workbook->addFormat();;
+ $this->formats['_default_date_format_']->setNumFormat('YYYY-MM-DD');
+
foreach($cfg['formats'] as $f=>$fcfg) {
$this->formats[$f] = & $workbook->addFormat();
foreach((array)$fcfg as $k=>$v) {
- $this->formats[$f]->{'set' . $k}($v);
+ $this->formats[$f]->{'set' . $k}($v);
}
}
if (empty($data)) {
return;
}
+
+ foreach($cfg['cols'] as $c => $col_cfg) {
+ if (isset($col_cfg['renderer'])) {
+ $hasRender = true;
+ break;
+ }
+ }
- foreach($data as $r=>$clo) {
- $hasRenderRow = $this->addLine($cfg['workbook'], $clo);
- $hasRender = ($hasRender || $hasRenderRow) ? true : false;
-
- }
- /// call user render on any that are defined..
- if ($hasRender) {
- foreach($data as $r=>$cl) {
+
+ if (is_object($data)) {
+ $data_ar = array();
+ $count = $data->count();
+ $data->find();
- foreach($cfg['cols'] as $c=>$col_cfg) {
- $v = isset($cl[$col_cfg['dataIndex']]) ? $cl[$col_cfg['dataIndex']] : '';
- if (empty($cl[$col_cfg['dataIndex']])) {
- continue;
- }
- if (!empty($col_cfg['renderer'])) {
-
- if (is_a($col_cfg['renderer'], 'Closure')) {
- $col_cfg['renderer'](new StdClass, $cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $cl);
- } else {
- // not sure if row is correct here...!!!?
- call_user_func($col_cfg['renderer'], $cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $cl);
+ while($data->fetch()) {
+ $hasRenderRow = $this->addLine($cfg['workbook'], $data);
+ $hasRender = ($hasRender || $hasRenderRow) ? true : false;
+ }
+ $start_row += $count;
+ } else {
+
+ foreach($data as $r=>$clo) {
+ $hasRenderRow = $this->addLine($cfg['workbook'], $clo);
+ $hasRender = ($hasRender || $hasRenderRow) ? true : false;
+
+ }
+ /// call user render on any that are defined..
+ if ($hasRender) {
+ foreach($data as $r=>$cl) {
+
+ foreach($cfg['cols'] as $c=>$col_cfg) {
+ $v = isset($cl[$col_cfg['dataIndex']]) ? $cl[$col_cfg['dataIndex']] : '';
+ if (empty($cl[$col_cfg['dataIndex']])) {
+ continue;
}
-
+ if (!empty($col_cfg['renderer'])) {
+ if (is_a($col_cfg['renderer'], 'Closure')) {
+ $col_cfg['renderer']($cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $cl);
+ } else {
+ // not sure if row is correct here...!!!?
+ call_user_func($col_cfg['renderer'], $cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $cl);
+ }
+
+ }
+ // echo "<PRE>WRITE: ". htmlspecialchars(print_r(array($r+1, $c, $cl[$col_cfg['dataIndex']]), true));
+
}
- // echo "<PRE>WRITE: ". htmlspecialchars(print_r(array($r+1, $c, $cl[$col_cfg['dataIndex']]), true));
-
}
}
+ $start_row += count($data);
+
}
- $start_row += count($data);
if (!empty($cfg['foot'])) {
foreach($cfg['foot'] as $row) {
if (is_a($col_cfg['txtrenderer'], 'Closure')) {
- $v = $col_cfg['txtrenderer'](new StdClass, $cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $clo);
+ $v = $col_cfg['txtrenderer']($cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $clo);
} else {
$v = call_user_func($col_cfg['txtrenderer'],
$cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $clo);
}
if (isset($col_cfg['renderer'])) {
$hasRender = true;
+
+ $v = isset($cl[$col_cfg['dataIndex']]) ? $cl[$col_cfg['dataIndex']] : '';
+ if (empty($cl[$col_cfg['dataIndex']])) {
+ continue;
+ }
+ $this->postRender[] = array(
+ $col_cfg['renderer'], $cl[$col_cfg['dataIndex']], $worksheet, $start_row+$r+1, $c, $cl
+ );
+
+
+
+
continue;
}
$format = isset($col_cfg['format']) && isset($formats[$col_cfg['format']] ) ? $formats[$col_cfg['format']] : false;
// print_R(array($start_row+$r, $c, $v, $format));exit;
// handle 0 prefixes..
- if ( (is_numeric($v) && strlen($v) > 1 && substr($v,0,1) == '0' && substr($v,1,1) != '.')
+
+ if ($dataFormat == 'date' || preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $v)) {
+ $dataFormat = 'date';
+ $format = empty($format) ? $this->formats['_default_date_format_']: $format;
+ $ut_to_ed_diff = 86400 * 25569;
+ $gmt = strtotime('1970-01-01');
+
+ $v = (strtotime($v) + $ut_to_ed_diff - $gmt) / 86400;
+ // need to +8hrs to get real time..
+
+
+ }
+
+ if ( (is_numeric($v) && strlen($v) > 1 && substr($v,0,1) == '0' && substr($v,1,1) != '.' )
||
$dataFormat == 'string' ) {
$worksheet->writeString($start_row+$r, $c, $v, $format);
function send($fname)
{
+
+ if (!empty($this->postRender)) {
+ foreach($this->postRender as $ar) {
+ if (is_a($ar[0], 'Closure')) {
+ $ar[0]($ar[1], $ar[2], $ar[3], $ar[4], $ar[5]);
+ } else {
+ // not sure if row is correct here...!!!?
+ call_user_func($ar[0],$ar[1], $ar[2], $ar[3], $ar[4], $ar[5]);
+ }
+ }
+
+ }
+
+
if (!empty($this->workbook)) {
$this->workbook->close();
$this->workbook = false;