最近利用PHPExcel做了一个数据导入测试;
其实也是参照网上的例子自己理解了一遍,然后做个总结。以后需要时,能更快的上手!
通过个人理解,大概分了如下几步来进行记录:
1. 首先引入需要的PHPExcel。
<?php
require_once "./PHPExcel.php";
require_once "./PHPExcel/IOFactory.php";
//以上两个文件是我需要用到的,然后引入的。当然还有可能包含其他文件
2. 然后获取表格数据(只是做为演示,实际需求是动态获取,然后存进数据库的):
$tempPath = "./test.xlsx";
3. 然后创建表格对象,使用:
$reader = PHPExcel_IOFactory::createReader("excel2007");//也可以使用其他格式,比如excel2005
4. 开始加载excel表中的数据(这一步实际是用户点击按钮,从电脑上动态获取)
$exl_obj = $reader->load($tempPath);//这一步返回的是表对象
5. 获取exl表
$current_exl_obj = $exl_obj->getsheet();//获取当前操作的表对象
6. 获取该表的行和列:
$myRows = $current_exl_obj->getHighestRow();//获取行
$myCols = $curent_exl_obj->getHighestColumn();//获取列
7. 到这一步为止,要操作但表和表的基本结构获取到了,接着获取实际内容:
7.1 自己目前掌握的两种获取方式:
第一种:使用原始的字符串形式的列,不做转换:
<?php
//循环获取数据
for($row = 1; $row <= $totalRow; $row++)//这里的行数,表示就是exl表里的1 2 3 4 5 行名称
{
for($col = 'A'; $col <= $totalCol; $col++)//这里的'A‘代表的就是表里的A B C D 列的名称
{
//这里获取就是exl表里的每个单元格里的实际数据,getCell()方法是获取行和列,getValue()方法是获取行和列中的数据值
$resultArray[$row][]= $objs->getActiveSheet()->getCell($col.$row)->getValue();
}
}
我是用一个二维数组接收的值。每一列表示一个数组,利用循环获取:
echo "<table border='1'>";
foreach ($resultArray as $key => $val) {
if (empty($val[0]) ) continue;
echo "<tr>
<td>" .$val[0]. "</td>
<td>" .$val[1]. "</td>
<td>" .$val[2]. "</td>
</tr>";
}
echo "</table>";
效果如下:
第二种方式:将字符串形式的列进行转换,转换成实际数字,进行循环操作:
转换列:$column = PHPExcel_Cell::columnIndexFromString ( $totalCol ); //最后返回的是实际的数字
注:PHP_Excel_Cell是php中的全局类,可以直接调用使用的。
循环数据:
<?php
//开始循环获取数据
for($row = 1; $row <= $totalRow; $row++) //从第二行开始读取数据
{
for($col = 0; $col <= $column; $col++) //从A列读取数据
{
//两种方法的区别:就是在这里区分的。这里调用的方法不一样而已!
$resultArray[$row][]= $sheet->getCellByColumnAndRow($col, $row)->getValue();
{
{
最后的结果都是一样的!
有一个区别:列的不转成数字比转换成数字循环的次数少些,具体还在研究....
最后完整代码如下:
<?php
//设置时区
date_default_timezone_set("PRC");
// 导入PHPExcel里面的相应文件
require_once "./PHPExcel.php";
require_once "./PHPExcel/IOFactory.php";
$excelPaht = "./test.xlsx";
$reader = PHPExcel_IOFactory::createReader("excel2007");
$objs = $reader->load($excelPaht);
//获取表(excel表)
$sheet = $objs->getSheet(0);
//获取行数
$totalRow = $sheet->getHighestRow();
//获取列数
$totalCol = $sheet->getHighestColumn();
########################### 第一种方法 ####################################
//把字符串(表格中的A,B,C等列)转换成数字
$column = PHPExcel_Cell::columnIndexFromString ( $totalCol );
//开始循环获取数据
for($row = 1; $row <= $totalRow; $row++) //从第二行开始读取数据
{
for($col = 0; $col <= $column; $col++) //从A列读取数据
{
$resultArray[$row][]= $sheet->getCellByColumnAndRow($col, $row)->getValue();//读取单元格
}
}
//输出数据实例:
echo "<h1>第一种方式</h1>";
echo "<table border='1'>";
foreach ($resultArray as $key => $val) {
if (empty($val[0]) ) continue;
echo "<tr>
<td>" .$val[0]. "</td>
<td>" .$val[1]. "</td>
<td>" .$val[2]. "</td>
</tr>";
}
echo "</table>";
echo "<hr>";
########################### 第二种方法 #################################
//开始循环获取数据
for($row = 1; $row <= $totalRow; $row++) //从第二行开始读取数据
{
for($col = 'A'; $col <= $totalCol; $col++) //从A列读取数据
{
$resultArray[$row][]= $objs->getActiveSheet()->getCell($col.$row)->getValue(); //读取单元格
}
}
//输出数据实例:
echo "<h1>第二种方式</h1>";
echo "<table border='1'>";
foreach ($resultArray as $key => $val) {
if (empty($val[0]) ) continue;
echo "<tr>
<td>" .$val[0]. "</td>
<td>" .$val[1]. "</td>
<td>" .$val[2]. "</td>
</tr>";
}
echo "</table>";
效果图如下:
相信还有更好的方法,还请浏览过的朋友能留下你更好的实现方法,相互学习!