如何使用ThinkPHP+phpExcel导入导出Excel数据

发布时间:2021-09-16 09:07:40 作者:柒染
来源:亿速云 阅读:151
# 如何使用ThinkPHP+phpExcel导入导出Excel数据

## 目录
1. [前言](#前言)
2. [环境准备](#环境准备)
3. [phpExcel基础介绍](#phpexcel基础介绍)
4. [ThinkPHP集成phpExcel](#thinkphp集成phpexcel)
5. [Excel数据导出详解](#excel数据导出详解)
6. [Excel数据导入详解](#excel数据导入详解)
7. [高级应用技巧](#高级应用技巧)
8. [常见问题解决方案](#常见问题解决方案)
9. [性能优化建议](#性能优化建议)
10. [总结](#总结)

## 前言

在现代Web开发中,Excel数据的导入导出是常见的业务需求。本文将详细介绍如何在ThinkPHP框架中结合phpExcel库实现强大的Excel操作功能...

(此处省略约500字的前言内容)

## 环境准备

### 系统要求
- PHP 5.3+
- ThinkPHP 3.2+/5.0+
- phpExcel 1.8.0+

### 安装步骤
1. **下载phpExcel库**
   ```bash
   git clone https://github.com/PHPOffice/PHPExcel.git
  1. 集成到ThinkPHP 将PHPExcel目录放入ThinkPHP的Vendor目录:

    ├─Application
    ├─ThinkPHP
    ├─Vendor
    │  ├─PHPExcel
    │  │  ├─Classes
    │  │  └─...
    
  2. 配置自动加载 在ThinkPHP5中的composer.json添加:

    {
     "require": {
       "phpoffice/phpexcel": "1.8.*"
     }
    }
    

(详细环境配置说明约1500字…)

phpExcel基础介绍

核心类说明

类名 功能描述
PHPExcel 主工作簿对象
PHPExcel_IOFactory 文件读写工厂类
PHPExcel_Worksheet 工作表操作类

基本概念

  1. 单元格坐标系统

    $sheet->setCellValue('A1', 'Hello');  // A1单元格
    $sheet->setCellValueByColumnAndRow(0, 1, 'World'); // 列号0(A),行号1
    
  2. 样式设置

    $style = [
       'font' => [
           'bold' => true,
           'color' => ['rgb' => 'FF0000']
       ],
       'alignment' => [
           'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER
       ]
    ];
    

(详细介绍phpExcel约3000字…)

ThinkPHP集成phpExcel

服务类封装

创建ExcelService.php:

namespace app\common\service;

use PHPExcel;
use PHPExcel_IOFactory;

class ExcelService
{
    private $objPHPExcel;
    
    public function __construct() {
        $this->objPHPExcel = new PHPExcel();
    }
    
    public function export($data, $title = 'Sheet1') {
        // 导出逻辑实现...
    }
    
    public function import($filePath) {
        // 导入逻辑实现...
    }
}

控制器调用示例

public function exportUser()
{
    $excel = new ExcelService();
    $data = Db::name('user')->select();
    $excel->export($data, '用户列表');
}

(完整集成方案约2500字…)

Excel数据导出详解

基础导出流程

  1. 创建工作簿
  2. 设置工作表
  3. 填充数据
  4. 设置样式
  5. 输出文件

带样式的完整示例

public function exportWithStyle()
{
    // 1. 初始化
    $objPHPExcel = new PHPExcel();
    $sheet = $objPHPExcel->getActiveSheet();
    
    // 2. 设置标题
    $sheet->setCellValue('A1', '用户报表')
          ->mergeCells('A1:D1');
    
    // 3. 设置表头
    $headers = ['ID', '用户名', '邮箱', '注册时间'];
    foreach($headers as $key => $value) {
        $sheet->setCellValueByColumnAndRow($key, 2, $value);
    }
    
    // 4. 填充数据
    $users = Db::name('user')->select();
    $row = 3;
    foreach($users as $user) {
        $sheet->setCellValue('A'.$row, $user['id']);
        // ...其他字段
        $row++;
    }
    
    // 5. 输出
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="users.xls"');
    $writer = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $writer->save('php://output');
}

(完整导出教程约4000字…)

Excel数据导入详解

标准导入流程

  1. 文件上传验证
  2. 加载Excel文件
  3. 解析工作表
  4. 数据验证
  5. 批量入库

完整示例代码

public function import()
{
    // 1. 文件上传
    $file = request()->file('excel');
    $info = $file->validate(['ext'=>'xlsx,xls'])->move(ROOT_PATH.'public/uploads');
    
    // 2. 加载文件
    $inputFileName = './uploads/'.$info->getSaveName();
    $objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
    
    // 3. 获取工作表
    $sheet = $objPHPExcel->getSheet(0);
    $highestRow = $sheet->getHighestRow();
    
    // 4. 数据遍历
    $data = [];
    for($row=2; $row<=$highestRow; $row++){
        $data[] = [
            'username' => $sheet->getCell('A'.$row)->getValue(),
            'email'    => $sheet->getCell('B'.$row)->getValue(),
            'reg_time' => date('Y-m-d', $sheet->getCell('C'.$row)->getValue())
        ];
    }
    
    // 5. 批量插入
    Db::name('user')->insertAll($data);
    return json(['code'=>1, 'msg'=>'导入成功']);
}

(完整导入教程约3500字…)

高级应用技巧

大数据量分块导出

// 使用缓存减轻内存压力
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = ['memoryCacheSize' => '32MB'];
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

// 分页查询处理
$pageSize = 5000;
$page = 1;
while(true) {
    $data = Db::name('user')->page($page, $pageSize)->select();
    if(empty($data)) break;
    
    // 处理当前页数据...
    $page++;
}

复杂报表生成

// 多工作表操作
$objPHPExcel->createSheet();
$objPHPExcel->setActiveSheetIndex(1);
$sheet2 = $objPHPExcel->getActiveSheet();
$sheet2->setTitle('统计报表');

// 添加图表
$chart = new PHPExcel_Chart(
    'chart1',
    new PHPExcel_Chart_Title('用户增长趋势'),
    // ...其他图表配置
);
$sheet->addChart($chart);

(高级技巧约3000字…)

常见问题解决方案

内存溢出问题

解决方案: 1. 使用分块处理 2. 调整PHP内存限制

   memory_limit = 512M
  1. 使用缓存模式

中文乱码问题

// 输出前添加BOM头
echo "\xEF\xBB\xBF";
// 或设置编码
$sheet->setCellValue('A1', iconv('utf-8', 'gb2312', '中文内容'));

(问题解决方案约2000字…)

性能优化建议

  1. 导入优化方案

    • 使用事务批量提交
    • 关闭自动提交
    Db::startTrans();
    try {
       // 批量插入操作
       Db::commit();
    } catch(\Exception $e) {
       Db::rollback();
    }
    
  2. 导出优化方案

    • 使用CSV格式替代xlsx
    • 启用ZIP压缩
    $writer->setUseZip64(true);
    

(性能优化约1500字…)

总结

本文全面介绍了ThinkPHP框架下使用phpExcel实现Excel导入导出的完整方案…(约800字总结)


附录: - phpExcel官方文档 - ThinkPHP数据库操作手册 - 示例代码下载

(全文共计约18700字) “`

注:由于篇幅限制,这里展示的是文章的结构框架和部分核心代码示例。完整的18700字文章需要展开每个章节的详细说明,包括: 1. 更全面的基础概念讲解 2. 完整的代码示例及逐行注释 3. 多种应用场景的案例演示 4. 深入的原理分析 5. 详细的参数配置说明 6. 各种边界情况的处理方案 7. 性能测试数据对比等

需要补充完整内容可以告知具体需要扩展的章节。

推荐阅读:
  1. layui如何导入导出Excel
  2. Java如何导入导出Excel文件

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

thinkphp phpexcel

上一篇:MYSQL的字符串函数具体用法

下一篇:检测mysql状态的脚本分享

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》