php导入数据操作

最近利用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>";


效果图如下:

 

相信还有更好的方法,还请浏览过的朋友能留下你更好的实现方法,相互学习!

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值