首页 > Web开发 > 详细

php 的 PHPExcel1.8.0 使用

时间:2020-05-06 10:31:19      阅读:74      评论:0      收藏:0      [点我收藏+]

PHPExcel是用来操作Office Excel文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的Excel表格。

注意:

PHPExcel 已经停止维护了,我现在做的是老项目,老项目php版本较低,而且对性能没太大的要求所以才会使用PHPExcel,如果是新项目最好是用PhpSpreadsheet

下载PHPExcel

https://github.com/PHPOffice/PHPExcel

PHPExcel1.8.0 的目录结构

下载下来目录如下图,我们只需要关注下面几个:

技术分享图片

Classes : 主要类文件,我们主要是使用这个文件夹

Docmentation : 文档

Examples : 例子

composer.json : 主要的配置文件

使用PHPExcel的要求

打开composer.json 可以看到所需要的的环境要求

技术分享图片

必须:
1.PHP版本高于5.2.0
2.mbstring扩展
3.xml扩展
4.xmlwriter扩展
推荐要有:
1.zip扩展
2.gd扩展

满足php版本高于5.2并且安装了5个扩展后,将classes里的文件拷贝一份放入创建的phpexcel文件夹中,开始使用。

PHPExcel基本使用

excel 文件的创建和保存

<?php
//引入PHPExcel文件
require ‘./Classes/PHPExcel.php‘;

//1.文件的创建
//创建PHPExcel对象
$obj = new PHPExcel();

//写入excel操作
//使用工厂的方式创建excel写入对象
//第二个参数可以写‘excel2007‘或者 ‘‘Excel5‘‘
// $writer = PHPExcel_IOFactory::createWriter($obj, ‘Excel5‘);
$writer = PHPExcel_IOFactory::createWriter($obj, ‘excel2007‘);
//或如下方式
$writer = new PHPExcel_Writer_Excel5($obj);


//2.文件的保存
//可以保存文件到本地
$writer->save(‘1.xls‘);
//文件名乱码的解决
$filename = iconv(‘utf-8‘, ‘gbk‘, ‘中文.xls‘);
$writer->save($filename);

//也可以浏览器输出
header(‘Content-Type: application/vnd.ms-execl‘);
header(‘Content-Disposition: attachment;filename="文件名.xls"‘);
header(‘Cache-Control: max-age=0‘);
$writer->save(‘php://output‘);
 
//内容乱码问题
//使用浏览器输出时,header头部加上(也就是前面)ob_end_clean();
?>

操作工作表和设置单元格的值

<?php
//引入PHPExcel文件
require ‘./Classes/PHPExcel.php‘;

//1.文件的创建
//创建PHPExcel对象
$obj = new PHPExcel();

//创建excel文件写入对象
$writer = new PHPExcel_Writer_Excel5($obj);

//操作工作表(worksheet)
//创建工作表方法一
$sheet = new PHPExcel_Worksheet($obj, ‘new sheet‘);
$obj->addSheet($sheet);
//创建工作表方法二
$obj->createSheet();

//设置当前工作表,也就是excel从左往右,从0开始
$obj->setActiveSheetIndex(0); 
//得到当前工作表对象
$curSheet = $obj->getActiveSheet();
//往工作表中插入数据
 
//设置单元格的值
$curSheet->setCellValue(‘A1‘, ‘10‘);
$curSheet->setCellValue(‘A2‘, ‘20‘);
$curSheet->setCellValue(‘A3‘, ‘=sum(A1:A2)‘);

ob_end_clean();
//浏览器输出
header(‘Content-Type: application/vnd.ms-execl‘);
header(‘Content-Disposition: attachment;filename="测试写入单元格.xls"‘);
header(‘Cache-Control: max-age=0‘);
$writer->save(‘php://output‘);

?>

效果如下图:

技术分享图片

设置样式

<?php
//引入PHPExcel文件
require ‘./Classes/PHPExcel.php‘;

//1.文件的创建
//创建PHPExcel对象
$obj = new PHPExcel();

//创建excel文件写入对象
$writer = new PHPExcel_Writer_Excel5($obj);

//操作工作表(worksheet)
//创建工作表方法一
$sheet = new PHPExcel_Worksheet($obj, ‘new sheet‘);
$obj->addSheet($sheet);
//创建工作表方法二
$obj->createSheet();

//设置当前工作表,也就是excel从左往右,从0开始
$obj->setActiveSheetIndex(0); 
//得到当前工作表对象
$curSheet = $obj->getActiveSheet();
//往工作表中插入数据 
//设置单元格的值
$curSheet->setCellValue(‘A1‘, ‘10‘);
$curSheet->setCellValue(‘A2‘, ‘20‘);
$curSheet->setCellValue(‘A3‘, ‘=sum(A1:A2)‘);

//设置样式
//加粗
$curSheet->getStyle(‘A1‘)->getFont()->setBold(true);
//斜体
$curSheet->getStyle(‘A1‘)->getFont()->setItalic(true);
//字体颜色
$curSheet->getStyle(‘A1‘)->getFont()->
setColor(new PHPExcel_Style_Color(PHPExcel_Style_Color::COLOR_DARKGREEN));
//字体
$curSheet->getStyle(‘A1‘)->getFont()->setName(‘宋体‘);
//字体大小
$curSheet->getStyle(‘A1‘)->getFont()->setSize(20);
//设置列宽
$curSheet->getColumnDimension(‘A‘)->setWidth(20);
$curSheet->getColumnDimension(‘A‘)->setAutoSize(true);
//设置行高
$curSheet->getRowDimension(‘1‘)->setRowHeight(20);
//设置边框
$curSheet->getStyle(‘A1‘)->getBorders()->getTop()
->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
//设置边框颜色
$curSheet->getStyle(‘A1‘)->getBorders()->getTop()->getColor()->setARGB(‘FF336600‘);
//设置填充色
$curSheet->getStyle(‘A1‘)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$curSheet->getStyle(‘A1‘)->getFill()->getStartColor()->setARGB(‘FFFF0000‘);

ob_end_clean();
//浏览器输出
header(‘Content-Type: application/vnd.ms-execl‘);
header(‘Content-Disposition: attachment;filename="测试设置样式.xls"‘);
header(‘Cache-Control: max-age=0‘);
$writer->save(‘php://output‘);

?>

效果如下图:

技术分享图片

单元格的合并、多行多列合并、插入行、删除行、插入列、删除列

<?php
//引入PHPExcel文件
require ‘./Classes/PHPExcel.php‘;

//1.文件的创建
//创建PHPExcel对象
$obj = new PHPExcel();

//创建excel文件写入对象
$writer = new PHPExcel_Writer_Excel5($obj);

//操作工作表(worksheet)
//创建工作表方法一
$sheet = new PHPExcel_Worksheet($obj, ‘new sheet‘);
$obj->addSheet($sheet);
//创建工作表方法二
$obj->createSheet();

//设置当前工作表,也就是excel从左往右,从0开始
$obj->setActiveSheetIndex(0); 
//得到当前工作表对象
$curSheet = $obj->getActiveSheet();
//往工作表中插入数据
 
//设置单元格的值
$curSheet->setCellValue(‘A1‘, ‘10‘);
$curSheet->setCellValue(‘A2‘, ‘20‘);
$curSheet->setCellValue(‘A3‘, ‘=sum(A1:A2)‘);

//单元格的合并
$curSheet->mergeCells(‘A1:A3‘);
//多行多列合并
$col1 = 2;//第三列
$row1 = 2;//第三行
$col2 = 3;//第四列
$row2 = 3;//第四行
$curSheet->mergeCellsByColumnAndRow($col1,$row1,$col2,$row2);
//插入一行(在before之前插入$rowNums行)
$curSheet->insertNewRowBefore($before=1, $rowNums=1);
//删除行(从row开始删除$rowNums行)
$curSheet->removeRow($row=1,$rowNums=1);
//插入列(在before之前添加$colNums列)
$curSheet->insertNewColumnBefore($before=‘A‘, $colNums=1);
//删除列(从col开始删除$colNums列)
$curSheet->removeColumn($col=‘A‘, $colNums);

ob_end_clean();
//浏览器输出
header(‘Content-Type: application/vnd.ms-execl‘);
header(‘Content-Disposition: attachment;filename="测试合并-插入-删除.xls"‘);
header(‘Cache-Control: max-age=0‘);
$writer->save(‘php://output‘);

?>

效果如下图:

技术分享图片

插入图片

<?php
//引入PHPExcel文件
require ‘./Classes/PHPExcel.php‘;

//1.文件的创建
//创建PHPExcel对象
$obj = new PHPExcel();

//创建excel文件写入对象
$writer = new PHPExcel_Writer_Excel5($obj);

//操作工作表(worksheet)
//创建工作表方法一
$sheet = new PHPExcel_Worksheet($obj, ‘new sheet‘);
$obj->addSheet($sheet);
//创建工作表方法二
$obj->createSheet();

//设置当前工作表,也就是excel从左往右,从0开始
$obj->setActiveSheetIndex(0); 
//得到当前工作表对象
$curSheet = $obj->getActiveSheet();
//往工作表中插入数据

//插入图片
// 1、创建图片操作对象
$img = new PHPExcel_Worksheet_Drawing();
// 2、设置图片路径
$img->setPath("./1.jpg");
// 3、设置图片宽高
$img->setWidth(533);
$img->setHeight(533);
// 4、设置图片插入位置
$img->setCoordinates(‘A1‘);
// 5、设置图片偏移量
$img->setOffsetX(100);
// 6、设置图片倾斜
$img->setRotation(25);
// 7、添加到工作表
$img->setWorksheet($curSheet);

ob_end_clean();
//浏览器输出
header(‘Content-Type: application/vnd.ms-execl‘);
header(‘Content-Disposition: attachment;filename="测试插入图片.xls"‘);
header(‘Cache-Control: max-age=0‘);
$writer->save(‘php://output‘);

?>

效果如下图:

技术分享图片

读取excel相关的操作函数

//创建excel读对象
$reader = PHPExcel_IOFactory::createReader(‘Excel5‘);
//or
$reader = new PHPExcel_Reader_Excel5();
//得到excel操作对象
$excel = PHPExcel_IOFactory::load(excel路径);
//or
$excel = $reader->load(excel路径);
 
//获取表的相应数据
 
//获取工作表数量
$excel->getSheetCount();
 
//获取工作表名
$excel->getSheetNames();
 
//根据表名切换当前工作表
$excel->setActiveSheetIndexByName();
 
//获取整个内容返回数组
$excel->getActiveSheet()->toArray();
 
//通过reader对象获取excel表的信息
$reader->listWorkSheetInfo(路径);
$reader->listWorkSheetNames(路径);
 
//获取当前工作表最大行数
$excel->getActiveSheet()->getHighestRow();
//获取当前工作表最大列数
$excel->getActiveSheet()->getHighestColumn();
 
//获取单个单元格内容
$curSheet->getCell(‘A1‘)->getValue();

循环读取excel中所有Sheet数据

先准备数据:

Sheet1:

技术分享图片

Sheet2:

技术分享图片

循环读取示例:

<?php
//引入PHPExcel文件
require ‘./Classes/PHPExcel.php‘;

//创建excel读对象
$reader = PHPExcel_IOFactory::createReader(‘Excel5‘);
//得到excel操作对象
$excel = PHPExcel_IOFactory::load(‘./test.xls‘);

//放入数组
$data = array();

//获取所有工作表名
$SheetNamas = $excel->getSheetNames();
//遍历工作表
for($i = 0; $i < count($SheetNamas); $i++){
    //获取当前工作表名
    $SheetName = $SheetNamas[$i];
    //根据表名切换当前工作表
    $excel->setActiveSheetIndexByName($SheetName);
    //得到当前工作表对象
    $curSheet = $excel->getActiveSheet();
    //获取当前工作表最大行数
    $rows = $curSheet->getHighestRow();
    //获取当前工作表最大列数,返回的是最大的列名,如:B 
    $cols = $curSheet->getHighestColumn();

    //将当前工作表名当键,内容为值存入数组
    $data[$SheetName] = array();

    //大写字母A的ASCII值是65 A-Z对应65-90
    for($j = ‘A‘; $j <= $cols; $j++ ){
        for($k = 1; $k <= $rows; $k++){
            $key = $j.$k;
            $value = $curSheet->getCell($key)->getValue();
            $data[$SheetName][$key] = $value;
        }
    }

}
echo json_encode($data);
?>

数据如下图:

技术分享图片

读取excel大批量转换成sql

生成大批量的excel数据

<?php
set_time_limit(0);

//引入PHPExcel文件
require ‘./Classes/PHPExcel.php‘;

$start = microtime(true);
$excel = new PHPExcel();
$writer = PHPExcel_IOFactory::createWriter($excel, ‘Excel5‘);
$curSheet = $excel->getActiveSheet();
 
$rows = 10000;
$cols = range(‘A‘, ‘M‘);
 
for($i = 1; $i <= $rows; ++$i) {
    foreach($cols as $col) {
        $cellName = $col . $i;
        $curSheet->setCellValue($cellName, uniqid(mt_rand(), true));
    }
}
 
$writer->save(‘./data.xls‘);
$end = microtime(true);
echo $end - $start;
?>

批量转化成sql

<?php
set_time_limit(60);
ini_set("memory_limit", "128M");
 
//引入PHPExcel文件
require ‘./Classes/PHPExcel.php‘;
 
$start = microtime(true);
 
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip; 
$cacheSettings = array(); 
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
 
//加载excel文件
$excel = PHPExcel_IOFactory::load(‘./data.xls‘);
$curSheet = $excel->getActiveSheet();
 
//sql文件保存路径
$sqlFile = dirname(__FILE__) . ‘/data.sql‘;
$fp = fopen($sqlFile, ‘ab+‘);
 
$rows = $curSheet->getHighestRow();
$cols = $curSheet->getHighestColumn();
 
//将列名转为列数
$cols = PHPExcel_Cell::columnIndexFromString($cols);
 
for($i = 1; $i <= $rows; ++$i) {
    $rowStr = "INSERT INTO `test` VALUES(NULL,";
    for($j = 0; $j < $cols; ++$j) {
 
        //将列数转换为列名
        $cellName = PHPExcel_Cell::stringFromColumnIndex($j) . $i;
        $cellValue = $curSheet->getCell($cellName)->getValue();
        $cellValue = iconv(‘GBK‘, ‘UTF-8‘, $cellValue);
        $rowStr .= "‘{$cellValue}‘,";
    }
    $rowStr = rtrim($rowStr, ",") . ");\r\n";
    fwrite($fp, $rowStr);
}
fclose($fp);
 
 
$end = microtime(true);
echo $end - $start;

php 的 PHPExcel1.8.0 使用

原文:https://www.cnblogs.com/makalochen/p/12834440.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!