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的内存还可以调大点。

最新文章

  1. [deviceone开发]-底部弹出选择
  2. Glide实现圆角和圆形图片
  3. 如何做优化,UITabelView才能更加顺滑 (转载)
  4. WCF :IIS寄宿方式的Web地址、BaseAddress和EndPoint Address的关系
  5. jquery getJSON
  6. [物理学与PDEs]第5章 弹性力学
  7. 【转】apue《UNIX环境高级编程第三版》第一章答案详解
  8. LINUX下的简单线程池
  9. MVC小系列(二十)【给Action提供HttpStatusCodeResult】
  10. iOS 9之Advanced Touch Input(高级触摸输入)
  11. 如何使用C API来操作UCI
  12. 方伯伯的玉米田[SCOI2014]
  13. 【网络流】【BZOJ1061】【NOI2008】志愿者招募
  14. Android开发:在Eclipse中配置Android环境
  15. Javascript - ExtJs - 弹窗
  16. vue入手
  17. IDEA项目搭建十二——站点用户登录会话实现
  18. vs远程调试 转http://www.cnblogs.com/magicchaiy/archive/2013/05/28/3088274.html
  19. Hive 中的复合数据结构简介以及一些函数的用法说明
  20. StringBuffer&amp;StringBuilder类

热门文章

  1. jQuery的selector和context属性
  2. 阿里数据服务P6~P7晋升要点
  3. uva-10344
  4. 网络层-IP地址
  5. 31. Next Permutation + 46. Permutations + 47. Permutations II + 60. Permutation Sequence
  6. IIS ashx
  7. as2 针对加载进来的swf操作
  8. Excel函数使用
  9. jdk下载--操作系统
  10. linux 中特殊符号用法详解