public function generateBody()
{
$this->_endRow = 0;
$columns = $this->getVisibleColumns();
$models = array_values($this->_provider->getModels());
if (count($columns) == 0) {
$cell = $this->_objPHPExcelSheet->setCellValue('A1', $this->emptyText, true);
$model = reset($models);
$this->raiseEvent('onRenderDataCell', [$cell, $this->emptyText, $model, null, 0, $this]);
return 0;
}
// do not execute multiple COUNT(*) queries
$totalCount = $this->_provider->getTotalCount();
$this->findGroupedColumn();
while (count($models) > 0) {
$keys = $this->_provider->getKeys();
foreach ($models as $index => $model) {
$key = $keys[$index];
$this->generateRow($model, $key, $this->_endRow);
$this->_endRow++;
if ($index === $totalCount) {
//a little hack to generate last grouped footer
$this->checkGroupedRow($model, $models[0], $key, $this->_endRow);
} elseif (isset($models[$index + 1])) {
$this->checkGroupedRow($model, $models[$index + 1], $key, $this->_endRow);
}
if (!is_null($this->_groupedRow)) {
$this->_endRow++;
$this->_objPHPExcelSheet->fromArray($this->_groupedRow, null, "A" . ($this->_endRow + 1), true);
$cell = "A" . ($this->_endRow + 1) . ":" . self::columnName(count($columns)) . ($this->_endRow + 1);
$this->_objPHPExcelSheet->getStyle($cell)->applyFromArray($this->groupedRowStyle);
$this->_groupedRow = null;
}
}
if ($this->_provider->pagination) {
$this->_provider->pagination->page++;
$this->_provider->refresh();
$this->_provider->setTotalCount($totalCount);
$models = $this->_provider->getModels();
} else {
$models = [];
}
}
// Set autofilter on
$this->_objPHPExcelSheet->setAutoFilter(self::columnName(1) . $this->_beginRow . ":" . self::columnName($this->_endCol) . $this->_endRow);
return $this->_endRow;
}