laravel Excel3.1インポートファイルのエクスポート
44540 ワード
Laravel:7.6 excel:3.1この文書は一部の操作にのみ関連しています.詳細はExcelの公式ドキュメントを参照してください. Excel GitHub公式アドレス:https://github.com/maatwebsite/Laravel-Excel Excel公式ドキュメントアドレス:https://docs.laravel-excel.com/3.1/getting-started/
インストール要件: PHP: ^7.0 Laravel: ^5.5 PhpSpreadsheet: ^1.6 php_zip PHP拡張機能有効 php_xml PHP拡張機能有効 php_gd 2 PHP拡張 有効
Excel 3をインストールします.1クラスライブラリ
1.インポートの作成
実行すると、Appの下にImportフォルダが自動的に作成され、インポートファイルが自動的に生成されます.
2.ファイルコードのインポート:
3.コントローラ呼び出しのインポート
これでインポート機能が完了しました
4.エクスポートの作成
5.ファイルコードのエクスポート:
6.コントローラ呼び出しのエクスポート:
これでエクスポート機能が完了しました
インストール要件:
Excel 3をインストールします.1クラスライブラリ
composer require maatwebsite/excel
3.1
composer require maatwebsite/excel ~3.1.0
1.インポートの作成
php artisan make:import CustomerImport --model=Customer
実行すると、Appの下にImportフォルダが自動的に作成され、インポートファイルが自動的に生成されます.
2.ファイルコードのインポート:
<?php
namespace App\Imports;
use App\Model\Customer;
use App\Model\Position;
use Maatwebsite\Excel\Concerns\ToArray;
use Maatwebsite\Excel\Concerns\WithBatchInserts;
use Maatwebsite\Excel\Concerns\WithChunkReading;
//use Maatwebsite\Excel\Concerns\WithHeadingRow;
class CustomersImport implements ToArray,WithBatchInserts,WithChunkReading
{
/**
*
*
* @param array $array
*/
public function array(array $array)
{
#
for ( $i = 1; $i <= count( $array ) -1; $i++ ) {
if( !isset( $array[$i] ) ) {
continue;
}
$data[$i-1]['***'] = $array[$i][0];
$data[$i-1]['***'] = $array[$i][4];
$data[$i-1]['***'] = $array[$i][5];
$data[$i-1]['***'] = $array[$i][6];
# '#'
$data[$i-1]['***'] = str_replace( '#' , '-' , $array[$i][2] );
}
#
$data = collect( $data );
#
$data = $data->unique( '****' );
$data = json_decode( json_encode( $data ) , 256 );
#
$data = array_values( $data );
$customer_data = Customer::getAllCustomer();
$customer_data = json_decode( json_encode( $customer_data ) , 256 );
#
for ( $j = 0; $j <= count( $customer_data ) -1; $j++ ) {
foreach ( $data as $k => $v ) {
if( $data[$k]['***'] == $customer_data[$j]['***'] ) {
unset( $data[$k] );
}
}
}
#
$res = Customer::insertCustomerData( $data );
return $res;
}
/**
*
* ( )
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
// print_r( $row );exit;
$data = Customer::getAllCustomer();
$data = json_decode( json_encode( $data ) , 256 );
#
$repeat = 0;
foreach ( $data as $k => $v ) {
if( $data[$k]['***'] == $row['****'] ) {
$repeat++;
}
}
if( $repeat == 0 ) {
$res = new Customer([
'name' => $row['***'],
'mobile' => $row['****'],
'wechat' => $row['****'],
'qq' => $row['****'],
]);
return $res;
}
}
/**
*
*
* @return int
*/
public function batchSize(): int
{
return 1000;
}
/**
*
*
* @return int
*/
public function chunkSize(): int
{
return 1000;
}
}
3.コントローラ呼び出しのインポート
#
public function importCustomerData( Request $request ) {
#
$file = $request->file( 'file' );
#
if( $file->getError() == 1 ) {
return $this->fail( 400 , ' PHP ' );
} elseif ( $file->getError() == 2 ) {
return $this->fail( 400 , ' ' );
} elseif ( $file->getError() == 3 ) {
return $this->fail( 400 , ' , ' );
} elseif ( $file->getError() == 4 ) {
return $this->fail( 400 , ' ' );
} elseif ( $file->getError() == 6 ) {
return $this->fail( 400 , ' ' );
} elseif ( $file->getError() == 7 ) {
return $this->fail( 400 , ' ' );
}
#
$path = $file->getRealPath();
#
if( $file->getClientOriginalExtension() != 'xlsx' && $file->getClientOriginalExtension() != 'xls' ) {
return $this->fail( 400 , ' ' );
}
Excel::import(new CustomersImport() , $path , null , \Maatwebsite\Excel\Excel::XLSX );
return $this->success( ' , ' );
}
これでインポート機能が完了しました
4.エクスポートの作成
php artisan make:export CustomerExport --model=Customer
5.ファイルコードのエクスポート:
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Events\AfterSheet;
use phpDocumentor\Reflection\Types\Collection;
class CustomerExport implements FromCollection,WithHeadings,WithEvents
{
//
protected $data;
public function __construct( array $data )
{
return $this->data = $data;
}
/**
*
*
* @return Collection
*/
public function collection()
{
if (!empty($this->data)) {
// ,
foreach ($this->data as $key => $vo) {
// excel , " ", :$str = $str . ' ';
$this->data[$key]['****'] = $vo['***'] . ' ';
$this->data[$key]['time'] = date( 'Y-m-d H:i:s' , $vo['time'] ) . ' ';
}
}
// print_r( $this->data );exit;
return collect( $this->data );
}
/**
* , ,
*
* @return array
*/
public function headings(): array
{
return [
' ',
' ',
' ',
'QQ',
];
}
/**
* registerEvents.
*
* @return array
*/
public function registerEvents(): array
{
return [
//
AfterSheet::class => function (AfterSheet $event) {
//
// $event->sheet->getDelegate()->setMergeCells(['A2:L2', 'B11:E11', 'A12:L12']);
//
// $event->sheet->getDelegate()->getStyle('A2:L2')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
// $event->sheet->getDelegate()->getStyle('A3:L3')->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
//
$widths = ['A' => 10, 'B' => 15, 'C' => 30, 'D' => 12, 'E' => 14, 'F' => 14, 'G' => 14, 'H' => 10, 'I' => 18, 'J' => 14, 'K' => 10];
foreach ($widths as $k => $v) {
//
$event->sheet->getDelegate()->getColumnDimension($k)->setWidth($v);
}
},
];
}
}
6.コントローラ呼び出しのエクスポート:
#
public function exportCustomerData() {
$data = Customer::getAllCustomer();
$data = $this->jsonToArray( $data );
if( empty( $data ) ) {
return $this->fail( 404 , ' ' );
}
return Excel::download( new CustomerExport( $data ) , ' .xlsx' );
}
これでエクスポート機能が完了しました