개발 꿀팁/PHP

phpoffice/ phpspreadsheet을 사용하여 Excel 테이블 가져오기

Jammie 2022. 11. 1. 17:22
반응형

phpoffice/phpspreadsheet 도입

composer require phpoffice/phpspreadsheet

내보내기
직접 배열로 내보낼 수 있습니다. 주석의 코드는 순환을 위한 셀 할당입니다

<?php

use \PhpOffice\PhpSpreadsheet\Spreadsheet;
use \PhpOffice\PhpSpreadsheet\IOFactory;
class ErpOrder extends Model
{

public function export($adminId)
{
try {
$list = $this -> field('order_number, good_title, sku, good_number, user_name, user_mobile, user_address, express_number')
->where(['status' => 2, 'send_status' => 1, 'partner_admin_id' => $adminId])
->select()
->toArray();

// 테이블 내보내기
$objExcel = new Spreadsheet( );
$objWriter = IOFactory::createWriter($objExcel, 'Xlsx');
$objActSheet = $objExcel->getActiveSheet(0);
$objActSheet->setTitle('송장') //엑셀 제목 설정



$keys= ['주문번호', '상품명', 'sku', '수량', '수령자명', '연락번호', '수령지', '물류송장번호'];
array_unshift($list,$keys);
$objActSheet->fromArray($list);


// $objActSheet->setCellValue('A1', '주문번호');
// $objActSheet->setCellValue('B1', '상품명');
// $objActSheet->setCellValue('C1', 'sku');
// $objActSheet->setCellValue('D1', '수량');
// $objActSheet->setCellValue('E1', '받는 사람 이름')
// $objActSheet->setCellValue('F1', '연락처')
// $objActSheet->setCellValue('G1', '배송지 주소')
// $objActSheet->setCellValue('H1', '물류 송장 번호')



// $baseRow = 3; // 데이터를 N-1 줄에서 아래로 내보내기
// foreach ($list as $r => $d) {
// $i = $baseRow + $r;
// $objExcel->getActiveSheet()->setCellValue('A'. $i, $d['date']);
// $objExcel->getActiveSheet()->setCellValue('B'. $i, $d['num']);
// $objExcel->getActiveSheet()->setCellValue('C'. $i, $d['recharge']);
// $objExcel->getActiveSheet()->setCellValue('D'. $i, $d['rate']);
// $objExcel->getActiveSheet()->setCellValue('E'. $i, $d['invest_money']);
// $objExcel->getActiveSheet()->setCellValue('F'. $i, $d['refund_money']);
// $objExcel->getActiveSheet()->setCellValue('G'. $i, $d['money']);
// $objExcel->getActiveSheet()->setCellValue('H'. $i, $d['status']);
// }
$objWriter->save(_DIR_.'/a12.xlsx');

return ['data' => '', 'code' => 0, 'msg' => 'success'];
} catch (Throwable $e) {
return ['data' => '', 'code' => $e->getCode(), 'msg' => $e->getMessage()];
}


}


}

가져오기

/**
*임포트
* @param $url
* @param $adminId
* @return array
* @throws \think\exception\PDOException
* @date 2022-08-04 14:40
*/
public function import($url,$adminId)
{
try {
$this->startTrans( );
$filename = tempnam(sys_get_temp_dir(), "xlsx";
$handle = fopen($filename, "wb"),
fwrite($handle, file_get_contents($url))
$objReader = IOFactory::createReader('Xlsx');
$objPHPExcel = $objReader -> load($filename); //$filename은 업로드할 수 있는 테이블입니다.
$data = $objPHPExcel ->getSheet(0)->toArray( ); // sheet1 테이블의 데이터를 배열형 데이터로 변환
// $keys=array_shift($data); // 배열에서 첫 번째 데이터를 삭제하고 삭제된 데이터를 반환합니다.
$keys = ['order_number', 'good_title', 'sku', 'good_number', 'user_name', 'user_mobile', 'user_address', 'express_number'];
array_shift($data)
foreach ($data as $key => $value)
$list[] = array_combine($keys, $value);
foreach ($list as $k => $v) {
if (!empty($v['order_number']) {
$info = $this->where(['order_number' => $v['order_number'], 'partner_admin_id' => $adminId])->find(;
$info->express_number = $v['express_number''];
$info->send_status = 2;
$info->send_time = time();
$info->save();
}
}
$this->commit( );
return ['data' => '', 'code' => 0, 'msg' => 'success'];
} catch (Throwable $e) {
$this->rollback();
return ['data' => '', 'code' => $e->getCode(), 'msg' => $e->getMessage()];
}
}
반응형