php操作excel文件(PhpSpreadsheet读写Excel文件)

资讯 | 2022-12-31| 3

php操作excel文件?本文介绍PhpSpreadsheet读写excel文件的一些使用方法,我来为大家科普一下关于php操作excel文件?下面希望有你要的答案,我们一起来看看吧!

php操作excel文件(PhpSpreadsheet读写Excel文件)插图

php操作excel文件

本文介绍PhpSpreadsheet读写excel文件的一些使用方法。

简介

PhpSpreadsheet要求PHP 7.3及以上版本,是PHPExcel库的扩展版本,可用来读写xls、Xlsx、CSV、HTML等格式文件。

Format

Reading

Writing

Open Document Format/OASIS (.ods)

Office Open XML (.xlsx) Excel 2007 and above

BIFF 8 (.xls) Excel 97 and above

BIFF 5 (.xls) Excel 95

SpreadsheetML (.xml) Excel 2003

Gnumeric

HTML

SYLK

CSV

PDF (using either the TCPDF, Dompdf or mPDF libraries, which need to be installed separately)

PhpSpreadsheet安装方法可参考禅道二次开发(四):集成PhpSpreadsheet解析Excel文件

下面来介绍PhpSpreadsheet读写excel格式文件方法。

写入excel文件

以写入Xlsx格式文件为例,

<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; /* 写入excel */ $FileName = './test.xlsx'; $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', 'Hello World !'); $sheet->setCellValue('C3', '你好 !'); $writer = new Xlsx($spreadsheet); $writer->save($fileName); ?>

工作表默认样式

可以设置工作表默认样式,比如:

$spreadsheet->getDefaultStyle()->getFont()->setName('宋体'); // 字体 $spreadsheet->getDefaultStyle()->getFont()->setSize(8); // 字体大小 $spreadsheet->getDefaultStyle()->getAlignment()->setWrapText(true); // 自动换行 $spreadsheet->getDefaultStyle()->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); //垂直居中

一文读懂元数据管理以下文章来源于谈数据,作者石秀峰作者:石秀峰来源:谈数据,本文经授权转载发布数字化时代,企业需要知道他们拥有什么数据,数据在哪里、由谁负责,数据中的值意味着什么,数据的生命周期是什么,哪些数据安全性和。

单元格样式

use PhpOffice\PhpSpreadsheet\Style\Alignment; $spreadsheet->getActiveSheet()->getStyle('A1:D4')->getAlignment()->setWrapText(true); // 自动换行 $caseSpreadsheet->getActiveSheet()->getStyle('A1:D4')->getAlignment()->setVertical(Alignment::VERTICAL_CENTER); //垂直居中

单元格对齐方式包括水平对齐和垂直对齐:

// 水平对齐样式 HORIZONTAL_GENERA HORIZONTAL_LEFT HORIZONTAL_RIGHT HORIZONTAL_CENTER HORIZONTAL_CENTER_CONTINUOUS HORIZONTAL_JUSTIFY HORIZONTAL_FILL HORIZONTAL_DISTRIBUTED // Excel2007 only // 垂直对齐样式 VERTICAL_BOTTOM VERTICAL_TOP VERTICAL_CENTER VERTICAL_JUSTIFY VERTICAL_DISTRIBUTED // Excel2007 only

除了设置单元格的字体,还可以设置边框,填充颜色等样式信息。

比如设置单元格背景颜色:

$spreadsheet->getActiveSheet()->getStyle('E2')->getFill() ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) ->getStartColor()->setARGB('FFFF0000'); // 多个单元格,如果设置多个单元格推荐此方法,性能更优。 $spreadsheet->getActiveSheet()->getStyle('B3:B7')->getFill() ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) ->getStartColor()->setARGB('FFFF0000');

注意:颜色代码为ARGB,带了Alpha通道。

设置单元格高度,某一行高度:

$spreadsheet->getActiveSheet()->getRowDimension('10')->setRowHeight(100); $spreadsheet->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15); // 默认行高

设置某列:

// 设置列宽 $spreadsheet->getActiveSheet() ->getColumnDimension('A') ->setWidth(30); // 自动列宽 $spreadsheet->getActiveSheet() ->getColumnDimension('A') ->setAutoSize(true); // 默认列宽 $spreadsheet->getActiveSheet() ->getDefaultColumnDimension() ->setWidth(12);

单元格数据类型

use PhpOffice\PhpSpreadsheet\Cell\DataType; $spreadsheet->getActiveSheet()->setCellValueExplicit("A1", "123", DataType::TYPE_STRING); /* TYPE_STRING2 TYPE_STRING TYPE_FORMULA TYPE_NUMERIC TYPE_BOO TYPE_NULL TYPE_INLINE TYPE_ERROR */

数字添加引号前缀:

$spreadsheet->getActiveSheet()->setCellValueExplicit("A1", "123", DataType::TYPE_STRING); $spreadsheet->getActiveSheet()->getStyle("A1")->setQuotePrefix(true); // $spreadsheet->getActiveSheet()->getStyle("A1")->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_TEXT);

设置数据有效性:

use PhpOffice\PhpSpreadsheet\Cell\DataValidation; $objValidation = $spreadsheet->getActiveSheet()->getCell('C1')->getDataValidation(); // 设置数据有效性的单元格 $objValidation -> setType(DataValidation::TYPE_LIST) -> setErrorStyle(DataValidation::STYLE_INFORMATION) -> setAllowBlank(false) -> setShowInputMessage(true) -> setShowErrorMessage(true) -> setShowDropDown(true) -> setErrorTitle('错误提示') -> setError('您输入的值有误') -> setPromptTitle('结果') -> setFormula1('"成功,失败"');

冻结单元格

$sheet = $spreadsheet->getActiveSheet(); $sheet->freezePane('A2'); // 冻结第一行 $sheet->freezePane('B1'); // 冻结第一列 $sheet->freezePane('B3'); // 冻结B3单元格

单元格条件格式

可以设置单元格的条件格式,可以对满足某个条件的单元格设置样式,比如设置大于80的单元格:

$conditional = new \PhpOffice\PhpSpreadsheet\Style\Conditional(); $conditional->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_CELLIS); $conditional->setOperatorType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_GREATERTHAN); $conditional->addCondition(80); $conditional->getStyle()->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_DARKGREEN); $conditional->getStyle()->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID); $conditional->getStyle()->getFill()->getStartColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_GREEN); $conditionalStyles = $spreadsheet->getActiveSheet()->getStyle('A1:A10')->getConditionalStyles(); $conditionalStyles[] = $conditional; $spreadsheet->getActiveSheet()->getStyle('A1:A10')->setConditionalStyles($conditionalStyles);

可以使用的条件及操作符:

// Condition types CONDITION_NONE CONDITION_CELLIS CONDITION_CONTAINSTEXT CONDITION_EXPRESSION CONDITION_CONTAINSBLANKS CONDITION_NOTCONTAINSBLANKS CONDITION_DATABAR CONDITION_NOTCONTAINSTEXT // Operator types OPERATOR_NONE OPERATOR_BEGINSWITH OPERATOR_ENDSWITH OPERATOR_EQUA OPERATOR_GREATERTHAN OPERATOR_GREATERTHANOREQUAL OPERATOR_LESSTHAN OPERATOR_LESSTHANOREQUAL OPERATOR_NOTEQUAL OPERATOR_CONTAINSTEXT OPERATOR_NOTCONTAINS OPERATOR_BETWEEN OPERATOR_NOTBETWEEN

写入图片

将图片写入某个单元格中:

$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); $drawing->setName('Logo'); $drawing->setDescription('Logo'); $drawing->setPath($diagramPath); $drawing->setHeight(120); $drawing->setCoordinates("D2"); $drawing->setOffsetX(0); $drawing->setRotation(0); $drawing->getShadow()->setVisible(true); $drawing->getShadow()->setDirection(0); $drawing->setWorksheet($spreadsheet->getActiveSheet());

读取excel文件

下面介绍读取excel文件方法。

读取文本数据

<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; /* 读取excel */ // $reader = new Xlsx(); // $spreadsheet = $reader->load($fileName); $reader = IOFactory::createReader('Xlsx'); $spreadsheet = $reader->load($fileName); // $reader->setReadDataOnly(true); // 设置后无法获取excel中的图片 $worksheet = $spreadsheet->getActiveSheet(); // $worksheet = $spreadsheet->getSheetByName('testcase'); // $rawCasedata = $worksheet->toArray(); $highestRow = $worksheet->getHighestRow(); // 取得总行数 $highestColumn = $worksheet->getHighestColumn(); // 取得总列数 $highestColumnIndex = Coordinate::columnIndexFromString($highestColumn); // 取得总列数 $excelData = []; for ($row = 1; $row <= $highestRow; $row ) { for ($col = 1; $col <= $highestColumnIndex; $col ) { $excelData[$row][] = (string)$worksheet->getCellByColumnAndRow($col, $row)->getValue(); } } echo "<pre>"; print_r($excelData); echo "</pre>"; ?>

结果:

Array ( [1] => Array ( [0] => Hello World ! [1] => [2] => ) [2] => Array ( [0] => [1] => [2] => ) [3] => Array ( [0] => [1] => [2] => 你好 ! ) )

读取图片

读取Excel文件中的图片,支持png、gif和jpg格式图片:

<?php require 'vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Cell\Coordinate; $fileName = './test.xlsx'; $reader = IOFactory::createReader('Xlsx'); $spreadsheet = $reader->load($fileName); $worksheet = $spreadsheet->getActiveSheet(); /* 读取excel中的图片 */ $imgpath = './'; $imgArray = array(); foreach ($worksheet->getDrawingCollection() as $drawing) { list($startColumn, $startRow) = Coordinate::coordinateFromString($drawing->getCoordinates()); print_r($startColumn); print_r($startRow); switch ($drawing->getExtension()) { case 'jpeg': $source = imagecreatefromjpeg($drawing->getPath()); $imgname = $imgpath . $drawing->getCoordinates() . '.jpg'; imagejpeg($source, $imgname); break; case 'png': $source = imagecreatefrompng($drawing->getPath()); $imgname = $imgpath . $drawing->getCoordinates() . '.png'; imagepng($source, $imgname); break; default: echo "Unsupported file type: " . $drawing->getExtension() . "\n";; } }

下载文件

在服务器上创建了excel文件后,可以将它下载到客户端。

// redirect output to client browser header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header("Content-Disposition: attachment;filename=$downloadFileName"); header('Cache-Control: max-age=0'); $writer = new PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet); $writer->save('php://output');

当然也可以下载已经生成的xlsx格式文件:

$FileName = basename($FilePath); header("Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); header("Content-Disposition: attachment; filename=$FileName"); header("Content-length: " . filesize($FilePath)); header("Pragma: no-cache"); header("Expires: 0"); readfile("$FilePath");

xls格式文件类型为:application/vnd.ms-excel 。

这里就介绍这么多了,PhpSpreadsheet的更多使用方法可参考官方文档:https://phpspreadsheet.readthedocs.io/en/latest/。

--THE END--

说人坏话只能说明自己也同样抱有小气的本性。——太宰治《人间失格》

,

如何破解60岁以上老年人患老年痴呆中国小康网8月24日讯老马一项新的研究表明,老年人坐着看电视的时间可能会增加风险,这是影响痴呆风险的久坐活动类型,但用笔记本电脑蜷缩在沙发上可能会降低风险老年人在沙发上玩电脑有好处美国合众国际社UPI。

相关推荐

品茗软件总结(品茗软件最新版本)

品茗软件总结(品茗软件最新版本)

品茗软件最新版本品茗软件品茗部分软件已更新至V2018版,请及时更新:V2018资料软件资料软件广东版:V5.3-2018(2016版统表)资料软件广东版:V4.3(2015-10-10更新-2010版统表)新国标资。

资讯 1 2023-01-24
海尔冷冻能力(热泵还在选美系)

海尔冷冻能力(热泵还在选美系)

热泵还在选美系因为较早进入中国市场,美系等外资品牌在水机中央空调领域积累下了良好用户口碑然而随着国内空调品牌的崛起,市场竞争越发激烈,如今用户的选择有什么变化呢?5月16日,2021年中国空气源热泵行业报告发布在限。

资讯 1 2023-01-24
送给甜甜的你(我送你这个)

送给甜甜的你(我送你这个)

我送你这个如果要为2016选择一个年度词汇,我赞同咪蒙所说,是:穷!穷,是今年的最大感受!在任何一个场合,大家都在谈钱,谈房价,谈收入,谈股市,谈创业,谈外快…不断涨涨涨涨涨的房价,完全瓦解了人们最基本的安全感。

资讯 1 2023-01-24
我国目前外汇储备的种类(我国首次披露外汇储备币种结构等数据)

我国目前外汇储备的种类(我国首次披露外汇储备币种结构等数据)

我国首次披露外汇储备币种结构等数据国家外汇管理局7月28日公布《国家外汇管理局年报(2018)》,首次披露了外汇储备经营业绩、货币结构等数据TheStateAdministrationofForeignExchange,China's。

资讯 1 2023-01-24
街边手机镀膜有用吗(街边摊手机镀膜)

街边手机镀膜有用吗(街边摊手机镀膜)

街边摊手机镀膜8月14日,营山论坛一名网友发表题为《手机镀膜是假的,提醒大家不要上当了》的贴文,讲述了自己最近的一段遭遇网友提到:“今天在芙蓉大道跟白塔公园交汇桥边,看见手机镀膜,花费30,感觉被骗了就是用湿巾纸给。

资讯 1 2023-01-24
手机为什么不能做纳米镀膜(手机纳米镀膜是真的吗)

手机为什么不能做纳米镀膜(手机纳米镀膜是真的吗)

手机纳米镀膜是真的吗手机纳米镀膜这个行业目前还处于萌芽期,很多摸不清头脑的朋友看到了网上用刀子划,用锤子砸等实验让一些加盟者们感觉我可看到了商机了,这么牛的一款产品我可算是遇到了,于是很兴奋的加盟购买了一套产品,结果购买。

资讯 1 2023-01-24
数据结构中null怎么定义(数据清洗中的深坑)

数据结构中null怎么定义(数据清洗中的深坑)

数据清洗中的深坑上一篇文章,老海分享了关于Pyhon类和对象的白话理解本篇我想分享一下空值:None、NULL与空字符:“”的区别和联系具体的实验环境为Python3.7、mysql8.0、Excel2016为什么需。

资讯 0 2023-01-24
格兰仕盈利分析(复盘科技格兰仕)

格兰仕盈利分析(复盘科技格兰仕)

复盘科技格兰仕2021年,科技企业承压前行:疫情依然在全球肆虐,原材料价格进入上涨周期,全球经济形势复杂严峻……双循环发展格局下,中国科技企业需要有大作为、大担当、新突破在别人抬不起头时,方显出英雄本色2021年,。

资讯 1 2023-01-24
基坑支护锚固长度计算公式(什么是岩土锚固)

基坑支护锚固长度计算公式(什么是岩土锚固)

什么是岩土锚固岩土锚杆将会被设置在地层的一定深度,一端连接建筑结构,另一端则被有效锚固,从而起到承受结构拉力,维持结构稳定的目的通过岩土锚固技术的应用,可以使岩土更加稳固,大幅降低结构物的自重,既有利于工程材料的节。

资讯 0 2023-01-24
十款低配置高自由度的电脑游戏(这是电脑必备的8款独立游戏)

十款低配置高自由度的电脑游戏(这是电脑必备的8款独立游戏)

这是电脑必备的8款独立游戏经常玩游戏的人一定要在电脑上玩经常玩的游戏相信这次8种游戏会有很多人感兴趣虽然不是目前最受欢迎的游戏,但优化最好,运行相对稳定1、《使命召唤:高级战争》《使命召唤:高级战争》是《使命召唤》系列的正统第。

资讯 0 2023-01-24
目前手机性价比比较好的手机(最具性价比的手机排行2022年高性价比手机排行)

目前手机性价比比较好的手机(最具性价比的手机排行2022年高性价比手机排行)

最具性价比的手机排行2022年高性价比手机排行有着非常出色的性能配置的5G手机机型,对很多朋友们来说,在这个价位可以有多款机型选择,小编为大家推荐下四五千元价位可以入手的5G手机,相信会是朋友们喜欢的,感兴趣的朋友们一起来看看吧1、小米11骁龙8。

资讯 1 2023-01-24
郭德纲个人资料及老婆(郭德纲妻子晒近况)

郭德纲个人资料及老婆(郭德纲妻子晒近况)

郭德纲妻子晒近况近日,郭德纲妻子王惠在社交平台上分享了一组照片,照片中的王惠身穿黑色旗袍,显得身材十分圆润丰腴,并且王惠还一改之前厚重的刘海发型,将刘海都梳了上去,又化着妆容精致,再搭配着价值不菲的衣服,整体打扮特别。

资讯 1 2023-01-24