You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
5.5 KiB
188 lines
5.5 KiB
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | likeshop100%开源免费商用商城系统
|
|
// +----------------------------------------------------------------------
|
|
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
|
|
// | 开源版本可自由商用,可去除界面版权logo
|
|
// | 商业版本务必购买商业授权,以免引起法律纠纷
|
|
// | 禁止对系统程序代码以任何目的,任何形式的再发布
|
|
// | gitee下载:https://gitee.com/likeshop_gitee
|
|
// | github下载:https://github.com/likeshop-github
|
|
// | 访问官网:https://www.likeshop.cn
|
|
// | 访问社区:https://home.likeshop.cn
|
|
// | 访问手册:http://doc.likeshop.cn
|
|
// | 微信公众号:likeshop技术社区
|
|
// | likeshop团队 版权所有 拥有最终解释权
|
|
// +----------------------------------------------------------------------
|
|
// | author: likeshopTeam
|
|
// +----------------------------------------------------------------------
|
|
|
|
|
|
namespace app\common\server;
|
|
|
|
use app\common\cache\ExportCache;
|
|
use PhpOffice\PhpSpreadsheet\IOFactory;
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
use PhpOffice\PhpSpreadsheet\Style\Border;
|
|
use PhpOffice\PhpSpreadsheet\Style\Fill;
|
|
|
|
/**
|
|
* 导出Excel
|
|
* Class ExportExcelServer
|
|
* @package app\common\lists
|
|
*/
|
|
class ExportExcelServer
|
|
{
|
|
|
|
protected $fileName = ''; //文件名称
|
|
|
|
protected $exportNumber = ['order_sn', 'sn']; // 导出中的数字
|
|
|
|
|
|
/**
|
|
* @notes 创建Excel
|
|
* @param $excelFields
|
|
* @param $lists
|
|
* @return string
|
|
* @throws \PhpOffice\PhpSpreadsheet\Exception
|
|
* @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
|
|
* @author 段誉
|
|
* @date 2022/4/24 9:58
|
|
*/
|
|
public function createExcel($excelFields, $lists)
|
|
{
|
|
if (empty($lists)) {
|
|
throw new \Exception('暂无导出数据!');
|
|
}
|
|
|
|
$title = array_values($excelFields);
|
|
|
|
// 组装导出信息
|
|
$data = [];
|
|
foreach ($lists as $row) {
|
|
$temp = [];
|
|
foreach ($excelFields as $key => $excelField) {
|
|
$temp[$key] = $row[$key];
|
|
}
|
|
$data[] = $temp;
|
|
}
|
|
|
|
$spreadsheet = new Spreadsheet();
|
|
$sheet = $spreadsheet->getActiveSheet();
|
|
|
|
//设置单元格内容
|
|
foreach ($title as $key => $value) {
|
|
// 单元格内容写入
|
|
$sheet->setCellValueByColumnAndRow($key + 1, 1, $value);
|
|
}
|
|
$row = 2; //从第二行开始
|
|
foreach ($data as $item) {
|
|
$column = 1;
|
|
foreach ($item as $k => $value) {
|
|
if (in_array($k, $this->exportNumber)) {
|
|
$value = "\t" . $value . "\t";
|
|
}
|
|
//单元格内容写入
|
|
$sheet->setCellValueByColumnAndRow($column, $row, $value);
|
|
$column++;
|
|
}
|
|
$row++;
|
|
}
|
|
|
|
$getHighestRowAndColumn = $sheet->getHighestRowAndColumn();
|
|
$HighestRow = $getHighestRowAndColumn['row'];
|
|
$column = $getHighestRowAndColumn['column'];
|
|
$titleScope = 'A1:' . $column . '1';//第一(标题)范围(例:A1:D1)
|
|
|
|
$sheet->getStyle($titleScope)
|
|
->getFill()
|
|
->setFillType(Fill::FILL_SOLID) // 设置填充样式
|
|
->getStartColor()
|
|
->setARGB('00B0F0');
|
|
// 设置文字颜色为白色
|
|
$sheet->getStyle($titleScope)->getFont()->getColor()
|
|
->setARGB('FFFFFF');
|
|
|
|
// $sheet->getStyle('B2')->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_DATE_YYYYMMDD);
|
|
$spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
|
|
|
|
$allCope = 'A1:' . $column . $HighestRow;//整个表格范围(例:A1:D5)
|
|
$sheet->getStyle($allCope)->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN);
|
|
|
|
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
|
|
|
|
//创建excel文件
|
|
$exportCache = new ExportCache();
|
|
$src = $exportCache->getSrc();
|
|
|
|
if (!file_exists($src)) {
|
|
mkdir($src, 0775, true);
|
|
}
|
|
|
|
$fileName = $this->getFileName();
|
|
|
|
// 生成文件路径
|
|
$writer->save($src . $fileName);
|
|
|
|
//设置本地excel返回下载地址
|
|
$vars = ['file' => $exportCache->setFile($fileName)];
|
|
return (string)url("index/download/export", $vars, false, true);
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* @notes 设置导出文件名称
|
|
* @param $fileName
|
|
* @return string
|
|
* @author 段誉
|
|
* @date 2022/4/24 10:02
|
|
*/
|
|
public function setFileName($fileName)
|
|
{
|
|
return $this->fileName = $fileName . '-' . date('Y-m-d-His') . '.xlsx';
|
|
}
|
|
|
|
|
|
/**
|
|
* @notes 获取导出文件名
|
|
* @return string
|
|
* @author 段誉
|
|
* @date 2022/4/24 10:03
|
|
*/
|
|
public function getFileName()
|
|
{
|
|
if (empty($this->fileName)) {
|
|
return date('Y-m-d-His') . '.xlsx';
|
|
}
|
|
return $this->fileName;
|
|
}
|
|
|
|
|
|
/**
|
|
* @notes 设置导出列表中的数字
|
|
* @param null $params
|
|
* @return bool
|
|
* @author 段誉
|
|
* @date 2022/4/24 9:42
|
|
*/
|
|
public function setExportNumber($params = null): bool
|
|
{
|
|
if (is_null($params)) {
|
|
return false;
|
|
}
|
|
|
|
$params = is_array($params) ? $params : [$params];
|
|
|
|
foreach ($params as $item) {
|
|
if (in_array($item, $this->exportNumber)) {
|
|
continue;
|
|
}
|
|
array_push($this->exportNumber, $item);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
}
|