PHPExcel是用来操作Office Excel文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格。
如:PHPExcel_1.8.0_doc.zip
三、解压zip,把里面的classes里的文件拷贝一份放入phpexcel文件夹中。
六、如何导入大数据量的excel
生成该文件大概花了17秒,大小约为10.2MB。
一、下载PHPExcel
http://phpexcel.codeplex.com/
二、使用PHPExcel的要求
PHP版本高于5.2.0 开启php_zip扩展 开启php_xml扩展 开启php_gd2扩展
四、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>';
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;
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, ",") . "); "; fwrite($fp, $rowStr); } fclose($fp); exec('D:ampmysql56inmysql -utest -ptest test < ' . $sqlFile); $end = microtime(true); echo $end - $start;
1万行的xls数据导入数据库,用了36秒左右,当然php的内存还可以调大点。