composer require phpoffice/phpexcel
<?php error_reporting(E_ALL); date_default_timezone_set('Asia/Shanghai'); require __dir__ . '/../vendor/autoload.php'; // ... 注意自己赋值$file $excel = PHPExcel_IOFactory::load($file); $sheetCount = $excel->getSheetCount(); echo "sheet count:$sheetCount" . PHP_EOL; foreach ($excel->getWorksheetIterator() as $sheet) { if ($sheet->getSheetState() === 'hidden') { continue; } $sheetName = $sheet->getTitle(); echo "sheet name: $sheetName" . PHP_EOL; $highestColumn = $sheet->getHighestColumn(); $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); $highestRow = $sheet->getHighestRow(); for ($row = 1; $row <= $highestRow; $row++) { $columns = []; for($col = 0; $col < $highestColumnIndex; $col++) { $cell = $sheet->getCellByColumnAndRow($col, $row); $val = $cell->getValue(); if ($val instanceof PHPExcel_RichText) { $columns[] = trim($val->getPlainText()); } else { $columns[] = trim($val); } } var_dump($columns); } }
if ($sheet->getSheetState() === 'hidden')
由Excel中auto filter隐藏的行
if ($sheet->getRowDimension($row)->getVisible())
$cell->getStyle()->getFont()->getColor()->getRGB();
$cell->getStyle()->getFill()->getStartColor()->getRGB();
是这样,运营那边对不同类型的数据进行了颜色的分类,但是是多个人整理的,所以 紫色
和 淡紫色
的运营那边认为是同一个东西;但是程序里面是没法判断,因为紫色的区域太大了;所以这边就需要用到颜色的差异值比对了。
| YUV | - | - | |-----|-------------|-------| | Y | Luma | 明亮度 | | U | Chrominance | 色度 | | V | Chroma | 浓度 |
Y'UV 的发明是由于彩色电视与黑白电视的过渡时期。黑白视讯只有 Y(Luma,Luminance)视讯,也就是灰阶值。到了彩色电视规格的制定,是以 YUV/YIQ 的格式来处理彩色电视图像,把 UV 视作表示彩度的 C(Chrominance或Chroma),如果忽略 C 讯号,那么剩下的 Y(Luma)讯号就跟之前的黑白电视讯号相同,这样一来便解决彩色电视机与黑白电视机的相容问题。
| Lab | - | - | |-------|------|-------| | L | Luma | 明亮度 | | a | a | - | | b | b | - |
RGB -> XYZ -> Lab -> delta E
RGB to closest predefined color
color distance
RGB到Lab的转换| RGB | - | - | |-----|-------|-----| | R | Red | 红色 | | G | Green | 绿色 | | B | Blue | 蓝色 |
php默认函数 imagecolorclosest
// RGB几何距离,由于RGB空间不是颜色感知连续的,所以效果没有Lab'的好
这边有个实现好的颜色空间转换的代码 hasbridge/php-color