|
@@ -29,7 +29,7 @@ pecl install xlswriter
|
|
|
* export_demo.php excel导出demo
|
|
|
* import_demo.php excel导入demo
|
|
|
|
|
|
-## 简单导出demo:
|
|
|
+>简单导出demo:
|
|
|
```
|
|
|
$fileObj = new Pxlswrite(['path' => __DIR__]);
|
|
|
$filePath = $fileObj
|
|
@@ -56,7 +56,7 @@ function generateData(){
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-## 使用WebSocket推送excel处理进度
|
|
|
+> 使用WebSocket推送excel处理进度
|
|
|
|
|
|
实现过程:前端与websocket服务器先建立连接,连接建立好之后服务端会发送一条消息 {'status' => 'onopen', 'fd' => $request->fd},
|
|
|
前端将fd保存起来,在请求处理excel接口时将fd参数传给后台,后台在推送进度消息时将fd参数封装到消息体里在发送给websocket服务器
|
|
@@ -65,11 +65,11 @@ function generateData(){
|
|
|
* 前端首次连接时的消息体:['status' => 'onopen', 'fd' => 1]
|
|
|
* 处理过程中的消息体:['status' => 'processing', 'process' => 100, 'fd'=>1]
|
|
|
|
|
|
-### 开启websocket 服务端
|
|
|
+>> 1.开启websocket 服务端
|
|
|
```
|
|
|
php ./src/WebSocket/WebSocketServer.php
|
|
|
```
|
|
|
-### web前端
|
|
|
+>> 2.web前端
|
|
|
```
|
|
|
var layer = layui.layer, $ = layui.jquery, upload = layui.upload;
|
|
|
var loading, fileLoading;
|
|
@@ -122,7 +122,7 @@ websocket.onerror = function (evt, e) {
|
|
|
}, 'json');
|
|
|
}
|
|
|
```
|
|
|
-### php 后端调用 WebSocketClient 推送消息
|
|
|
+>> 3.php 后端调用 WebSocketClient 推送消息
|
|
|
```
|
|
|
$fileObj = new Pxlswrite(['path' => __DIR__]);
|
|
|
//实例化WebSocketClient--需要推送进度才实例化
|
|
@@ -132,8 +132,8 @@ $filePath = $fileObj->fileName('123.xlsx','sheet1')
|
|
|
->setDataByGenerator('generateData', [], [], $pushHandle)//设置数据 回调生成器方法获取数据,$pushHandle 用于推送,可选参数
|
|
|
->output();//输出excel文件到磁盘
|
|
|
```
|
|
|
-## 样式设置
|
|
|
-支持的样式如下:
|
|
|
+> 样式设置
|
|
|
+>> 支持的样式如下:
|
|
|
```
|
|
|
$style = [
|
|
|
'align' => [Pxlswrite::FORMAT_ALIGN_CENTER, Pxlswrite::FORMAT_ALIGN_VERTICAL_CENTER],//对齐 [x,y]
|
|
@@ -149,7 +149,7 @@ $style = [
|
|
|
'italic' => true,//斜体
|
|
|
];
|
|
|
```
|
|
|
-样式相关常量
|
|
|
+>> 样式相关常量
|
|
|
```
|
|
|
const FORMAT_ALIGN_LEFT = Format::FORMAT_ALIGN_LEFT; // 水平左对齐
|
|
|
const FORMAT_ALIGN_CENTER = Format::FORMAT_ALIGN_CENTER; // 水平剧中对齐
|
|
@@ -200,7 +200,7 @@ $style = [
|
|
|
const COLOR_WHITE = Format::COLOR_WHITE;
|
|
|
const COLOR_YELLOW = Format::COLOR_YELLOW;
|
|
|
```
|
|
|
-样式设置的相关方法
|
|
|
+>> 样式设置的相关方法
|
|
|
```
|
|
|
/**
|
|
|
* 行单元格样式
|
|
@@ -237,7 +237,7 @@ defaultFormat($formatHandler)
|
|
|
*/
|
|
|
mergeCells($scope, $data, $formatHandler = null)
|
|
|
```
|
|
|
-示例
|
|
|
+>> 示例
|
|
|
```
|
|
|
$fileObj = new Pxlswrite(['path' => __DIR__]);
|
|
|
$filePath = $fileObj->fileName('123.xlsx','sheet1')
|
|
@@ -248,8 +248,66 @@ $filePath = $fileObj->fileName('123.xlsx','sheet1')
|
|
|
->output();//输出excel文件到磁盘
|
|
|
```
|
|
|
注意:设置行与行/列与列样式 交集范围会覆盖;行样式优先于列样式;全局默认样式不会被覆盖,谨慎使用
|
|
|
+> 合并单元格
|
|
|
+>> 函数原型
|
|
|
+```
|
|
|
+/**
|
|
|
+ * 合并单元格
|
|
|
+ * @param string $scope 单元格范围
|
|
|
+ * @param string $data data
|
|
|
+ * @param resource|array $formatHandler 合并单元格的样式
|
|
|
+ * @return $this
|
|
|
+ * @throws DataFormatException
|
|
|
+ */
|
|
|
+mergeCells($scope, $data, $formatHandler = null)
|
|
|
+```
|
|
|
+>> 示例
|
|
|
+```
|
|
|
+$fileObj->fileName("test.xlsx")
|
|
|
+ ->mergeCells('A1:C1', 'Merge cells')
|
|
|
+ ->output();
|
|
|
+```
|
|
|
+> 定义字段&格式化字段
|
|
|
+>> 函数原型
|
|
|
+```
|
|
|
+/**
|
|
|
+ * 设置字段&表格头
|
|
|
+ * @param array $field 字段定义数组 数据格式如下
|
|
|
+ * [
|
|
|
+ * 'name' => ['name' => '姓名','callback'=>'functionName'],
|
|
|
+ * 'age' => ['name' => '年龄'],
|
|
|
+ * ]
|
|
|
+ * @return $this
|
|
|
+ * @throws DataFormatException
|
|
|
+ */
|
|
|
+function field($field)
|
|
|
+```
|
|
|
+>> 示例
|
|
|
+```
|
|
|
+//定义字段
|
|
|
+$field = [
|
|
|
+ 'name' => ['name' => '姓名'],
|
|
|
+ 'year' => ['name' => '出生年份'],
|
|
|
+ 'age' => ['name' => '年龄','callback'=>'ageFormat']//callback 回调方法处理格式化值 可以是函数/对象方法
|
|
|
+];
|
|
|
+$fileObj = new Pxlswrite(['path' => __DIR__ ]);
|
|
|
+$fileObj->fileName('1234.xlsx')
|
|
|
+ ->field($field)//设置字段&表格头
|
|
|
+ ->data([
|
|
|
+ ['Rent', 1999,0],
|
|
|
+ ['Gas', 1996,0],
|
|
|
+ ['Food', 1998,0],
|
|
|
+ ['Gym', 1995,0],
|
|
|
+ ])
|
|
|
+ ->output();//输出excel文件到磁盘
|
|
|
+//格式化字段值
|
|
|
+function ageFormat($v, $values)
|
|
|
+{
|
|
|
+ return date(Y) - $values['year'];
|
|
|
+}
|
|
|
+```
|
|
|
|
|
|
-## 动态合并单元格
|
|
|
+> 动态合并单元格
|
|
|
* 通用合并,根据数据的值比较 自动进行 行合并
|
|
|
|
|
|
优点:数据层不需要怎么处理,将数据库查询出来的二维数组直接传入即可。
|
|
@@ -278,8 +336,8 @@ $data = [
|
|
|
];
|
|
|
```
|
|
|
字段数量,名称没有限制,只支持一个item(也可以叫其他名字)二维数组,item数组里面的个数没有限制。
|
|
|
-### 通用合并demo
|
|
|
-函数原型
|
|
|
+>> 通用合并demo
|
|
|
+>>> 函数原型
|
|
|
```
|
|
|
/**
|
|
|
* 通过生成器逐行向表格插入数据,
|
|
@@ -296,7 +354,7 @@ $data = [
|
|
|
*/
|
|
|
setDataByGenerator($_generator, array $_mergeColumn = [], array $_mergeColumnStyle = [], WebSocketClient $_pushHandle = null, $_index = 1
|
|
|
```
|
|
|
-示例
|
|
|
+>>> 示例
|
|
|
```
|
|
|
//定义字段
|
|
|
$field = [
|
|
@@ -320,8 +378,8 @@ function generateData(){
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-### 订单类型合并demo
|
|
|
-函数原型
|
|
|
+>> 订单类型合并demo
|
|
|
+>>> 函数原型
|
|
|
```
|
|
|
/**
|
|
|
* 设置订单数据 根据数据可以合并指定的字段,需要遵循以下数据格式
|
|
@@ -351,7 +409,7 @@ function generateData(){
|
|
|
*/
|
|
|
setOrderData($_generator, array $_mergeColumn = [], array $_mergeColumnStyle = [], WebSocketClient $_pushHandle = null, $_index = 1)
|
|
|
```
|
|
|
-示例
|
|
|
+>>> 示例
|
|
|
```
|
|
|
//定义字段
|
|
|
$orderField = [
|
|
@@ -400,66 +458,9 @@ function generateOrderData(){
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
-## 合并单元格
|
|
|
-函数原型
|
|
|
-```
|
|
|
-/**
|
|
|
- * 合并单元格
|
|
|
- * @param string $scope 单元格范围
|
|
|
- * @param string $data data
|
|
|
- * @param resource|array $formatHandler 合并单元格的样式
|
|
|
- * @return $this
|
|
|
- * @throws DataFormatException
|
|
|
- */
|
|
|
-mergeCells($scope, $data, $formatHandler = null)
|
|
|
-```
|
|
|
-示例
|
|
|
-```
|
|
|
-$fileObj->fileName("test.xlsx")
|
|
|
- ->mergeCells('A1:C1', 'Merge cells')
|
|
|
- ->output();
|
|
|
-```
|
|
|
-## 定义字段&格式化字段
|
|
|
-函数原型
|
|
|
-```
|
|
|
-/**
|
|
|
- * 设置字段&表格头
|
|
|
- * @param array $field 字段定义数组 数据格式如下
|
|
|
- * [
|
|
|
- * 'name' => ['name' => '姓名','callback'=>'functionName'],
|
|
|
- * 'age' => ['name' => '年龄'],
|
|
|
- * ]
|
|
|
- * @return $this
|
|
|
- * @throws DataFormatException
|
|
|
- */
|
|
|
-function field($field)
|
|
|
-```
|
|
|
-示例
|
|
|
-```
|
|
|
-//定义字段
|
|
|
-$field = [
|
|
|
- 'name' => ['name' => '姓名'],
|
|
|
- 'year' => ['name' => '出生年份'],
|
|
|
- 'age' => ['name' => '年龄','callback'=>'ageFormat']//callback 回调方法处理格式化值 可以是函数/对象方法
|
|
|
-];
|
|
|
-$fileObj = new Pxlswrite(['path' => __DIR__ ]);
|
|
|
-$fileObj->fileName('1234.xlsx')
|
|
|
- ->field($field)//设置字段&表格头
|
|
|
- ->data([
|
|
|
- ['Rent', 1999,0],
|
|
|
- ['Gas', 1996,0],
|
|
|
- ['Food', 1998,0],
|
|
|
- ['Gym', 1995,0],
|
|
|
- ])
|
|
|
- ->output();//输出excel文件到磁盘
|
|
|
-//格式化字段值
|
|
|
-function ageFormat($v, $values)
|
|
|
-{
|
|
|
- return date(Y) - $values['year'];
|
|
|
-}
|
|
|
-```
|
|
|
-## 游标读取excel 分段写入数据库
|
|
|
-函数原型
|
|
|
+
|
|
|
+> 游标读取excel 分段写入数据库
|
|
|
+>> 函数原型
|
|
|
```
|
|
|
/**
|
|
|
* 游标读取excel,分段插入数据库
|
|
@@ -469,7 +470,7 @@ function ageFormat($v, $values)
|
|
|
*/
|
|
|
importDataByCursor($_func, WebSocketClient $_pushHandle = null, array $_dataType = [])
|
|
|
```
|
|
|
-示例
|
|
|
+>>示例
|
|
|
```
|
|
|
$fileObj = new Pxlswrite(['path' => dirname($_GET['file'])]);
|
|
|
$fileInfo = explode('/', $_GET['file']);
|