|
@@ -52,6 +52,7 @@ pecl install xlswriter
|
|
|
|
|
|
### 导出excel快速上手
|
|
### 导出excel快速上手
|
|
```
|
|
```
|
|
|
|
+use Pxlswrite\Pxlswrite;
|
|
$fileObj = new Pxlswrite(['path' => __DIR__]);
|
|
$fileObj = new Pxlswrite(['path' => __DIR__]);
|
|
$filePath = $fileObj
|
|
$filePath = $fileObj
|
|
->fileName('123.xlsx','sheet1') //fileName 会自动创建一个工作表,你可以自定义该工作表名称,工作表名称为可选参数
|
|
->fileName('123.xlsx','sheet1') //fileName 会自动创建一个工作表,你可以自定义该工作表名称,工作表名称为可选参数
|
|
@@ -77,6 +78,8 @@ function generateData(){
|
|
}
|
|
}
|
|
```
|
|
```
|
|
### 下载excel文件
|
|
### 下载excel文件
|
|
|
|
+可以设置文件下载完成后是否自动删除原文件,download方法参数二默认值为true自动删除原文件。
|
|
|
|
+
|
|
函数原型
|
|
函数原型
|
|
```
|
|
```
|
|
/**
|
|
/**
|
|
@@ -90,9 +93,10 @@ download($_filePath, $_isDelete = true)
|
|
示例
|
|
示例
|
|
```
|
|
```
|
|
$fileObj->download($filePath);
|
|
$fileObj->download($filePath);
|
|
|
|
+//false 文件下载后不会自动删除原文件,true 默认值,下载后自动删除原文件
|
|
|
|
+//$fileObj->download($filePath,false);
|
|
```
|
|
```
|
|
### 使用WebSocket推送excel处理进度
|
|
### 使用WebSocket推送excel处理进度
|
|
-
|
|
|
|
实现过程:前端与websocket服务器先建立连接,连接建立好之后服务端会发送一条消息 {'status' => 'onopen', 'fd' => $request->fd},
|
|
实现过程:前端与websocket服务器先建立连接,连接建立好之后服务端会发送一条消息 {'status' => 'onopen', 'fd' => $request->fd},
|
|
前端将fd保存起来,在请求处理excel接口时将fd参数传给后台,后台在推送进度消息时将fd参数封装到消息体里在发送给websocket服务器
|
|
前端将fd保存起来,在请求处理excel接口时将fd参数传给后台,后台在推送进度消息时将fd参数封装到消息体里在发送给websocket服务器
|
|
,websocket服务器根据fd参数在推送消息给指定的前端,这就完成了web前端、websocket服务器、应用后端之间的数据交互。
|
|
,websocket服务器根据fd参数在推送消息给指定的前端,这就完成了web前端、websocket服务器、应用后端之间的数据交互。
|
|
@@ -100,7 +104,28 @@ $fileObj->download($filePath);
|
|
* 前端首次连接时websocket服务器发送的消息体结构:['status' => 'onopen', 'fd' => 1]
|
|
* 前端首次连接时websocket服务器发送的消息体结构:['status' => 'onopen', 'fd' => 1]
|
|
* 处理过程中websocket服务器发送的消息体结构:['status' => 'processing', 'process' => 100, 'fd'=>1]
|
|
* 处理过程中websocket服务器发送的消息体结构:['status' => 'processing', 'process' => 100, 'fd'=>1]
|
|
|
|
|
|
-前端可根据status状态进行相应的处理,status = onopen 时保存fd,status = processing 时进行进度条渲染。
|
|
|
|
|
|
+前端可根据status状态进行相应的处理,status = onopen 时保存fd,status = processing 时进行进度条渲染。
|
|
|
|
+
|
|
|
|
+配置:
|
|
|
|
+ WebSocket服务端默认使用9502端口,可自行修改./src/WebSocket/WebsocketServer的 CONST PORT = 9502
|
|
|
|
+
|
|
|
|
+WebSocketClient使用:
|
|
|
|
+```
|
|
|
|
+use Pxlswrite\WebSocket\WebSocketClient;
|
|
|
|
+//ws://127.0.0.1:9502 服务端地址
|
|
|
|
+//$_GET['fd'] 前端传过来的 web端与websocket服务端连接的唯一标识客户端fd
|
|
|
|
+$pushHandle = new WebSocketClient('ws://127.0.0.1:9502', $_GET['fd']);
|
|
|
|
+//发送websocket消息
|
|
|
|
+$pushHandle->send(['status' => 'rocessing', 'process' => 100, 'fd'=>1]);
|
|
|
|
+```
|
|
|
|
+处理excel时自动发送消息(在推送信息失败时不会影响、终止代码的执行,会生成相应的日志文件,日志文件存放于实例化Pxlswrite所设置的路径下的log目录,日志文件按日期存放)
|
|
|
|
+```
|
|
|
|
+//通用数据设置 generateData回调生成器方法获取数据,$pushHandle 用于推送,可选参数
|
|
|
|
+setDataByGenerator('generateData', [], [], $pushHandle)
|
|
|
|
+//订单类型数据设置 generateOrderData回调生成器方法获取数据,$pushHandle 用于推送,可选参数
|
|
|
|
+setOrderData('generateOrderData',[],[],pushHandle)
|
|
|
|
+```
|
|
|
|
+示例
|
|
|
|
|
|
1.开启websocket 服务端
|
|
1.开启websocket 服务端
|
|
```
|
|
```
|
|
@@ -162,6 +187,8 @@ websocket.onerror = function (evt, e) {
|
|
```
|
|
```
|
|
3.后端处理excel 并调用 WebSocketClient 推送消息
|
|
3.后端处理excel 并调用 WebSocketClient 推送消息
|
|
```
|
|
```
|
|
|
|
+use Pxlswrite\Pxlswrite;
|
|
|
|
+use Pxlswrite\WebSocket\WebSocketClient;
|
|
$fileObj = new Pxlswrite(['path' => __DIR__]);
|
|
$fileObj = new Pxlswrite(['path' => __DIR__]);
|
|
//实例化WebSocketClient--需要推送进度才实例化
|
|
//实例化WebSocketClient--需要推送进度才实例化
|
|
$pushHandle = new WebSocketClient('ws://127.0.0.1:9502', $_GET['fd']);
|
|
$pushHandle = new WebSocketClient('ws://127.0.0.1:9502', $_GET['fd']);
|
|
@@ -174,6 +201,9 @@ echo json_encode(['code' => 1, 'msg' => '导出完毕', 'url' => '/download.php?
|
|
```
|
|
```
|
|
|
|
|
|
### 设置字段&表格头
|
|
### 设置字段&表格头
|
|
|
|
+通过field()可以进行字段的定义&表格头的设置,使用header()定义的表格头会覆盖field()定义的表格头;
|
|
|
|
+使用field()定义字段后在使用setDataByGenerator()和setOrderData()时会进行字段的过滤,设置了回调的方法还会调用字段的回调方法,进行字段的格式化处理等操作。**但并不推荐设置字段的回调,因为效率不高,可以在传入数据的时候就处理好字段的值**。**推荐使field()设置表格头。**
|
|
|
|
+
|
|
函数原型
|
|
函数原型
|
|
```
|
|
```
|
|
/**
|
|
/**
|
|
@@ -190,6 +220,7 @@ function field($field)
|
|
```
|
|
```
|
|
示例
|
|
示例
|
|
```
|
|
```
|
|
|
|
+use Pxlswrite\Pxlswrite;
|
|
//定义字段
|
|
//定义字段
|
|
$field = [
|
|
$field = [
|
|
'name' => ['name' => '姓名'],
|
|
'name' => ['name' => '姓名'],
|
|
@@ -321,6 +352,7 @@ mergeCells($scope, $data, $formatHandler = null)
|
|
```
|
|
```
|
|
示例
|
|
示例
|
|
```
|
|
```
|
|
|
|
+use Pxlswrite\Pxlswrite;
|
|
$fileObj = new Pxlswrite(['path' => __DIR__]);
|
|
$fileObj = new Pxlswrite(['path' => __DIR__]);
|
|
$filePath = $fileObj->fileName('123.xlsx','sheet1')
|
|
$filePath = $fileObj->fileName('123.xlsx','sheet1')
|
|
->field($field)//设置字段&表格头
|
|
->field($field)//设置字段&表格头
|
|
@@ -351,15 +383,15 @@ $fileObj->fileName("test.xlsx")
|
|
->output();
|
|
->output();
|
|
```
|
|
```
|
|
#### 动态合并单元格
|
|
#### 动态合并单元格
|
|
-* 通用合并,根据数据的值比较 自动进行 行合并
|
|
|
|
|
|
+* 通用合并,根据数据的值比较 自动进行 行合并(调用方法时需要指定要自动合并的字段,才会根据字段值进行自动合并)
|
|
|
|
|
|
优点:数据层不需要怎么处理,将数据库查询出来的二维数组直接传入即可。
|
|
优点:数据层不需要怎么处理,将数据库查询出来的二维数组直接传入即可。
|
|
缺点:无法满足像订单一样的 存在多个订单时间值是一样的,合并就会存在问题。
|
|
缺点:无法满足像订单一样的 存在多个订单时间值是一样的,合并就会存在问题。
|
|
|
|
|
|
-* 订单类型合并,将原始数据处理成指定的数据格式在传入此类自动进行 行合并
|
|
|
|
|
|
+* 订单类型合并,将原始数据处理成指定的数据格式在传入此类自动进行 行合并(调用方法时需要指定要自动合并的字段,才会根据字段值进行自动合并)
|
|
|
|
|
|
优点:根据传入的数据格式进行合并,合并更加精准不会存在问题。
|
|
优点:根据传入的数据格式进行合并,合并更加精准不会存在问题。
|
|
-缺点:在数据层需要处理成指定的数据格式,数据格式如下:
|
|
|
|
|
|
+缺点:对数据格式有要求,在数据层需要处理成指定的数据格式,数据格式如下:
|
|
```
|
|
```
|
|
$data = [
|
|
$data = [
|
|
[
|
|
[
|
|
@@ -379,6 +411,7 @@ $data = [
|
|
];
|
|
];
|
|
```
|
|
```
|
|
字段数量,名称没有限制,只支持一个item(也可以叫其他名字)二维数组,item数组里面的个数没有限制。
|
|
字段数量,名称没有限制,只支持一个item(也可以叫其他名字)二维数组,item数组里面的个数没有限制。
|
|
|
|
+**当数据字段的值能明显区分时推荐使用通用合并,当数据字段的值不能明显区分时(如:时间字段)推荐订单类型的合并**
|
|
##### 通用合并demo
|
|
##### 通用合并demo
|
|
函数原型
|
|
函数原型
|
|
```
|
|
```
|
|
@@ -395,10 +428,11 @@ $data = [
|
|
* @return Pxlswrite
|
|
* @return Pxlswrite
|
|
* @throws DataFormatException
|
|
* @throws DataFormatException
|
|
*/
|
|
*/
|
|
-setDataByGenerator($_generator, array $_mergeColumn = [], array $_mergeColumnStyle = [], WebSocketClient $_pushHandle = null, $_index = 1
|
|
|
|
|
|
+setDataByGenerator($_generator, array $_mergeColumn = [], array $_mergeColumnStyle = [], WebSocketClient $_pushHandle = null, $_index = 1)
|
|
```
|
|
```
|
|
示例
|
|
示例
|
|
```
|
|
```
|
|
|
|
+use Pxlswrite\Pxlswrite;
|
|
//定义字段
|
|
//定义字段
|
|
$field = [
|
|
$field = [
|
|
'id' => ['name' => 'title'],
|
|
'id' => ['name' => 'title'],
|
|
@@ -453,6 +487,7 @@ setOrderData($_generator, array $_mergeColumn = [], array $_mergeColumnStyle = [
|
|
```
|
|
```
|
|
示例
|
|
示例
|
|
```
|
|
```
|
|
|
|
+use Pxlswrite\Pxlswrite;
|
|
//定义字段
|
|
//定义字段
|
|
$orderField = [
|
|
$orderField = [
|
|
'order'=>['name'=>'订单号'] ,
|
|
'order'=>['name'=>'订单号'] ,
|
|
@@ -514,6 +549,7 @@ importDataByCursor($_func, WebSocketClient $_pushHandle = null, array $_dataType
|
|
```
|
|
```
|
|
示例
|
|
示例
|
|
```
|
|
```
|
|
|
|
+use Pxlswrite\Pxlswrite;
|
|
$fileObj = new Pxlswrite(['path' => dirname($_GET['file'])]);
|
|
$fileObj = new Pxlswrite(['path' => dirname($_GET['file'])]);
|
|
$fileInfo = explode('/', $_GET['file']);
|
|
$fileInfo = explode('/', $_GET['file']);
|
|
$fileName = end($fileInfo);
|
|
$fileName = end($fileInfo);
|