feat: 新增产品兼容数据、产品兼容数据配件类型相关接口
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 5s
All checks were successful
Gitea Actions Official-website / deploy-dev (push) Successful in 5s
This commit is contained in:
@@ -9,9 +9,13 @@ if (!function_exists('xlsx_reader')) {
|
||||
* @param array $keys_map 列 -> 键 例:['A' => 'name', 'B' => 'age', 'C' => 'sex']
|
||||
* @return array
|
||||
*/
|
||||
function xlsx_reader(string $file, int $initial_row = 1, array $keys_map = []): array
|
||||
function xlsx_reader(string $file, int $initial_row = 1, array $keys_map = [], bool $read_only = false): array
|
||||
{
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
|
||||
if ($read_only) {
|
||||
// 只读模式,不读取公式,样式等等,减少内存消耗
|
||||
$reader->setReadDataOnly(true);
|
||||
}
|
||||
|
||||
// 读取文件
|
||||
$spreadsheet = $reader->load($file);
|
||||
@@ -42,6 +46,54 @@ if (!function_exists('xlsx_reader')) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('xlsx_stream_reader')) {
|
||||
/**
|
||||
* 读取Excel数据
|
||||
* @param string $file Excel文件路径
|
||||
* @param int $initial_row 初始行
|
||||
* @param array $keys_map 列 -> 键 例:['A' => 'name', 'B' => 'age', 'C' => 'sex']
|
||||
* @return Generator
|
||||
*/
|
||||
function xlsx_stream_reader(string $file, int $initial_row = 1, array $keys_map = [], bool $read_only = false): Generator
|
||||
{
|
||||
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
|
||||
if ($read_only) {
|
||||
// 只读模式,不读取公式,样式等等,减少内存消耗
|
||||
$reader->setReadDataOnly(true);
|
||||
}
|
||||
|
||||
// 读取文件
|
||||
$spreadsheet = $reader->load($file);
|
||||
|
||||
// 获取活动sheet
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
// 获取最大行
|
||||
$max_row = $sheet->getHighestRow();
|
||||
|
||||
// 获取最大列
|
||||
$max_col = $sheet->getHighestColumn();
|
||||
|
||||
$xlsx_row = [];
|
||||
$first_col = ord('A');
|
||||
$last_col = ord($max_col);
|
||||
for ($row = $initial_row; $row <= $max_row; $row++) {
|
||||
for ($col = $first_col; $col <= $last_col; $col++) {
|
||||
$key = $col_chr = chr($col);
|
||||
if (!empty($keys_map)) {
|
||||
$key = $keys_map[$col_chr] ?? $col_chr;
|
||||
}
|
||||
$xlsx_row[$key] = $sheet->getCell($col_chr . $row)->getValue();
|
||||
}
|
||||
yield $xlsx_row;
|
||||
}
|
||||
|
||||
// 主动销毁对象以释放内存
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
unset($spreadsheet);
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('xlsx_writer')) {
|
||||
/**
|
||||
* 构建Excel数据
|
||||
@@ -119,17 +171,17 @@ if (!function_exists('strtobytes')) {
|
||||
case 'kb':
|
||||
$size *= 1024;
|
||||
break;
|
||||
case 'mb':
|
||||
case 'mb':
|
||||
$size *= 1024 * 1024;
|
||||
break;
|
||||
case 'gb':
|
||||
case 'gb':
|
||||
$size *= 1024 * 1024 * 1024;
|
||||
break;
|
||||
case 'tb':
|
||||
$size *= 1024 * 1024 * 1024 * 1024;
|
||||
default:
|
||||
default:
|
||||
throw new \Exception('不支持[' . $unit . ']单位');
|
||||
}
|
||||
return $size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user