multi-store/app/common/service/xlsx/InventoryTransferXlsx.php
2025-04-09 12:21:35 +08:00

112 lines
4.7 KiB
PHP

<?php
namespace app\common\service\xlsx;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use Webman\Exception\BusinessException;
class InventoryTransferXlsx
{
public function export($data, $order)
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('调拨订单'); // 设置列宽
$sheet->getDefaultRowDimension()->setRowHeight(20); // 设置行高
$sheet->getDefaultColumnDimension()->setWidth(20); // 设置列宽
$sheet->getPageSetup()->setFitToPage(true); // 自动适应页面大小
$sheet->getPageSetup()->setHorizontalCentered(true); // 页面水平居中
$sheet->getPageSetup()->setVerticalCentered(true); // 页面垂直居中
$sheet->getPageMargins()->setTop(0.5); // 上边距
$sheet->getPageMargins()->setBottom(0.5); // 下边距
$sheet->getPageMargins()->setLeft(0.5); // 左边距
$sheet->getPageMargins()->setRight(0.5); // 右边距
$sheet->getPageMargins()->setHeader(0.5); // 页眉边距
$sheet->getPageMargins()->setFooter(0.5); // 页脚边距
$sheet->getStyle('A1:H1')->getFont()->setBold(true); // 设置标题字体加粗
$sheet->getStyle('A1:H1')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); // 设置标题水平居中
$sheet->getStyle('A1:H1')->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); // 设置标题垂直居中
$sheet->getStyle('A2:H2')->getFont()->setBold(true); // 设置标题字体加粗
$sheet->getStyle('A2:H2')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); // 设置标题水平居中
// 合并单元格并设置标题
$sheet->mergeCells('A1:G1')->setCellValue('A1', '调拨订单');
$sheet->setCellValue('A2', '订单编号');
$sheet->setCellValue('B2', '转出方');
$sheet->setCellValue('C2', '方式');
$sheet->setCellValue('D2', '转入方');
$sheet->setCellValue('E2', '商品');
$sheet->setCellValue('F2', '数量');
$sheet->setCellValue('G2', '备注');
$sheet->setCellValue('H2', '创建时间');
// 设置列宽
$sheet->getColumnDimension('A')->setAutoSize(true);
$sheet->getColumnDimension('B')->setAutoSize(true);
$sheet->getColumnDimension('C')->setWidth(20);
$sheet->getColumnDimension('D')->setWidth(20);
$sheet->getColumnDimension('E')->setAutoSize(true);
$sheet->getColumnDimension('F')->setAutoSize(true);
$sheet->getColumnDimension('G')->setAutoSize(true);
$sheet->getColumnDimension('H')->setAutoSize(true);
// 设置默认的单元格样式
$defaultStyle = [
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_CENTER,
'vertical' => Alignment::VERTICAL_CENTER,
],
];
$spreadsheet->getDefaultStyle()->applyFromArray($defaultStyle);
// 写入数据
$row = 3;
foreach ($data as $item) {
$sheet->setCellValue('A' . $row, $order['order_id'])
->setCellValue('B' . $row, $order['one_name'])
->setCellValue('C' . $row, $order['type_name'])
->setCellValue('D' . $row, $order['two_name'])
->setCellValue('E' . $row, $item['store_name'])
->setCellValue('F' . $row, $item['nums'])
->setCellValue('G' . $row, $item['remark'])
->setCellValue('H' . $row, $item['create_time']);
$row++;
}
$count = count($data);
// 应用默认样式到整个工作表
// 设置单元格的样式
$styleArray = [
'font' => [
'bold' => true,
'size' => 16,
],
];
$sheet->getStyle('A1')->applyFromArray($styleArray);
// 定义线框样式
$styleArray = [
'borders' => [
'allBorders' => [
'borderStyle' => Border::BORDER_THIN, // 线框样式
'color' => ['argb' => '000000'], // 线框颜色
],
],
];
$sheet->getStyle('A1:H' . ($count + 2))->applyFromArray($styleArray);
// 保存文件到 public 下
$writer = new Xlsx($spreadsheet);
$url = '/export/' . "调拨订单-" . date('YmdHi') . '.xlsx';
$file_path = public_path() . $url;
if (!is_dir(dirname($file_path))) {
mkdir(dirname($file_path), 0777, true);
}
$writer->save($file_path);
return getenv('APP_URL') . $url;
}
}