


Comment utiliser PhpSpreadsheet en php pour lire des fichiers Excel et CSV (avec exemples)
Le contenu de cet article explique comment utiliser PhpSpreadsheet en php pour lire des fichiers Excel et CSV (avec des exemples). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. aidé.
Il existe de nombreuses bibliothèques permettant à PHP de lire les fichiers Excel et csv, mais les plus couramment utilisées sont : PHPOffice/PHPExcel, PHPOffice/PhpSpreadsheet. Désormais, PHPExcel n'est plus maintenu. 1 La première soumission a eu lieu le 25 décembre 2017. Il est recommandé d'utiliser PhpSpreadsheet directement, et les deux projets sont maintenus par la même organisation. Cet article présente l'utilisation de PhpSpreadsheet.
Présentation de PhpSpreadsheet
La bibliothèque PhpSpreadsheet est écrite en PHP pur, fournit une classe et une méthode très riches et prend en charge de nombreux formats de fichiers :
Exigences environnementales
PHP >= 5.6
Activer
php_zip
ExtensionActiver
php_xml
ExtensionActiver
php_gd2
Extension
Commencez
Nous écrivons une démo simple pour apprendre à utiliser PhpSpreadsheet. Il s'agit probablement d'une simple page de téléchargement de fichier, téléchargez le fichier Excel que nous voulons lire et. PHP le reçoit Allez dans le fichier et appelez PhpSpreadsheet pour lire le contenu dans Excel.
0. Configurez l'environnement
légèrement..., configurez-le vous-même
Ma version actuelle de PHP est 7.2.13
Créer un nouveau projet
mkdir demo cd demo
composer require phpoffice/phpspreadsheet
composer require phpoffice/phpspreadsheet:develop
vim index.html
dans le formulaire doit êtreCeci est juste une simple démo, un formulaire suffit. Après exécution, cela ressemblera à. ceci :)enctype
multipart/form-data
format, utilisez xlsx
, <.>, utilisez PhpOfficePhpSpreadsheetReaderXlsx()
À première vue, tant de classes semblent un peu compliquées. En fait, ces classes implémentent toutes les interfaces csv
et PhpOfficePhpSpreadsheetReaderCsv()
, spécifiant le type de fichier à charger. Nous pouvons utiliser directement la classe d'usine PhpOfficePhpSpreadsheetReaderIReader
: PhpOfficePhpSpreadsheetWriterIWriter
PhpOfficePhpSpreadsheetIOFactory
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('demo.xlsx');
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile("demo.xlsx"); $reader->setReadDataOnly(true); $reader->load("demo.xlsx");
IOFactory
abstract class IOFactory { private static $readers = [ 'Xlsx' => Reader\Xlsx::class, 'Xls' => Reader\Xls::class, 'Xml' => Reader\Xml::class, 'Ods' => Reader\Ods::class, 'Slk' => Reader\Slk::class, 'Gnumeric' => Reader\Gnumeric::class, 'Html' => Reader\Html::class, 'Csv' => Reader\Csv::class, ]; private static $writers = [ 'Xls' => Writer\Xls::class, 'Xlsx' => Writer\Xlsx::class, 'Ods' => Writer\Ods::class, 'Csv' => Writer\Csv::class, 'Html' => Writer\Html::class, 'Tcpdf' => Writer\Pdf\Tcpdf::class, 'Dompdf' => Writer\Pdf\Dompdf::class, 'Mpdf' => Writer\Pdf\Mpdf::class, ]; ...
Dans l'usine
, vous pouvez également spécifier le type de fichier pour la lecture et l'écriture, et renvoyer le lecteur correspondant, ce qui élimine le besoin d'identifier le type de fichier, comme suit :IOFactory
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx"); // 指定为xlsx格式 $spreadsheet = $reader->load("demo.xlsx");
Tout d'abord, jetons un coup d'œil à la classe d'usine
Lorsque nous ne spécifions pas le type de lecteur, nous le faisons directement. le code est une opération pour identifier le format : IOFactory
load
// 源码解析 // 不指定reader,直接获取上传的文件创建 $reader = \PhpOffice\PhpSpreadsheet\IOFactory::load($_FILES['file']['tmp_name']); // IOFactory::load() public static function load($pFilename) { // 这步棋室就是创建reader,免去了你手动创建 $reader = self::createReaderForFile($pFilename); return $reader->load($pFilename); } // IOFactory::createReaderForFile() // 这步就是返回一个reader,具体返回什么reader,是根据文件名来的 public static function createReaderForFile($filename) { // 判断文件是否存在并且可读,会抛出InvalidArgumentException File::assertFile($filename); // 根据文件后缀猜测类型 $guessedReader = self::getReaderTypeFromExtension($filename); if ($guessedReader !== null) { $reader = self::createReader($guessedReader); // Let's see if we are lucky if (isset($reader) && $reader->canRead($filename)) { return $reader; } } // 如果没有检测到类型,就会遍历默认的reader数组,直到找到可以使用的那个reader foreach (self::$readers as $type => $class) { if ($type !== $guessedReader) { $reader = self::createReader($type); if ($reader->canRead($filename)) { return $reader; } } } throw new Reader\Exception('Unable to identify a reader for this file'); }
// 指定reader $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx(); $spreadsheet = $reader->load($_FILES['file']['tmp_name']);
5. 读取Excel文件内容
让我们接着继续上面的index.html,我们需要编写一个PHP文件来处理请求:
require 'vendor/autoload.php'; $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx(); try { $spreadsheet = $reader->load($_FILES['file']['tmp_name']); } catch (\PhpOffice\PhpSpreadsheet\Reader\Exception $e) { die($e->getMessage()); } $sheet = $spreadsheet->getActiveSheet(); $res = array(); foreach ($sheet->getRowIterator(2) as $row) { $tmp = array(); foreach ($row->getCellIterator() as $cell) { $tmp[] = $cell->getFormattedValue(); } $res[$row->getRowIndex()] = $tmp; } echo json_encode($res);
我们先引入autoload
,接着创建了一个Xlsx
的reader,然后load我们上传的文件,因为在excel中,内容都是按sheet区分的,每一个sheet中都由行和列组成,我们获取到当前使用的sheet,通过sheet获取到行的迭代对象,再针对每一行得到每一列对象,在PhpSpreadsheet中,cell是一个最小的单元,对应着第几行第几列,数据都是存在cell中,得到cell对象我们就能获取到数据。
当我们上传如下内容后:
返回结果如下:
因为我们在读取时,是从第二行开始的,所以第一行的内容就不显示了。
这里说一下,在Excel中第三列是一个时间,PhpSpreadsheet对时间的处理有点特殊。在PhpSpreadsheet中date和time在存储时都是作为数字类型,当要区分数字是时间格式时,需要用到format mask
,默认情况下,format mask
是开启了的,但如果设置setReadDataOnly
等于true
的话,就不能使用format mask
,从而就区分不了数字和时间格式,PhpSpreatsheet将会全部作为数字处理。
此时,我们开启只读模式看一下,
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx(); $reader->setReadDataOnly(true);
输出结果如下:
第三列就变成了奇怪的数字,当初这个问题还困扰了我半天。
5. PhpSpreadsheet读取文件时的一些常用方法
如果一个Excel中有多个sheet,只想操作其中的某几个sheet,可以设置
setLoadSheetsOnly
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx(); // 参数支持字符串或一个数组 $reader->setLoadSheetsOnly(['sheet1','sheet3']);
读取指定行和列的数据
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter { public function readCell($column, $row, $worksheetName = '') { // 只读取A1:E7的数据 if ($row >= 1 && $row setReadFilter($filterSubset); $spreadsheet = $reader->load('demo.xlsx');
上面的例子不够通用,可以修改下使之更为通用:
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter { private $startRow = 0; private $endRow = 0; private $columns = []; public function __construct($startRow, $endRow, $columns) { $this->startRow = $startRow; $this->endRow = $endRow; $this->columns = $columns; } public function readCell($column, $row, $worksheetName = '') { if ($row >= $this->startRow && $row endRow) { if (in_array($column,$this->columns)) { return true; } } return false; } } $myFilter = new MyReadFilter(9,15,['A', 'B', 'D']);
列出Excel中所有sheet的名字
$reader->listWorksheetNames('demo.xlsx');
列出一个sheet的信息,包括多少列、多少行
$reader->listWorksheetInfo('demo.xlsx');
PhpSpreadsheet的学习与使用就到这,真的很强大,几乎满足了日常的所有需求,是读取Excel、CSV文件的利器。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Travailler avec la base de données dans CakePHP est très simple. Nous comprendrons les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) dans ce chapitre.

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie
