alex290/yii2-spreadsheet

将PHP导出到Excel或将Excel导入到PHP

安装: 191

依赖: 0

建议者: 0

安全: 0

星星: 1

关注者: 2

分支: 0

开放问题: 0

类型:yii2-extension

0.1.0 2018-11-08 10:12 UTC

This package is auto-updated.

Last update: 2024-09-12 22:09:37 UTC


README

将PHP导出到Excel或将Excel导入到PHP。Excel小部件,用于创建Excel文件或上传Excel文件。

属性

string $mode 导出或导入模式。允许值 'export' 和 'import'

boolean $isMultipleSheet 用于设置具有多个工作表的Excel导出。

array $properties 用于设置Excel对象的属性。

array $models Model对象或包含大量数据的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 是获取数据的表名。获取具有相同名称的工作表。

array|Formatter $formatter 用于格式化,用于格式化模型属性值以显示为文本。可以是 [[Formatter]] 实例或用于创建 [[Formatter]] 实例的配置数组。如果没有设置此属性,则将使用应用程序的 "formatter" 组件。

安装

安装此扩展的首选方法是 composer

输入

php composer.phar require --prefer-dist alex290/yii2-spreadsheet "*"

或添加

"alex290/yii2-spreadsheet": "*"

到您的 composer.json 文件的 require 部分。

使用

导出数据

将数据导出到Excel文件。

<?php

// экспорта данных только один лист.

\alex290\spreadsheet\Excel::widget([
	'models' => $allModels,
	'mode' => 'export', //значение по умолчанию как 'export'
	'columns' => ['column1','column2','column3'], //без заголовка, заголовок получит значение из метки атрибута.
	'headers' => ['column1' => 'Header Column 1','column2' => 'Header Column 2', 'column3' => 'Header Column 3'], 
]);

\alex290\spreadsheet\Excel::export([
	'models' => $allModels, 
	'columns' => ['column1','column2','column3'], //без заголовка, заголовок получит значение из метки атрибута. 
	'headers' => ['column1' => 'Header Column 1','column2' => 'Header Column 2', 'column3' => 'Header Column 3'],
]);

// экспорта данных с нескольких листов.

\alex290\spreadsheet\Excel::widget([
	'isMultipleSheet' => true, 
	'models' => [
		'sheet1' => $allModels1, 
		'sheet2' => $allModels2, 
		'sheet3' => $allModels3
	], 
	'mode' => 'export', //значение по умолчанию как 'export' 
	'columns' => [
		'sheet1' => ['column1','column2','column3'], 
		'sheet2' => ['column1','column2','column3'], 
		'sheet3' => ['column1','column2','column3']
	],
	//без заголовка, заголовок получит значение из метки атрибута. 
	'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']
	],
]);

\alex290\spreadsheet\Excel::export([
	'isMultipleSheet' => true, 
	'models' => [
		'sheet1' => $allModels1, 
		'sheet2' => $allModels2, 
		'sheet3' => $allModels3
	], 'columns' => [
		'sheet1' => ['column1','column2','column3'], 
		'sheet2' => ['column1','column2','column3'], 
		'sheet3' => ['column1','column2','column3']
	], 
	//без заголовка, заголовок получит значение из метки атрибута. 
	'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
  
\alex290\spreadsheet\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 = \alex290\spreadsheet\Excel::import($fileName, $config); // $config это необязательный

$data = \alex290\spreadsheet\Excel::widget([
		'mode' => 'import', 
		'fileName' => $fileName, 
		'setFirstRecordAsKeys' => true, // если вы хотите установить ключи записи столбца с первой записи, если он не установлен, то заголовок с использованием алфавита столбцов в Excel. 
		'setIndexSheetByName' => true, // установить это, данные Excel с нескольких листов, индекс массива будет установлен с листа имя. Если это не задано, индекс будет использовать числовой. 
		'getOnlySheet' => 'sheet1', // это свойство можно задать, если требуется получить указанный лист из данных excel с несколькими листами.
	]);

$data = \alex290\spreadsheet\Excel::import($fileName, [
		'setFirstRecordAsKeys' => true, // если вы хотите установить ключи записи столбца с первой записи, если он не установлен, то заголовок с использованием алфавита столбцов в Excel. 
		'setIndexSheetByName' => true, // установить это, если данные Excel с нескольких листов, индекс массива будет установлен с листа имя. Если это не задано, индекс будет использовать числовой. 
		'getOnlySheet' => 'sheet1', // это свойство можно задать, если требуется получить указанный лист из данных excel с несколькими листами.
	]);

// импорт данных с нескольких файлов.

$data = \alex290\spreadsheet\Excel::widget([
	'mode' => 'import', 
	'fileName' => [
		'file1' => $fileName1, 
		'file2' => $fileName2, 
		'file3' => $fileName3,
	], 
		'setFirstRecordAsKeys' => true, // если вы хотите установить ключи записи столбца с первой записи, если он не установлен, то заголовок с использованием алфавита столбцов в Excel. 
		'setIndexSheetByName' => true, // установить это, если данные Excel с нескольких листов, индекс массива будет установлен с листа имя. Если это не задано, индекс будет использовать числовой. 
		'getOnlySheet' => 'sheet1', // это свойство можно задать, если требуется получить указанный лист из данных excel с несколькими листами.
	]);

$data = \alex290\spreadsheet\Excel::import([
	'file1' => $fileName1, 
	'file2' => $fileName2, 
	'file3' => $fileName3,
	], [
		'setFirstRecordAsKeys' => true, // если вы хотите установить ключи записи столбца с первой записи, если он не установлен, то заголовок с использованием алфавита столбцов в Excel. 
		'setIndexSheetByName' => true, // установить это, если данные Excel с нескольких листов, индекс массива будет установлен с листа имя. Если это не задано, индекс будет использовать числовой. 
		'getOnlySheet' => 'sheet1', // это свойство можно задать, если требуется получить указанный лист из данных excel с несколькими листами.
	]);

上述代码的示例结果


// Только один лист или определенный лист.
Array([0] => Array([name] => Alex, [email] => alex@webgoal.ru, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => alex@webgoal.ru, [framework interest] => Yii2));

// данные с нескольких листов
Array([Sheet1] => Array([0] => Array([name] => Alex, [email] => alex@webgoal.ru, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => alex@webgoal.ru, [framework interest] => Yii2)), [Sheet2] => Array([0] => Array([name] => Alex, [email] => alex@webgoal.ru, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => alex@webgoal.ru, [framework interest] => Yii2)));

// данные с несколькими файлами и указанным листом или только одним листом
Array([file1] => Array([0] => Array([name] => Alex, [email] => alex@webgoal.ru, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => alex@webgoal.ru, [framework interest] => Yii2)), [file2] => Array([0] => Array([name] => Alex, [email] => alex@webgoal.ru, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => alex@webgoal.ru, [framework interest] => Yii2)));

// данные с несколькими файлами и несколькими листами
Array([file1] => Array([Sheet1] => Array([0] => Array([name] => Alex, [email] => alex@webgoal.ru, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => alex@webgoal.ru, [framework interest] => Yii2)), [Sheet2] => Array([0] => Array([name] => Alex, [email] => alex@webgoal.ru, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => alex@webgoal.ru, [framework interest] => Yii2))), [file2] => Array([Sheet1] => Array([0] => Array([name] => Alex, [email] => alex@webgoal.ru, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => alex@webgoal.ru, [framework interest] => Yii2)), [Sheet2] => Array([0] => Array([name] => Alex, [email] => alex@webgoal.ru, [framework interest] => Yii2), [1] => Array([name] => Example, [email] => alex@webgoal.ru, [framework interest] => Yii2))));