Files
2026-09-15 10:26:34 +08:00

96 lines
2.9 KiB
PHP

<?php
namespace Stemcell\Customer\Helper;
use Magento\Framework\App\Helper\Context;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use Magento\Framework\Filesystem;
use Stemcell\Customer\Model\ResourceModel\Lab;
use Magento\Framework\App\Filesystem\DirectoryList;
class LabDownload extends \Magento\Framework\App\Helper\AbstractHelper
{
private Filesystem\Directory\WriteInterface $directory;
public function __construct(
Context $context,
Filesystem $filesystem,
) {
parent::__construct($context);
$this->directory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA);
}
protected function getHeaders()
{
return [
'Lab Id',
'PI SAP Id',
'订货账户',
'经销商',
'销售',
];
}
protected function getRowFields()
{
return [
'lab_code',
'pi_sap_id',
'booking_account',
'customer_name',
'salesperson_name'
];
}
/**
* @param Lab\Collection $data
* @return array
* @throws \PhpOffice\PhpSpreadsheet\Exception
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
*/
public function write(Lab\Collection $data)
{
$styles = [
'alignment' => [
'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
],
];
$spreadSheet = new Spreadsheet();
$writer = IOFactory::createWriter($spreadSheet, 'Xlsx');
$worksheet = $spreadSheet->getActiveSheet();
$columnIndex = 'A';
foreach ($this->getHeaders() as $row) {
$cell = $worksheet->getCell($columnIndex.'1');
$cell->getAppliedStyle()->applyFromArray($styles);
$cell->setValue($row);
$columnIndex++;
}
$worksheet->getRowDimension(1)->setRowHeight(20);
$rowIndex = 2;
foreach ($data as $lab) {
$columnIndex = 'A';
/* @var $lab \Stemcell\Customer\Model\Lab */
foreach ($this->getRowFields() as $field) {
$worksheet->getColumnDimension($columnIndex)->setWidth(15);
$worksheet->getRowDimension($rowIndex)->setRowHeight(20);
$cell = $worksheet->getCell($columnIndex.$rowIndex);
$cell->getAppliedStyle()->applyFromArray($styles);
$cell->setValue($lab->getData($field));
$columnIndex++;
}
$rowIndex++;
}
$this->directory->create('export');
$file = $this->directory->getAbsolutePath('export/lab-'.date('YmdHis').'.xlsx');
$writer->save($file);
return [
'type' => 'filename',
'value' => $file,
'rm' => true // can delete file after use
];
}
}