卓象程序员 | 哈尔滨IT培训 | 品质教育,口碑传承 | 为做出口口相传,好口碑的教育品牌而奋斗!

卓象程序员让每一位学员高薪就业 联系我们13101507057

加微信,了解详情
您所在的位置:首页 > 文章 >卓象技术

「卓象程序员」电子表格 导入PhpSpreadsheet
时间: 2019-10-23 09:06:43     来源: 卓象IT实训基地【原创】



一、介绍

用纯 php 编写的库,它提供了一组类,允许您读取和写入不同的电子表格文件格式

支持格式

环境要求

php 5.6 及以上

php_zip 支持并启用

php_xml 支持并启用

php_gd2 支持并启用

安装

> composer require phpoffice/phpspreadsheet

hello world

<?php

require 'vendor/autoload.php';

use PhpOfficePhpSpreadsheetSpreadsheet;

use PhpOfficePhpSpreadsheetWriterXlsx;

$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

二、读取

无需关心文件类型加载,用到了 IOFactory

// 文件路径

$inputFileName = './sampleData/example1.xls';

$spreadsheet = PhpOfficePhpSpreadsheetIOFactory::load($inputFileName)

注意:

这不是加载文件的最有效方法, 并且它缺乏在将文件实际读入 Spreadsheet 对象之前以任何方式配置加载器的灵活性。

知道文件类型,可以自己决定使用哪种读取器

// 文件路径

$inputFileName = './sampleData/example1.xls';

/** 创建读取器  **/

$reader = new PhpOfficePhpSpreadsheetReaderXls();

//    $reader = new PhpOfficePhpSpreadsheetReaderXlsx();

//    $reader = new PhpOfficePhpSpreadsheetReaderXml();

//    $reader = new PhpOfficePhpSpreadsheetReaderOds();

//    $reader = new PhpOfficePhpSpreadsheetReaderSlk();

//    $reader = new PhpOfficePhpSpreadsheetReaderGnumeric();

//    $reader = new PhpOfficePhpSpreadsheetReaderCsv();

$spreadsheet = $reader->load($inputFileName)

当只要读取数据,不要格式时,实例读取器中 readDataOnly 属性,如下

$inputFileType = 'Xls';

$inputFileName = './sampleData/example1.xls';

$reader = PhpOfficePhpSpreadsheetIOFactory::createReader($inputFileType);

/**  只要数据  **/

$reader->setReadDataOnly(true);

$spreadsheet = $reader->load($inputFileName);

注意:csv 读取器没有这个属性

多个文件合并为一个对象

$inputFileType = 'Csv';

$inputFileNames = [

    './sampleData/example1.csv',

    './sampleData/example2.csv'

    './sampleData/example3.csv'

];

$reader = PhpOfficePhpSpreadsheetIOFactory::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 = PhpOfficePhpSpreadsheetIOFactory::load("new.xls");

$data = $spreadsheet

            ->getSheet(0) // 指定第一个工作表为当前

            ->toArray();  // 转为数组

// 或者得到全部工作表的数据数组          

$cells=array();

// 工作表对象有迭代器实现

foreach ( $spreadsheet->getWorksheetIterator() as $data ) {

    $cells = $data->toArray();

}

结语

PhpSpreadsheet 是非常不错的 php 的电子表格处理工具类,后续有时间在补上写入和导出。

每日分享技术干货~

报名卓象免费训练营课程

学习最新热门IT技术

找一份自己满意的高薪工作

15天免费学习!!

卓象程序员

★ 零基础,随时体验

★ 免费试听,满意后再报名

★ 小班授课,学习氛围浓厚

★ 口碑相传,80%学员来自口碑推荐

★ 教学严管,闯关式学习保障学习效果

★ 公司地点,哈尔滨市东直路123号7楼