Skip to content

majiameng/spreadsheet-php

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tinymeng/spreadsheet

Scrutinizer Code Quality Build Status Latest Stable Version Total Downloads Latest Unstable Version License

欢迎 Star,欢迎 PR!

大家如果有问题要交流,就发在这里吧: Spreadsheet 交流 或发邮件 666@majiameng.com

PHP Spreadsheet Class

基于 phpoffice/phpspreadsheet 扩展快速封装使用,避免我们再重复性的造轮子

您可以在网站上找到tinymeng/spreadsheet文档。查看“入门”页面以获取快速概述。

Installation

composer require tinymeng/spreadsheet -vvv 

类库使用的命名空间为 \\tinymeng\\spreadsheet

目录结构

. ├── config 配置文件目录 │ └── TSpreadSheet.php ├── example 事例代码 │ ├── export.php 导出事例代码 │ └── import.php 导入事例代码 ├── src 代码源文件目录 │ ├── Connector │ │ ├── Gateway.php 必须继承的抽象类 │ │ └── GatewayInterface.php 必须实现的接口 │ ├── Gateways │ │ ├── Export.php 导出实例 │ │ └── Import.php 导入实例 │ ├── Util │ │ └── TConfig.php 配置类 │ └── TSpreadSheet.php 抽象实例类 ├── composer.json Composer File ├── LICENSE MIT License ├── README_zh_cn.md 中文文档 └── README.md Documentation 

Configuration

Configuration

  • 2.1 excel导出 TSpreadSheet::export()
  • 2.2 excel导入 TSpreadSheet::import()

2.1.excel导出

example 事例目录

<?php use tinymeng\spreadsheet\TSpreadSheet; require __DIR__.'/vendor/autoload.php'; /**  * excel生成文件名  */ $filename = $sheetName = "export_demo"; /**  * excel表头  */ $title = [ '序号'=>'_id', 'ID'=>'id', '订单编号'=>'order_sn', '用户id'=>'user_id', '结算日期'=>'day', '下单时间'=>'create_time', '图片'=>'image', ]; /**  * excel数据数组(二维)  */ $data = [ [ 'id'=>'1', 'order_sn'=>'20180101465464', 'user_id'=>'1000', 'day'=>'20220101', 'create_time'=>'1687140376', 'image'=>[ 'type'=>'image', 'content'=>'https://sns.bjwmsc.com/wp-content/themes/zibll/img/logo.png',//网络图片确保存在 'height'=>100, // 'width'=>100,//只设置高,宽会自适应,如果设置宽后,高则失效 ], ],[ 'id'=>'2', 'order_sn'=>'20190101465464', 'user_id'=>'1000', 'day'=>'20220101', 'create_time'=>'1687140376', 'image'=>[ 'type'=>'image', 'content'=>'./text.png',//本地图片确保存在 'height'=>100, ], ],[ 'id'=>'3', 'order_sn'=>'20200101465464', 'user_id'=>'1000', 'day'=>'20220101', 'create_time'=>'1687140376', ],[ 'id'=>'4', 'order_sn'=>'20210101465464', 'user_id'=>'1001', 'day'=>'20220101', 'create_time'=>'1687140376', ], ]; $TSpreadSheet = TSpreadSheet::export() //创建一个sheet,设置sheet表头,并给表格赋值 ->createWorkSheet($sheetName)->setWorkSheetData($title,$data); // ->createWorkSheet($sheetName1)->setWorkSheetData($title1,$data1);//如果多个sheet可多次创建 //文件存储本地 $path = $TSpreadSheet->generate()->save($filename); echo '生成excel路径:'.$path;exit(); //生成excel路径:E:\spreadsheet-php\example\public\export\20240402\export_demo_2024-04-02_351.xlsx

设置数据有效性

// 示例1:设置下拉列表 $spreadsheet->setColumnValidation('status', [ 'type' => 'list', 'options' => ['待审核', '已审核', '已拒绝'], 'promptTitle' => '状态选择', 'promptMessage' => '请从下拉列表中选择状态', 'errorTitle' => '输入错误', 'errorMessage' => '只能从下拉列表中选择', 'showDropDown' => true ]); // 示例2:设置整数范围验证 $spreadsheet->setColumnValidation('age', [ 'type' => 'whole', 'operator' => 'between', 'min' => 0, 'max' => 150, 'promptTitle' => '年龄输入', 'promptMessage' => '请输入0-150之间的整数', 'errorTitle' => '输入错误', 'errorMessage' => '年龄必须在0-150之间', 'errorStyle' => 'stop' ]); // 示例3:批量设置 $spreadsheet->setColumnValidations([ 'status' => ['type' => 'list', 'options' => [...]], 'age' => ['type' => 'whole', 'operator' => 'between', 'min' => 0, 'max' => 150] ]); 

这样直接输出到浏览器中下载

$TSpreadSheet->generate()->download($filename); 

配置参数可以通过配置文件在初始化时传入

$config = [ 'pathName'=>null, //文件存储位置 'fileName'=>null, //文件名称 'horizontalCenter'=>true, //是否居中 'titleHeight'=>null, //定义表头行高,常用22 'titleWidth'=>null, //定义表头列宽(未设置则自动计算宽度),常用20 'height'=>null, //定义数据行高,常用22 'autoFilter'=>false, //自动筛选(是否开启) 'autoDataType'=>true, //自动适应文本类型 'freezePane'=>false, //冻结窗格(要冻结的首行首列"B2",false不开启) ]; $TSpreadSheet = TSpreadSheet::export($config); //配置参数也可以后期赋值 $TSpreadSheet = TSpreadSheet::export($config)->setAutoFilter(true); 

2.2.excel导入

<?php use tinymeng\spreadsheet\TSpreadSheet; require __DIR__.'/vendor/autoload.php'; /**  * excel生成文件名  */ $filename = './export_demo.xlsx'; /**  * excel表头  */ $title = [ '序号'=>'id', '订单编号'=>'order_sn', '用户id'=>'user_id', '结算日期'=>'day', '下单时间'=>'create_time', ]; //读取并初始化表格内容数据 $TSpreadSheet = TSpreadSheet::import() ->initWorkSheet($filename);//读取并初始化表格内容数据 //设置title对应字段,获取表格内容 $data = $TSpreadSheet->setTitle($title)->getExcelData(); //var_dump($data);die; //也可以设置读取第几个sheet $TSpreadSheet = TSpreadSheet::import() ->setFileName($filename)//读取文件路径 ->setSheet(0)//读取第0个sheet ->setTitleRow(1)//表头所在行 ->initWorkSheet();

打印结果如下

array(3) { [0]=> array(3) { ["id"]=> string(1) "1" ["order_sn"]=> string(14) "20180101465464" ["create_time"]=> string(19) "2023-06-19 10:06:16" } [1]=> array(3) { ["id"]=> string(1) "2" ["order_sn"]=> string(14) "20190101465464" ["create_time"]=> string(19) "2023-06-19 10:06:16" } [2]=> array(3) { ["id"]=> string(1) "3" ["order_sn"]=> string(14) "20200101465464" ["create_time"]=> string(19) "2023-06-19 10:06:16" } } 

大家如果有问题要交流,就发在这里吧: Spreadsheet 交流 或发邮件 666@majiameng.com

Packages

No packages published

Languages