關於 PhpSpreadsheet 簡單教學

藏色散人
發布: 2023-04-07 15:02:01
轉載
15781 人瀏覽過

今天遇到一個問題,涉及 php 與 excel 之間資料轉換。之前一直用 PHPExcel,他們的開發組不更新了。但是找到了 PhpSpreadsheet

一、介紹

用純php 編寫的函式庫,它提供了一組類,允許您讀取和寫入不同的電子表格檔案格式

支援格式

關於 PhpSpreadsheet 簡單教學

環境需求

php 5.6 以上

php_zip 支援並啟用

php_xml 支援並啟用

php_gd2 支援並啟用

安裝

> composer require phpoffice/phpspreadsheet
登入後複製

#hello world

<?php
require &#39;vendor/autoload.php&#39;;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue(&#39;A1&#39;, &#39;Hello World !&#39;);
$writer = new Xlsx($spreadsheet);
$writer->save(&#39;hello world.xlsx&#39;);
登入後複製

實例

套件中帶了實例程式碼,位置vendor/phpoffice/phpspreadsheet/samples 下

> php -S localhost:8000 -t vendor/phpoffice/phpspreadsheet/samples
登入後複製

二、讀取

無需關心文件類型加載,用到了IOFactory

// 文件路径
$inputFileName = &#39;./sampleData/example1.xls&#39;;
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
登入後複製

注意:

這不是加載文件的最有效方法, 並且它缺乏在將檔案實際讀入Spreadsheet 物件之前以任何方式配置載入器的靈活性。

知道檔案類型,可以自行決定使用哪種讀取器

// 文件路径
$inputFileName = &#39;./sampleData/example1.xls&#39;;
/** 创建读取器  **/
$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 = &#39;Xls&#39;;
$inputFileName = &#39;./sampleData/example1.xls&#39;;
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
/**  只要数据  **/
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load($inputFileName);
登入後複製

注意:csv 讀取器沒有這個屬性

多個檔案合併為一個物件

$inputFileType = &#39;Csv&#39;;
$inputFileNames = [
    &#39;./sampleData/example1.csv&#39;,
    &#39;./sampleData/example2.csv&#39;
    &#39;./sampleData/example3.csv&#39;
];
$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 工作表對象,這個對象存放著所以工作表集合的信息(資料資訊與格式資訊、工作表資訊等)

$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中文網其他相關文章!

相關標籤:
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板