66 lines
2.1 KiB
PHP
66 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Utils;
|
|
|
|
use Exception;
|
|
use PhpOffice\PhpSpreadsheet\IOFactory;
|
|
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 \PhpOffice\PhpSpreadsheet\Reader\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/{$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") . "xlsx/{$date}/{$name}.xlsx";
|
|
}
|
|
return false;
|
|
}
|
|
}
|