php的excel数据批量导入

工作中常常有批量导入数据的需求,方法太多,掌握一个简单实用的足够了.下面为大家介绍一个好用的方法.

数据导入必须按照指定的格式系统方能识别,因此可两个大的步骤:一.导入模板下载  二.数据导入


一.模板下载 (创建export.php文件,存放模板代码)

1.下载导入PHPExcel库

点击连接,进入下载界面.

下载完毕,解压并记下文件路径.

将类导入程序中:

    //1.导入PHPExcel库(引入文件路径)
    include './PHPExcel_1.8.0_doc/Classes/PHPExcel.php';
    //创建对象
    $objPHPExcel = new PHPExcel();

    //设置属性
    $objPHPExcel->getProperties()
        ->setCreator("WOLF")
        ->setLastModifiedBy("WOLF")
        ->setTitle("Office 2007 XLSX Test Document")
        ->setSubject("Office 2007 XLSX Test Document")
        ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");

2.生成模板表头信息

    //2.填充表头
    $objActSheet = $objPHPExcel->setActiveSheetIndex(0);
    $objActSheet->setCellValue('A1','姓名');
    $objActSheet->setCellValue('B1','年龄');
    $objActSheet->setCellValue('C1','薪水');

3.生成模板
    //3.生成excel表
    $objPHPExcel->getActiveSheet()->setTitle('导入模板');
    $objPHPExcel->setActiveSheetIndex(0);
    $day      = date("m-d");
    $filename = $day.'导入模板.xls';
    ob_end_clean();//清除缓冲区,避免乱码
    header("Content-Type: application/vnd.ms-excel; charset=utf-8");
    header('Content-Disposition: attachment;filename='.$filename);
    header('Cache-Control: max-age=0');
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');
    $objWriter->save('php://output');
    exit;


这样,模板就生成了.接下来需要做的是导入数据.


二.导入数据

1.创建前端文件(这里取名inport.php)

inport.php文件分两部分,html文件用于展示导入文件和模板下载操作界面,如下:

<pre name="code" class="html"><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form class="form-inline" method="post" action="import.php" enctype="multipart/form-data">
    <div>
        <label><strong>文件:</strong></label>
        <input type="file" name="xls">
    </div>
    <div style="margin: 20px 0">
        <button type="submit" value="确认提交" class="btn btn-info">确认提交</button>
        <a href="export.php">模版下载</a>
    </div>
</form>

 php代码用于接收session中存放的提交信息: 

<?php
session_start();                // 首先开启session
$errors=$_SESSION['error'];  // 取出session的值
//失败项提示红色,成功提示绿色
if(count($errors)){
    echo "<span style=\"color:red;font-size:15px;\">";
}else{
    echo "<span style=\"color:green;font-size:15px;\">";
}
//有插入失败时,输出错误信息
if(isset($errors[0])){
    echo "$errors[0]";
}else{
    foreach($errors as $linenumber => $errmsg){
        if($errmsg){
            echo "第 $linenumber 行:$errmsg<br> ";
        }
    }
}
//没有错误信息时,提示成功
if(count($errors)==0 && isset($_SESSION['error'])){
    echo "全部插入成功!";
}
echo "</span>";
//销毁session
unset($_SESSION['error']);

?>
2.创建后台解析文件(import.php)

思路: 接收提交的excel文件逐行进行解析,有问题的行记录存放在error数组中不进行数据更新.没有问题的更新数据库

解析完成后,将error数据存放在session中,跳转到原界面进行提示更新结果.


程序流程:

a.连接数据库  b.判断是否为excel类文件,是则进行解析  c.开始逐行解析,对每个字段加以判断内容是否合格,将错误信息存放数组

e.更新数据库  f.解析完毕,跳转回原界面

$conn=new mysqli("localhost","root","root","myDBPDO");
// 检测连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
if (isset($_FILES['xls'])) {
    set_time_limit(0);
    ini_set('memory_limit', '1024M');
    //导入PHPExcel库
    include './PHPExcel_1.8.0_doc/Classes/PHPExcel.php';
    //获取导入文件名,并加以判断是否为excel文件
    $xls = $_FILES['xls']['tmp_name'];
    $name = $_FILES['xls']['name'];
    $name = explode('.', $name);
    //新建二维数组,用于存放错误信息,存放在session中传到前端提示
    $errors = array();
    //若文件格式为xls,xlsx,cvs时,进行解析
    if ($xls AND ($name[1] == 'xls' OR $name[1] == 'xlsx' OR $name[1] == 'cvs')) {
        $objReader = PHPExcel_IOFactory::load($xls);
        $objReader = $objReader->getSheet(0);
        $rows = $objReader->getHighestRow();
        //若文件有内容,则读取
        if($rows > 1){
            for($i = 2;$i <= $rows;$i ++){
                $name   = trim($objReader->getCell('A'.$i)->getValue());
                $age    = trim($objReader->getCell('B'.$i)->getValue());
                $salary = trim($objReader->getCell('C'.$i)->getValue());

                //遇到空白行,跳出本次循环
                if($name=='' && $age=='' && $salary==''){
                    continue;
                }
                //保存错误信息
                if(empty($name)){
                    $errors["$i"] = '姓名必须填';
                }
                if(empty($age)){
                    $errors["$i"] = '年龄必须填';
                }
                if(empty($salary)){
                    $errors["$i"] = '薪水必须填';
                }

                if (empty($errors["$i"])) {
                    unset($errors["$i"]);
                    // 更新emp表
                    $sql="insert into emp (name,salary,age) values ('$name',$salary,$age)";
                    $result=$conn->query($sql);
                }
                unset($name);
                unset($age);
                unset($salary);
            }
        //文件没有内容
        }else{
            $errors[0] = '请从表格第2行开始填写正确的数据';
        }
    //不是excel类文件
    }else{
        $errors[0] = '请选择EXCEL文件';
    }
    session_start();                // 首先开启session
    $_SESSION['error'] = $errors;  // 把error存在$_SESSION['error'] 里面
    header("Location:./adds.php"); //跳回页面
}

到此,批量导入功能就算完成,涉及的知识比较全面.实际工作中批量导入数据量大时,解析文件e步骤中更新数据库可以优化,

每150行或200行更新一次数据库,

insert into emp (name,salary,age) values ('$name1',$salary1,$age1),('$name2',$salary2,$age2)......
可以大幅度提高效率.












  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在Laravel中实现批量导入Excel,可以使用Laravel-Excel这个包装器。它是一个简单而优雅的Laravel包装器,围绕PhpSpreadsheet(一个流行的PHP库)进行导入和导出。 首先,确保已经安装了Laravel-Excel包。然后,您可以按照以下步骤进行批量导入Excel: 1. 创建一个控制器来处理Excel导入的逻辑。 2. 在控制器中使用`use Maatwebsite\Excel\Facades\Excel`引入Excel门面。 3. 创建一个导入类,继承`Maatwebsite\Excel\Concerns\ToCollection`接口,并实现`collection()`方法。在这个方法中,您可以编写处理导入数据的逻辑。 4. 在控制器的方法中使用`Excel::import()`方法来导入Excel文件,并将导入类的实例作为参数传递给该方法。 5. 在路由中定义一个路由,将请求指向您创建的控制器方法。 以下是一个示例代码,演示了如何在Laravel中批量导入Excel: ```php use App\Imports\UsersImport; use Maatwebsite\Excel\Facades\Excel; class UserController extends Controller { public function import() { Excel::import(new UsersImport, 'users.xlsx'); // 导入成功后的逻辑 return redirect()->back()->with('success', 'Excel导入成功.'); } } ``` 在上面的示例中,我们在控制器的`import()`方法中使用`Excel::import()`方法来导入Excel文件。`UsersImport`是一个自定义的导入类,它实现了`ToCollection`接口。您可以在`UsersImport`类的`collection()`方法中编写处理导入数据的逻辑。 请确保您已经根据您的需求自定义了适合您的导入类,并将Excel文件的路径作为第二个参数传递给`Excel::import()`方法。 不要忘记在路由中定义一个路由,将请求指向您的控制器方法。 请注意,这只是一个示例代码,您可能需要根据您的实际应用程序进行适当的修改和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Github每日精选(第29期):Laravel 中 Excel 导出和导入Laravel-Excel](https://blog.csdn.net/weixin_40425640/article/details/126053684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [laravel Excel 3.1 使用教程 (导入篇)](https://blog.csdn.net/zfj915752851/article/details/103494400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值