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

 
一、下载PHPExcel
http://phpexcel.codeplex.com/

如:PHPExcel_1.8.0_doc.zip

 
二、使用PHPExcel的要求
PHP版本高于5.2.0
开启php_zip扩展
开启php_xml扩展
开启php_gd2扩展

三、解压zip,把里面的classes里的文件拷贝一份放入phpexcel文件夹中。

 
四、PHPExcel中常用方法
//引入PHPExcel文件
require './phpexcel/PHPExcel.php'; //创建PHPExcel对象
$obj = new PHPExcel(); //写入excel操作 //创建excel写入对象
//第二个参数可以写'excel2007'
$writer = PHPExcel_IOFactory::createWriter($obj, 'Excel5');
//或如下方式
$writer = new PHPExcel_Writer_Excel5($obj); //保存文件到本地
$writer->save('1.xls'); //浏览器输出
header('Content-Type: application/vnd.ms-execl');
header('Content-Disposition: attachment;filename="文件名.xls"');
header('Cache-Control: max-age=0');
$writer->save('php://output'); //文件名乱码的解决
$filename = iconv('utf-8', 'gbk', '中文.xls');
$writer->save($filename); //内容乱码问题
使用浏览器输出时,header头部加上ob_end_clean(); //操作工作表(worksheet) //创建工作表方法一
$sheet = new PHPExcel_Worksheet($obj, 'new sheet');
$obj->addSheet($sheet); //创建工作表方法二
$obj->createSheet(); //设置当前工作表
$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'); //单元格的合并
$curSheet->mergeCells('A1:A3');
//多行多列合并
$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); //插入图片
1、创建图片操作对象
$img = new PHPExcel_Worksheet_Drawing();
2、设置图片路径
$img->setPath(路径);
3、设置图片宽高
$img->setWidth();
$img->setHeight();
4、设置图片插入位置
$img->setCoordinates('A1');
5、设置图片偏移量
$img->setOffsetX(100);
6、设置图片倾斜
$img->setRotation(25);
7、添加到工作表
$img->setWorksheet($curSheet); //读取excel操作 //创建excel读对象
$reader = PHPExcel_IOFactory::createReader('Excel5');
$reader = new PHPExcel_Reader_Excel5();
//得到excel操作对象
$excel = PHPExcel_IOFactory::load(excel路径);
$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中数据
<?php
require './phpexcel/PHPExcel.php'; $reader = PHPExcel_IOFactory::createReader('Excel5');
$excel = PHPExcel_IOFactory::load('./1.xls');
$curSheet = $excel->getActiveSheet(); $rows = $curSheet->getHighestRow();
$cols = $curSheet->getHighestColumn(); $data = array();
for($i = 1; $i <= $rows; ++$i) {
$tmp = array();
for($j = 'A'; $j <= $cols; ++$j) {
$name = $j . $i;
$cellData = $curSheet->getCell($name)->getValue();
$tmp[] = $cellData;
}
$data[] = $tmp;
} echo '<pre>';
print_r($data);
echo '</pre>';

六、如何导入大数据量的excel

1、为了测试,我们手动的创建一个数据量较大的xls文件
<?php
set_time_limit(0);
require './phpexcel/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;

生成该文件大概花了17秒,大小约为10.2MB。

 
2、我们创建一个静态页面,用于上传该文件
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>导入excel</title>
</head>
<body>
<form action="import.php" method="post" enctype="multipart/form-data">
xls文件:<input type="file" name="upfile" value="" />
<input type="submit" value="导入" />
</form>
</body>
</html>
3、通过生成sql语句把它写入到data.sql中,然后调用mysql命令导入sql文件
<?php
set_time_limit(60);
ini_set("memory_limit", "128M"); require './phpexcel/PHPExcel.php'; $start = microtime(true); $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
$cacheSettings = array();
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings); //上传的临时文件
$upfile = $_FILES['upfile']['tmp_name'];
$excel = PHPExcel_IOFactory::load($upfile);
$curSheet = $excel->getActiveSheet(); $db = mysql_connect('127.0.0.1', 'root', '');
mysql_select_db('test');
mysql_query('set names utf8'); //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); exec('D:\amp\mysql56\bin\mysql -utest -ptest test < ' . $sqlFile); $end = microtime(true);
echo $end - $start;
1万行的xls数据导入数据库,用了36秒左右,当然php的内存还可以调大点。

php 的 PHPExcel1.8.0 使用教程的更多相关文章

  1. Windows环境下Android Studio v1.0安装教程

    Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SD ...

  2. Swift3.0语言教程字符串与URL的数据转换与自由转换

    Swift3.0语言教程字符串与URL的数据转换与自由转换 Swift3.0语言教程字符串与URL的数据转换 Swift3.0语言教程字符串与URL的数据转换与自由转换,字符串中的字符永久保存除了可以 ...

  3. Swift3.0语言教程字符串与文件的数据转换

    Swift3.0语言教程字符串与文件的数据转换 Swift3.0语言教程字符串与文件的数据转换,如果想要对字符串中的字符进行永久保存,可以将字符串中的字符写入到文件中.当然,开发者也可以将写入的内容进 ...

  4. Swift3.0语言教程字符串转换为数字值

    Swift3.0语言教程字符串转换为数字值 Swift3.0语言教程字符串转换为数字值,在NSString中,开发者可以将字符串转换为数字值,通过这些数字值可以实现一些功能,如加法运算.减法运算等.数 ...

  5. Swift3.0语言教程使用URL字符串

    Swift3.0语言教程使用URL字符串 Swift3.0语言教程使用URL字符串,和路径一样,URL其实也是字符串,我们可以将这些字符串称为URL字符串.本小节将讲解URL字符串的使用. 1.编码 ...

  6. Swift3.0语言教程使用路径字符串

    Swift3.0语言教程使用路径字符串 Swift3.0语言教程使用路径字符串,路径其实是字符串的一种,我们称为路径字符串.本小节将讲解如何使用路径字符串. 1.组合路径 开发者可以将数组快速的组合成 ...

  7. Swift3.0语言教程删除字符与处理字符编码

    Swift3.0语言教程删除字符与处理字符编码 Swift3.0语言教程删除字符 Swift3.0语言教程删除字符与处理字符编码,在字符串中,如果开发者有不需要使用的字符,就可以将这些字符删除.在NS ...

  8. Swift3.0语言教程分割字符串与截取字符串

    Swift3.0语言教程分割字符串与截取字符串 Swift3.0语言教程分割字符串 如果想要快速的创建一个数组,我们可以将字符串进行分割,分割后的内容将会生成一个数组.在NSString中有两个分割字 ...

  9. Swift3.0语言教程字符串大小写转化

    Swift3.0语言教程字符串大小写转化 Swift3.0语言教程字符串大小写转化,在字符串中,字符串的格式是很重要的,例如首字母大写,全部大写以及全部小写等.当字符串中字符很多时,通过人为一个一个的 ...

随机推荐

  1. How to use POST method in Tornado?

    http://stackoverflow.com/questions/10367981/how-to-use-post-method-in-tornado

  2. Scrapy-下载中间件

    下载中间件 下载器中间件是介于Scrapy的request/response处理的钩子框架. 是用于全局修改Scrapy request和response的一个轻量.底层的系统 编写您自己的下载器中间 ...

  3. CentOS7 安装supervisor守护进程管理器

    supervisor没有发布在标准的CentOS源在,需要安装epel源.这种方式安装的可能不是最新版本,但比较方便,安装完成之后,配置文件会自动帮你生成. 默认配置文件:/etc/superviso ...

  4. Spark分析之启动流程

  5. ajaxGet 获取封装

    callback 表示下一个功能(回调函数) function ajaxGet(url,callback,data){           如果路径上有参数  就在url后面拼接参数 否则只请求url ...

  6. html 更新

    HTML介绍 Web服务本质 import socket sk = socket.socket() sk.bind(("127.0.0.1", 8080)) sk.listen(5 ...

  7. js数组的初始化

    方法一: var myarray = new Array(66,80,90,77,59); 方法二: var myarray = [66,80,90,77,59]; 方法三: var myarray= ...

  8. 知乎日报 API的图片盗链问题

    由最近 基于vue的知乎日报单页应用 引发的问题 以及问题解决历程 通过 知乎日报API 基于vue做一个知乎日报的单页应用,在获取图片时存在一个图片盗链问题,图片无法加载 提示 403 错误, 最终 ...

  9. 在oracle下如何创建database link全面总结

    物理上存放于网络的多个ORACLE数据库,逻辑上可以看成一个单一的大型数据库,用户可以通过网络对异地数据库中的数据进行存取,而服务器之间的协同处理对于工作站用户及应用程序而言是完全透明的,开发人员无需 ...

  10. filter vs servlet

    主要从如下四个方面介绍他们之间的区别:                 1.概念.                 2.生命周期.                 3.职责. 4.执行过程. 一.概念 ...