PhpSpreadsheet的使用(一)

一、安装

1、修改php.ini配置文件,开启fileinfo扩展:
在这里插入图片描述
2、使用composer安装:

composer require phpoffice/phpspreadsheet

二、引入加载文件

<?php 
/* phpspreadsheet版本1.8.2 */
require_once './vendor/autoload.php';       
use PhpOffice\PhpSpreadsheet\Spreadsheet;
$spreadsheet = new Spreadsheet();
$worksheet = $spreadsheet->getActiveSheet();   //处理单元格属性必须先调用此方法

三、常用方法

1、单元格赋值:

1.1、setCellValue($pCoordinate, $pValue) 通过坐标设置单元格值:

$spreadsheet->getActiveSheet()->setCellValue('A1', 'PhpSpreadsheet');

1.2、setValue( $pValue) :

/*该方法需先检索单元格对象*/
$spreadsheet->getActiveSheet()->getCell('B8')->setValue('Some value');

1.3、fromArray($array, $nullValue = null, $startCell = ‘A1’, $strictNullComparison = false) 通过数组赋值:
说明:如果传递二维数组,则将其视为一系列行和列;如果传递一维数组一维数组将被视为一行;如果一维数组需要作为列编写,则使用array_chunk()对数组进行处理,如下所示:

/*二维数组*/
$arrayData = [
    [NULL, 2010, 2011, 2012],
    ['Q1',   12,   15,   21],
    ['Q2',   56,   73,   86],
    ['Q3',   52,   61,   69],
    ['Q4',   30,   32,    0],
];
$spreadsheet->getActiveSheet()->fromArray( $arrayData,NULL,'C3' );

在这里插入图片描述

/*一维数组*/
$rowArray = ['Value1', 'Value2', 'Value3', 'Value4'];
$spreadsheet->getActiveSheet()->fromArray($rowArray, NULL,'C3');

在这里插入图片描述

/*一维数组列编写*/
$rowArray = ['Value1', 'Value2', 'Value3', 'Value4'];
$columnArray = array_chunk($rowArray, 1);
$spreadsheet->getActiveSheet()->fromArray($columnArray,NULL,'C3');

在这里插入图片描述
1.4、setCellValueByColumnAndRow($columnIndex, $row, $value) 按列和行赋值:

$spreadsheet->getActiveSheet()->setCellValueByColumnAndRow(1, 5, 'PhpSpreadsheet');

2、日期和时间:

/*方法一*/
$time = time();
$spreadsheet->getActiveSheet()->setCellValue('D1',\PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($time));
$spreadsheet->getActiveSheet()->getStyle('D1')->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);

/*方法二*/
$spreadsheet->getActiveSheet()->setCellValue('D1', 39813);   //从1900/01/01到现在的天数
$spreadsheet->getActiveSheet()->getStyle('D1')->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDDSLASH);

NumberFormat预定义日期格式说明:
在这里插入图片描述
3、获取单元格值:

3.1、通过坐标:
首先使用getCell()方法从工作表中检索该单元格,然后使用getValue()方法读取单元格的值。

$cellValue = $spreadsheet->getActiveSheet()->getCell('A1')->getValue();

3.2、通过行和列:
首先使用getCellByColumnAndRow()方法从工作表中检索该单元格,然后使用getValue()方法读取单元格的值。

$cellValue = $spreadsheet->getActiveSheet()->getCellByColumnAndRow(1, 4)->getCalculatedValue();

4、列宽:

将D列宽度设置为12(字符)

$spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(12);

自动计算列宽:

$spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);

设置默认列宽:

$spreadsheet->getActiveSheet()->getDefaultColumnDimension()->setWidth(20);

5、行高:

设置第一行行高为100pt:

$spreadsheet->getActiveSheet()->getRowDimension('1')->setRowHeight(100);

设置默认行高:

$spreadsheet->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15);

三、读取文件

3.1、知道文件类型:

方法一:
实例化该文件类型的阅读器对象,然后使用阅读器的load()方法将文件读取为Spreadsheet对象。但是,如果文件类型不正确(例如,扩展名为.xls的CSV文件),则可能会得到无法预测的结果。

$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);

方法二:

使用IOFactory的createReader()方法为您实例化阅读器对象

$inputFileType = 'Xls';
//    $inputFileType = 'Xlsx';
//    $inputFileType = 'Xml';
//    $inputFileType = 'Ods';
//    $inputFileType = 'Slk';
//    $inputFileType = 'Gnumeric';
//    $inputFileType = 'Csv';
$inputFileName = './sampleData/example1.xls';

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);

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

3.2、不知道文件类型:

方法一:
使用自动文件类型解析模式(自动类型解析模式比显式模式稍慢):

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("05featuredemo.xlsx");

方法二:
先使用IOFactory::identify() 在使用该createReader()方法实例化Reader对象。

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

$inputFileType = \PhpOffice\PhpSpreadsheet\IOFactory::identify($inputFileName);

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);

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

3.3、设置文件只读:

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

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);

$reader->setReadDataOnly(true);

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

3.4、工作表:

当您从电子表格文件加载工作簿时,它将与所有现有工作表一起加载(除非您指定仅应加载某些工作表)

方法一、通过索引位置访问工作表:

$countSheet = $spreadsheet -> getSheetCount();    //获取工作表数量
for ($i = 0; $i < $countSheet; $i++)
{
    $currentSheet = $spreadsheet -> getSheet($i);   //获取工作表内容
    $dataArray[$i] = $currentSheet -> toArray();       //转换为数组
    
    print_r($dataArray[$i]);
}

方法二、通过名称访问工作表:

$dataArray    = [];
$currentSheet = $spreadsheet->getSheetByName('Sheet1');
$dataArray    = $currentSheet->toArray();
var_dump($dataArray);

3.5、获取工作表行/列数:

$sheet = $spreadsheet->getSheet($whatTable); // 读取工作表
$highest_row = $sheet->getHighestRow(); // 取得总行数
$highest_column = $sheet->getHighestColumn(); ///取得列数 
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值