原创开发运维 本文章已被<常用Composer包经典推荐>专题收录

PHP实现读写Excel文件的经典Composer包phpoffice/phpspreadsheet使用详记

本文阅读 20 分钟
首页 开发运维 正文 第3页

实例应用(整理自互联网和自有代码)

批量读取Excel数据导入到数据库

演示一:
Xlsx文件如下:
批量导入Xlsx文件示例
代码:

require 'vendor/autoload.php';
include('conn.php'); //连接数据库

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);
$spreadsheet = $reader->load('students.xlsx'); //载入excel表格

$worksheet = $spreadsheet->getActiveSheet();
$highestRow = $worksheet->getHighestRow(); // 总行数
$highestColumn = $worksheet->getHighestColumn(); // 总列数
$highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); // e.g. 5

$lines = $highestRow - 2; 
if ($lines <= 0) {
    exit('Excel表格中没有数据');
}

$sql = "INSERT INTO `t_student` (`name`, `chinese`, `maths`, `english`) VALUES ";

for ($row = 3; $row <= $highestRow; ++$row) {
    $name = $worksheet->getCellByColumnAndRow(1, $row)->getValue(); //姓名
    $chinese = $worksheet->getCellByColumnAndRow(2, $row)->getValue(); //语文
    $maths = $worksheet->getCellByColumnAndRow(3, $row)->getValue(); //数学
    $english = $worksheet->getCellByColumnAndRow(4, $row)->getValue(); //外语

    $sql .= "('$name','$chinese','$maths','$english'),";
}
$sql = rtrim($sql, ","); //去掉最后一个,号
try {
    $db->query($sql);
    echo 'OK';
} catch (Exception $e) {
    echo $e->getMessage();
}

其中$worksheet->getCellByColumnAndRow($col, $row)->getValue()可以获取表格中任意单元格数据内容,$col表示单元格所在的列,以数字表示,A列表示第一列,$row表示所在的行。
我们只需要第三行以后的数据,因此直接从第三行开始循环遍历,获取成绩,组装成SQL语句。
数据结果:
批量导入成绩
演示二:
程序自创建Excel + 批量生成账户
批量导入学生账号
代码:

<?php
namespace app\admin\controller\test\phpspreadsheet;

use app\admin\controller\Base;

use PhpOffice\PhpSpreadsheet\Reader\Xls\MD5;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
//use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;

class Index extends Base
{
    public function write()
    {
        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        $sheet->setCellValue('A1', 'Hello World !');

        $writer = new Xlsx($spreadsheet);
        $writer->save('d://hello.xlsx');
        //dump('2222222222');die;
        //return view();
    }

    public function read(){
        $file_name = "D";
        $uploadwork    = "d://";
        $uploadfile    = $uploadwork.$file_name.'.xlsx';
        $reader        = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); //设置以Excel5格式(Excel97-2003工作簿)
        $PHPExcel      = $reader->load($uploadfile); // 载入excel文件
        $sheet         = $PHPExcel->getSheet(0); // 读取第一個工作表
        $highestRow    = $sheet->getHighestRow(); // 取得总行数
        $highestColumm = $sheet->getHighestColumn(); // 取得总列数
        $data          = [];
        for ($row = 4; $row <= $highestRow; $row++) //行号从1开始
        {
            for ($column = 'A'; $column <= $highestColumm; $column++) //列数是以A列开始
            {
                if (empty($sheet->getCell($column . $row)->getValue()) == false) {
                    $data[$row][$column]=$sheet->getCell($column . $row)->getValue();
                }
            }
            if(!isset($data[$row]['B'])) unset($data[$row]);
        }

        dump($data);

        //班級和文件信息
        $fileAndClass=[
          'A'=>17,
          'B'=>18,
          'C'=>19,
          'D'=>20,
        ];

        //組裝用戶信息
        $userArr=null;
        foreach ($data as $key=>$val){
            $perUser=null;
            $perUser['u_picture']='/static/student/img/a4.png';
            $perUser['u_gender']=0;
            $perUser['u_name']=$val['D'].'-'.$val['E'];
            $perUser['u_username']=$val['G'].'_'.strtolower($val['B']);
            $perUser['u_password']=md5($perUser['u_username']);
            $perUser['u_class']=$fileAndClass[$file_name];

            //如果是女性,更改性別和默認圖片
            if(strtolower($val['F'])=='f'){
                $perUser['u_picture']='/static/student/img/a2.png';
                $perUser['u_gender']=1;
            }
            $userArr[]=$perUser;
        }
        $ans=db('user')->insertAll($userArr);
        dump($ans);
        dump($userArr);die;


    }
}

这个示例来源于:https://www.cnblogs.com/Renyi-Fan/p/9744090.html

原创文章,作者:平凡老赵,未经允许不得转载,出处:https://www.pfjsb.com/kfyw/composer-phpoffice-phpspreadsheet.html
-- 展开阅读全文 --
Markdown语法最全汇总精心整理
« 上一篇 04-21
PHP生成pdf文件的几个composer包
下一篇 » 04-23

热门文章

标签TAG