[CodeIgniter4]phpspreadsheet的使用
2021-04-08 02:26
标签:mat ini func iter 网站 public 哈哈哈 命名空间 latest [CodeIgniter4]phpspreadsheet的使用 使用一个开源库第一步肯定是要看官网文档咯,看完就要爬坑,爬坑就要写个博客压压惊 https://phpspreadsheet.readthedocs.io/en/latest/ composer require phpoffice/phpspreadsheet 可能会有安装失败问题,请修改php.ini文件,lnmp的php.ini的位置:/usr/local/php/etc/php.ini disable_functions修改成如下即可,如果还不行就继续根据错误提示删除下面限制的函数。 disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server 官方示例 CI4使用示例 此控制器位置\app\Controllers\Test\Index.php 输出文件到网站根目录,即public里面 释放内存,为了防止内存泄露,进行手动清理 完成了上面的轻松小任务,现在开始创建对象。 获取 开始读取sheet中的单元格数据 创建表格对象 下面方法为新创建表格对象,当然也可以用已经读取完成的对象,如上面的 写入单元格数据 生成并保存文件 稍微有点乱,多看几遍就理清顺序了,哇哈哈哈 [CodeIgniter4]phpspreadsheet的使用 标签:mat ini func iter 网站 public 哈哈哈 命名空间 latest 原文地址:https://www.cnblogs.com/landv/p/12467079.html环境依赖
第一步安装
第二步使用
php
require ‘vendor/autoload.php‘;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue(‘A1‘, ‘Hello World !‘);
$writer = new Xlsx($spreadsheet);
$writer->save(‘hello world.xlsx‘);
namespace App\Controllers\Test;
// 采用命名空间的方式调用这个功能
use App\Controllers\BaseController;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class Index extends BaseController {
public function __construct()
{
}
public function index()
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue(‘A1‘, ‘Hello World !‘);
//输出文件到网站根目录,也就是public里面
$writer = new Xlsx($spreadsheet);
$writer->save(‘hello world.xlsx‘);
}
直接输出下载
namespace App\Controllers\Test;
use App\Controllers\BaseController;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class Index extends BaseController {
public function __construct()
{
}
public function index()
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue(‘A1‘, ‘Hello World !‘);
header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet‘);//告诉浏览器输出07Excel文件
//header(‘Content-Type:application/vnd.ms-excel‘);//告诉浏览器将要输出Excel03版本文件
header(‘Content-Disposition: attachment;filename="01simple.xlsx"‘);//告诉浏览器输出浏览器名称
header(‘Cache-Control: max-age=0‘);//禁止缓存
$writer = new Xlsx($spreadsheet);
$writer->save(‘php://output‘);
}
}
//释放内存,为了防止内存泄露,进行手动清理
$spreadsheet->disconnectWorksheets();
unset($spreadsheet);
第三步文件读取
创建对象
# 待读取的excel文件,全路径,如果不是cli模式,那就是网站根目录为"\",ci4默认位置为public文件夹里面
$filename = ‘test.xlsx‘;
# 根据文件名自动创建 适用于不知道文件后缀时xls还是xlsx的情况
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($filename);
# 或者如果确定文件后缀,直接创建,性能会略优于上面方法
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");
# $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xls");
$spreadsheet = $reader->load($filename);
# 甚至可以直接指定reader实现创建 性能又会优于上面一丢丢
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
# 可以额外设定只读模式,上面也试用,让工具只读取数据,不处理样式,性能会更好
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($filename);
Worksheet
表格对象,即当前工作表格# 获取当前活动的sheet
$sheet = $spreadsheet->getActiveSheet();
# 或者直接指定序号获得第一个sheet
$sheet = $spreadsheet->getSheet(0);
# 读取excel中A1数据,即第一行第一列,返回“姓名”
$sheet->getCell(‘A1‘)->getValue();
# B1 返回“性别”
$sheet->getCell(‘B1‘)->getValue();
# 获取当前总行数
$rows = $sheet->getHighestRow();
$users = [];
# 一般excel中第一行为标题,所以实际数据从第二行开始 循环读取
for($i = 2; $i $rows; $i++) {
$temp = [];
$temp[‘name‘] = $sheet->getCell(‘A‘ . $i)->getValue();
$temp[‘sex‘] = $sheet->getCell(‘B‘ . $i)->getValue();
$temp[‘age‘] = $sheet->getCell(‘C‘ . $i)->getValue();
# 防止空行情况
if (!$temp[‘name‘]) {
continue;
}
$users[] = $temp;
}
var_dump($users);
第四步EXCEL文件写入
$spreadsheet
,然后实现对原有单元格的覆写,生成新文件# 新创建Spreadsheet对象
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
# 获取活动的sheet
$sheet = $spreadsheet->getActiveSheet();
# 第一行写入标题数据
$sheet->setCellValue(‘A1‘, ‘姓名1‘);
$sheet->setCellValue(‘B1‘, ‘性别1‘);
$sheet->setCellValue(‘C1‘, ‘年龄1‘);
# 模拟写入的数据
$users = [
[‘name‘ => ‘张三‘, ‘sex‘ => ‘男‘, ‘age‘ => 21,],
[‘name‘ => ‘李四‘, ‘sex‘ => ‘女‘, ‘age‘ => 22,],
[‘name‘ => ‘王五‘, ‘sex‘ => ‘男‘, ‘age‘ => 20,],
];
# 要写入的总行数
$count = count($users);
# 逐行写入
for ($i = 0; $i $count; $i++) {
# 要写入的行号 从第二行开始
$index = $i + 2;
# 用户数据
$line = $users[$i];
$sheet->setCellValue(‘A‘ . $index, $line[‘name‘]);
$sheet->setCellValue(‘B‘ . $index, $line[‘sex‘]);
$sheet->setCellValue(‘C‘ . $index, $line[‘age‘]);
}
# 也可以保存为其他格式
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
# $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xls($spreadsheet);
# 写入文件
$writer->save(‘/tmp/xxx.xlsx‘);
文章标题:[CodeIgniter4]phpspreadsheet的使用
文章链接:http://soscw.com/index.php/essay/72663.html