server/app/Utils/Excel.php

67 lines
2.1 KiB
PHP

<?php
namespace App\Utils;
use Exception;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use function Hyperf\Config\config;
class Excel
{
/**
* 获取excel内容
*/
public static function importData($file)
{
try {
if (!$file) return false;
$file = BASE_PATH . DIRECTORY_SEPARATOR . 'runtime' . DIRECTORY_SEPARATOR . $file;
if (!file_exists($file)) return false;
// 显式使用 Xlsx 读取器并配置兼容选项
$reader = new Xlsx();
// 关键配置:跳过样式/公式等兼容性陷阱
$reader->setReadDataOnly(true); // 只读数据,忽略公式
$reader->setReadEmptyCells(false); // 跳过空单元格处理
$reader->setLoadSheetsOnly(["Sheet1"]); // 明确加载指定工作表
$spreadsheet = $reader->load($file);
return $spreadsheet->getSheet(0)->toArray();
} catch (Exception $e) {
return $e->getMessage();
}
}
/**
* 导出文件
* Author: cfn <cfn@leapy.cn>
* @param $name
* @param $header
* @param $data
* @return false|string
*/
public static function exportData($name, $header, $data)
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('sheet1');
//表头
$sheet->fromArray($header, '', 'A1');
$sheet->fromArray($data, '', 'A2');
$sheet->getDefaultColumnDimension()->setWidth(12);
$date = date("Ymd");
$saveDir = BASE_PATH . '/static' . "/export/excel/{$date}/";
if (!is_dir($saveDir)) {
mkdir($saveDir, 0777, true);
}
$saveFile = "{$saveDir}{$name}.xlsx";
//按照指定格式生成Excel文件
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save($saveFile);
if (is_file($saveFile)) {
return config("app.domain") . "/export/excel/{$date}/{$name}.xlsx";
}
return false;
}
}