오늘 PHP와 Excel 간의 데이터 변환과 관련된 문제가 발생했습니다. 이전에 PHPExcel을 사용해 왔지만 개발팀에서 더 이상 업데이트하지 않습니다. 그런데 PhpSpreadsheet 를 발견했습니다.
1. 소개
다양한 스프레드시트 파일 형식을 읽고 쓸 수 있는 클래스 세트를 제공하는 순수 PHP로 작성된 라이브러리
지원 형식
환경 요구 사항
php 5.6 이상
php_zip 지원 및 활성화
php_xml 지원 및 활성화
php_gd2 지원 및 활성화
installation
> composer require phpoffice/phpspreadsheet
hello world
<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', 'Hello World !'); $writer = new Xlsx($spreadsheet); $writer->save('hello world.xlsx');
예제
패키지에 포함된 예제 코드, Vendor/phpoffice/phpspreadsheet/samples
> php -S localhost:8000 -t vendor/phpoffice/phpspreadsheet/samples
에 있습니다. 2. 파일 형식 로드에 대해 걱정하지 않고
을 읽으세요. IOFactory가 사용됩니다.
// 文件路径 $inputFileName = './sampleData/example1.xls'; $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
참고:
이것은 파일을 로드하는 가장 효율적인 방법이 아닙니다. 실제로 파일을 스프레드시트 개체로 읽기 전에 어떤 방식으로든 로더를 구성할 수 있는 유연성이 부족합니다.
파일 형식을 알면 어떤 리더를 사용할지 결정할 수 있습니다
// 文件路径 $inputFileName = './sampleData/example1.xls'; /** 创建读取器 **/ $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xml(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Slk(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Gnumeric(); // $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv(); $spreadsheet = $reader->load($inputFileName);
서식을 지정하지 않고 데이터만 읽어야 하는 경우 인스턴스 리더의 readDataOnly 속성은 다음과 같습니다
$inputFileType = 'Xls'; $inputFileName = './sampleData/example1.xls'; $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType); /** 只要数据 **/ $reader->setReadDataOnly(true); $spreadsheet = $reader->load($inputFileName);
참고: csv 리더에는 이 속성이 없습니다. 속성
여러 파일이 하나의 개체로 병합됨
$inputFileType = 'Csv'; $inputFileNames = [ './sampleData/example1.csv', './sampleData/example2.csv' './sampleData/example3.csv' ]; $reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType); /** 拿到第一个 **/ $inputFileName = array_shift($inputFileNames); $spreadsheet = $reader->load($inputFileName); $spreadsheet->getActiveSheet() ->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME)); /** 循环读取 **/ foreach($inputFileNames as $sheet => $inputFileName) { /** 重新设置工作表索引 **/ $reader->setSheetIndex($sheet+1); /** 把文件当做一个新的工作表载入 **/ $reader->loadIntoExisting($inputFileName,$spreadsheet); /** 设置工作表标题 **/ $spreadsheet->getActiveSheet() ->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME)); }
참고: 여러 워크시트에 동일한 워크시트 색인을 사용하면 파일이 동일한 워크시트에 추가되지 않지만 이전에 로드된 결과를 덮어쓰게 됩니다. 동일한 워크시트에 여러 CSV 파일을 로드할 수 없습니다.
배열로 변환
파일은 마침내 스프레드시트 워크시트 개체라고 하는 개체에 로드됩니다. 이 개체는 모든 워크시트 컬렉션에 대한 정보(데이터 정보, 형식 정보, 워크시트 정보 등)를 저장합니다.
$spreadsheet = PhpOffice\PhpSpreadsheet\IOFactory::load("new.xls"); $data = $spreadsheet ->getSheet(0) // 指定第一个工作表为当前 ->toArray(); // 转为数组 // 或者得到全部工作表的数据数组 $cells=array(); // 工作表对象有迭代器实现 foreach ( $spreadsheet->getWorksheetIterator() as $data ) { $cells = $data->toArray(); }
결론
PhpSpreadsheet는 아주 좋은 PHP 스프레드시트 처리 도구 클래스입니다. 나중에 시간이 나면 쓰기 및 내보내기를 추가하겠습니다. PHP 관련 지식을 더 보려면PHP 중국어 웹사이트를 방문하세요!
위 내용은 PhpSpreadsheet에 대한 간단한 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!