shyngo / yii2-phpexcel
将PHP导出到Excel或从Excel导入PHP
Requires
This package is not auto-updated.
Last update: 2024-09-20 05:06:39 UTC
README
将PHP导出到Excel或从Excel导入PHP。用于生成Excel文件或加载Excel文件的Excel小部件。
属性
string $mode 是导出模式或导入模式。有效值是 'export' 和 'import'
boolean $isMultipleSheet 用于设置导出的Excel具有多个工作表。
array $properties 用于设置Excel对象上的属性。
array $models 模型对象或包含大量数据的DataProvider对象。
array $columns 用于从模型获取属性,此有效值仅限于模型上存在的属性。如果此值未设置,则将模型的所有属性都设置为列。
array $headers 用于设置第一行的标题列。如果想要自定义标题,请设置此值。如果未设置,则标题将获取模型属性的标签。
string|array $fileName 是导出或导入的文件名。多个文件名仅用于导入模式,在导出模式下不工作。
string $savePath 是保存文件的目录,或者您可以留空以将文件设置为附件。
string $format 用于导出Excel。有效值是 'Xls','Xlsx','Xml','Ods','Slk','Gnumeric','Csv', 和 'Html'。
boolean $setFirstTitle 用于设置第一行的标题列。列将在第一行上具有标题。
boolean $asAttachment 用于将Excel文件设置为下载模式。
boolean $setFirstRecordAsKeys 用于将Excel文件的第一条记录设置为每行数组的键。如果您想设置记录列的键为第一条记录,如果没有设置,则将使用Excel上的字母列作为标题。
boolean $setIndexSheetByName 用于根据工作表名称或数组结果设置工作表索引,如果工作表不止一个。
string $getOnlySheet 是要获取数据的sheet名称。这将仅获取具有相同名称的sheet。
array|Formatter $formatter 用于将模型属性值格式化为可显示文本的格式化器。这可以是 [[Formatter]] 实例或用于创建 [[Formatter]] 实例的配置数组。如果未设置此属性,则将使用 "formatter" 应用程序组件。
安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一
php composer.phar require --prefer-dist shyngo/yii2-phpexcel "*"
或添加
"shyngo/yii2-phpexcel": "*"
到您的 composer.json 文件的 require 部分中。
用法
导出数据
将数据导出到Excel文件中。
<?php
// export data only one worksheet.
\shyngo\phpexcel\Excel::widget([
'models' => $allModels,
'mode' => 'export', //default value as 'export'
'columns' => ['column1','column2','column3'], //without header working, because the header will be get label from attribute label.
'headers' => ['column1' => 'Header Column 1','column2' => 'Header Column 2', 'column3' => 'Header Column 3'],
]);
\shyngo\phpexcel\Excel::export([
'models' => $allModels,
'columns' => ['column1','column2','column3'], //without header working, because the header will be get label from attribute label.
'headers' => ['column1' => 'Header Column 1','column2' => 'Header Column 2', 'column3' => 'Header Column 3'],
]);
// export data with multiple worksheet.
\shyngo\phpexcel\Excel::widget([
'isMultipleSheet' => true,
'models' => [
'sheet1' => $allModels1,
'sheet2' => $allModels2,
'sheet3' => $allModels3
],
'mode' => 'export', //default value as 'export'
'columns' => [
'sheet1' => ['column1','column2','column3'],
'sheet2' => ['column1','column2','column3'],
'sheet3' => ['column1','column2','column3']
],
//without header working, because the header will be get label from attribute label.
'headers' => [
'sheet1' => ['column1' => 'Header Column 1','column2' => 'Header Column 2', 'column3' => 'Header Column 3'],
'sheet2' => ['column1' => 'Header Column 1','column2' => 'Header Column 2', 'column3' => 'Header Column 3'],
'sheet3' => ['column1' => 'Header Column 1','column2' => 'Header Column 2', 'column3' => 'Header Column 3']
],
]);
\shyngo\phpexcel\Excel::export([
'isMultipleSheet' => true,
'models' => [
'sheet1' => $allModels1,
'sheet2' => $allModels2,
'sheet3' => $allModels3
], 'columns' => [
'sheet1' => ['column1','column2','column3'],
'sheet2' => ['column1','column2','column3'],
'sheet3' => ['column1','column2','column3']
],
//without header working, because the header will be get label from attribute label.
'headers' => [
'sheet1' => ['column1' => 'Header Column 1','column2' => 'Header Column 2', 'column3' => 'Header Column 3'],
'sheet2' => ['column1' => 'Header Column 1','column2' => 'Header Column 2', 'column3' => 'Header Column 3'],
'sheet3' => ['column1' => 'Header Column 1','column2' => 'Header Column 2', 'column3' => 'Header Column 3']
],
]);
导出数据的新功能,如果您熟悉yii gridview,可以使用此功能。这与gridview数据列相同。在数组模式下,列的有效参数是 'attribute', 'header', 'format', 'value' 和 footer (待办事项)。在字符串模式下,有效的布局是 'attribute:format:header:footer(待办事项)'。
<?php
\shyngo\phpexcel\Excel::export([
'models' => Post::find()->all(),
'columns' => [
'author.name:text:Author Name',
[
'attribute' => 'content',
'header' => 'Content Post',
'format' => 'text',
'value' => function($model) {
return ExampleClass::removeText('example', $model->content);
},
],
'like_it:text:Reader like this content',
'created_at:datetime',
[
'attribute' => 'updated_at',
'format' => 'date',
],
],
'headers' => [
'created_at' => 'Date Created Content',
],
]);
导入数据
导入Excel文件并将其返回为数组。
<?php
$data = \shyngo\phpexcel\Excel::import($fileName, $config); // $config is an optional
$data = \shyngo\phpexcel\Excel::widget([
'mode' => 'import',
'fileName' => $fileName,
'setFirstRecordAsKeys' => true, // if you want to set the keys of record column with first record, if it not set, the header with use the alphabet column on excel.
'setIndexSheetByName' => true, // set this if your excel data with multiple worksheet, the index of array will be set with the sheet name. If this not set, the index will use numeric.
'getOnlySheet' => 'sheet1', // you can set this property if you want to get the specified sheet from the excel data with multiple worksheet.
]);
$data = \shyngo\phpexcel\Excel::import($fileName, [
'setFirstRecordAsKeys' => true, // if you want to set the keys of record column with first record, if it not set, the header with use the alphabet column on excel.
'setIndexSheetByName' => true, // set this if your excel data with multiple worksheet, the index of array will be set with the sheet name. If this not set, the index will use numeric.
'getOnlySheet' => 'sheet1', // you can set this property if you want to get the specified sheet from the excel data with multiple worksheet.
]);
// import data with multiple file.
$data = \shyngo\phpexcel\Excel::widget([
'mode' => 'import',
'fileName' => [
'file1' => $fileName1,
'file2' => $fileName2,
'file3' => $fileName3,
],
'setFirstRecordAsKeys' => true, // if you want to set the keys of record column with first record, if it not set, the header with use the alphabet column on excel.
'setIndexSheetByName' => true, // set this if your excel data with multiple worksheet, the index of array will be set with the sheet name. If this not set, the index will use numeric.
'getOnlySheet' => 'sheet1', // you can set this property if you want to get the specified sheet from the excel data with multiple worksheet.
]);
$data = \shyngo\phpexcel\Excel::import([
'file1' => $fileName1,
'file2' => $fileName2,
'file3' => $fileName3,
], [
'setFirstRecordAsKeys' => true, // if you want to set the keys of record column with first record, if it not set, the header with use the alphabet column on excel.
'setIndexSheetByName' => true, // set this if your excel data with multiple worksheet, the index of array will be set with the sheet name. If this not set, the index will use numeric.
'getOnlySheet' => 'sheet1', // you can set this property if you want to get the specified sheet from the excel data with multiple worksheet.
]);
代码顶部示例的结果
// only one sheet or specified sheet.
Array([0] => Array([name] => Anam, [email] => moh.khoirul.anaam@gmail.com, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => example@shyngo.com, [framework interest] => Yii2));
// data with multiple worksheet
Array([Sheet1] => Array([0] => Array([name] => Anam, [email] => moh.khoirul.anaam@gmail.com, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => example@shyngo.com, [framework interest] => Yii2)), [Sheet2] => Array([0] => Array([name] => Anam, [email] => moh.khoirul.anaam@gmail.com, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => example@shyngo.com, [framework interest] => Yii2)));
// data with multiple file and specified sheet or only one worksheet
Array([file1] => Array([0] => Array([name] => Anam, [email] => moh.khoirul.anaam@gmail.com, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => example@shyngo.com, [framework interest] => Yii2)), [file2] => Array([0] => Array([name] => Anam, [email] => moh.khoirul.anaam@gmail.com, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => example@shyngo.com, [framework interest] => Yii2)));
// data with multiple file and multiple worksheet
Array([file1] => Array([Sheet1] => Array([0] => Array([name] => Anam, [email] => moh.khoirul.anaam@gmail.com, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => example@shyngo.com, [framework interest] => Yii2)), [Sheet2] => Array([0] => Array([name] => Anam, [email] => moh.khoirul.anaam@gmail.com, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => example@shyngo.com, [framework interest] => Yii2))), [file2] => Array([Sheet1] => Array([0] => Array([name] => Anam, [email] => moh.khoirul.anaam@gmail.com, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => example@shyngo.com, [framework interest] => Yii2)), [Sheet2] => Array([0] => Array([name] => Anam, [email] => moh.khoirul.anaam@gmail.com, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => example@shyngo.com, [framework interest] => Yii2))));
待办事项
- 在导出数据中添加列的页脚参数。