life2016 / yii2-phpexcel
将PHP导出到Excel或将Excel导入PHP
Requires
README
将PHP导出到Excel或从PHP导入Excel。用于生成或加载Excel文件的Excel小部件。
属性
string $mode
是导出模式或导入模式。有效值是 'export' 和 'import'
boolean $isMultipleSheet
用于设置导出的Excel文件包含多个工作表。
array $properties
用于设置Excel对象的属性。
array $models
模型对象或数据提供者对象,其中包含大量数据。
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
是获取数据的特定工作表名称。这仅获取具有相同名称的工作表。
array|Formatter $formatter
用于格式化模型属性值以显示为可读文本的格式化器。这可以是 [[Formatter]] 实例的实例,或用于创建 [[Formatter]] 实例的配置数组。如果不设置此属性,则将使用 "formatter" 应用程序组件。
安装
安装此扩展的首选方法是使用 composer。
运行以下命令:
php composer.phar require --prefer-dist moonlandsoft/yii2-phpexcel "*"
或添加以下内容到您的 composer.json
文件的要求部分:
"moonlandsoft/yii2-phpexcel": "*"
使用方法
导出数据
将数据导出到Excel文件中。
<?php // export data only one worksheet. \moonland\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'], ]); \moonland\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. \moonland\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'] ], ]); \moonland\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 (TODO)。在字符串模式下,有效的布局是 'attribute:format:header:footer(TODO)'。
<?php \moonland\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 = \moonland\phpexcel\Excel::import($fileName, $config); // $config is an optional $data = \moonland\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 = \moonland\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 = \moonland\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 = \moonland\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@moonlandsoft.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@moonlandsoft.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@moonlandsoft.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@moonlandsoft.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@moonlandsoft.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@moonlandsoft.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@moonlandsoft.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@moonlandsoft.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@moonlandsoft.com, [framework interest] => Yii2))));
待办事项
- 为导出数据中的列添加footer参数。