Dai Chong's blog

phpExcel是一个专门操作数据表格的类,他可以导入、导出excel表格中的数据,简单、漂亮,非常适合导入、导出、分析数据来使用。

以下代码主要为了实现从阿里OSS上获取数据表格,并分析表格数据导入数据库,唯一不同的是这个表格是不规则,分析数据的话相对来数复杂了一些,废话不多少,下面直接介绍如何处理这种复杂的表格:

第一步:分析表格



经过处理,把这个底色为白色的表格处理成正常的形式

经过处理可以发现,这个表格的数据是有规律的。
坐标B6是账号,C6是房号,D6是房类,一次类推,每行不同的数据都是由不同字母和数字的组合。

特殊的一点就是房价在行数据的下一行,通过观察可以发现,每行的真实数据的列坐标是偶数,相对应的房价都是在奇数上,这样一分析就可以找到方法分析数据了。

第二步:实现代码

实现代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
include_once('../excel/Classes/PHPExcel/IOFactory.php');//静态
file_put_contents('abc.xls',file_get_contents('https://www.baidu.com/20190226/caf55125b3f510b9242235bfa7f06212.xls'));

$filePath = 'abc.xls';
$fileType = PHPExcel_IOFactory::identify($filePath);//检测文件类型
$fileRead = PHPExcel_IOFactory::createReader($fileType);//读取文件
$excelObj = $fileRead->load($filePath);
$sheet = $excelObj->getActiveSheet();
$highestRow = $sheet->getHighestRow();//行数
$highestColumn = $sheet->getHighestColumn();//列数

$dataSet = array();//数据
//这里是从第6行开始,因为上5行都是空的,直接过滤
for($row = 6;$row<=$highestRow-4;$row++){
$dataSet[$row] = array();
//列从B开始A也是空的
for($column="B";$column<=$highestColumn;$column++){
//如果列坐标是F(房价) and 是奇数行,说明已经到房价那一行了
if($column=='F' && $row%2==1){
//列坐标是F 行坐标7 7-1 就是上一行,这里的意思就是上一行的F里的值等于下一行的F的值
$dataSet[$row-1][$column] = $sheet->getCell($column.$row)->getValue();

}else{
//如果列坐标是L和N说明是时间
if($column =='L' || $column == 'N'){
$time = $sheet->getCell($column.$row)->getValue();
//转化时间
$dataSet[$row][$column] = date('Y-m-d H:i:s',PHPExcel_Shared_Date::ExcelToPHP($time));
}else{
$dataSet[$row][$column] = $sheet->getCell($column.$row)->getValue();
}
}
}
//删除已经合并过的奇数行
if($row%2==1){
unset($dataSet[$row]);
}else{
//删除空数组
$dataSet[$row] = array_filter($dataSet[$row]);
}
}

echo "<pre>";
print_r($dataSet);

第三步:查看结果

打印数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Array
(
[6] => Array
(
[B] => 233756
[C] => 1AC65
[D] => DDYG
[G] => 戴
[L] => 2019-02-04 12:42:00
[N] => 2019-03-06 12:00:00
[F] => 400
)

[8] => Array
(
[B] => 233758
[C] => 1BC65
[D] => DDYG
[G] => 戴
[H] => 48+456+844654654
[L] => 2019-02-04 12:44:00
[N] => 2019-03-06 12:00:00
[F] => 400
)

[10] => Array
(
[B] => 241572
[C] => E55b
[D] => DDYG
[G] => 戴
[L] => 2019-02-16 09:40:00
[N] => 2019-03-30 12:00:00
[F] => 0
)

[12] => Array
(
[B] => 246484
[C] => 2AC52
[D] => YGTYF
[G] => 戴
[H] => 476+5456456156415641
[I] => 博客
[L] => 2019-02-25 17:23:00
[N] => 2019-02-27 12:00:00
[F] => 362
)

[14] => Array
(
[B] => 246485
[C] => 2BC52
[D] => YGTYF
[G] => 戴
[H] => 415645156
[I] => 博客
[L] => 2019-02-25 17:24:00
[N] => 2019-02-27 12:00:00
[F] => 362
)

[16] => Array
(
[B] => 246486
[C] => D86a
[D] => DDYG
[G] => 戴
[H] => 156+1112
[L] => 2019-02-25 17:25:00
[N] => 2019-02-28 12:00:00
[P] => 业主自主
[F] => 0
)

)

很完美,如有其它需要可根据代码调整。


 评论