使用composer管理
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);
}
}
过滤隐藏的worksheet
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