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. 基于Linux的Samba开源共享解决方案测试(三)

    在极限写场景下,对于网关的网络监控如图: 在极限写场景下,对于网关的网络监控如图: 在极限混合读写场景下,对于网关的网络监控如图: 在极限混合读写场景下,对于客户端的网络监控如图: 双NAS网关100 ...

  2. AJAX相关总结

    AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. AJAX = 异步 J ...

  3. python应用之爬虫实战2 请求库与解析库

    知识内容: 1.requests库 2.selenium库 3.BeautifulSoup4库 4.re正则解析库 5.lxml库 参考: http://www.cnblogs.com/wupeiqi ...

  4. Where is virtualenvwrapper.sh after pip install?

      I'm trying to setup virtualenvwrapper on OSX, and all the instructions and tutorials I've found te ...

  5. 好用的 FTP 软件之 FileZilla 技巧教程

    FTP 软件之 FileZilla教程 使用教程参考:http://163.26.161.1/~yilinteacher/wwwict/flash/FileZilla.swf (1)如何设置传输完成后 ...

  6. uva-10167-枚举

    题意:生日蛋糕上面有2N草莓,怎么切能够将蛋糕和草莓平分成俩份,直接枚举,A和B,草莓不能落在直线上 #include <iostream> #include <stdio.h> ...

  7. 图片水平垂直居中(兼容IE6,IE7,firefox,opera,safari,其中图片可以是任何块元素)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. vsphere使用笔记

    一,安装虚拟机,需要使用vsphere client上传镜像,提示错误:   vsphere client 上传文件:Failed to log into NFC Server   , 解决办法:用浏 ...

  9. 【独家】完美解决appium安装app时,需要手动确认安装的问题

    appium初始化driver时,如果未安装该app会先进行安装,安装时,很多安卓手机都会弹框,需要手动确认安装. 如小米的机器, 这是个头疼的问题,之前在网上找遍了,只有通过adb去点相对坐标成功了 ...

  10. mysql数据库复制

    核心命令是 myssqldump mysqldump --host=host1 --opt sourceDb| mysql --host=host2 -C targetDb 详情参考: MySQL数据 ...