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. WebApi接口传参不再困惑(4):传参详解(转载)

    WebApi接口传参不再困惑(4):传参详解   前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方 ...

  2. Sublime Text 3 文本编辑器

    1.安装下载 下载地址:http://www.cr173.com/soft/121149.html http://www.xiazaiba.com/html/24343.html 官网 http:// ...

  3. 基于ADL5317的雪崩光电二极管(APD)偏压控制/光功率监测电路的设计

    1 引言 目前,雪崩光电二极管(APD)作为一种高灵敏.能精确接收数据和测量光功率的光探测器件广泛应用于光纤传感.光纤通信网络中.它借助于内部强电场作用产生雪崩倍增效应,具有极高的内部增益(可达102 ...

  4. Html 修改placeholder的颜色属性css样式

    项目需求需要修改文本框的placeholder 的文本颜色, 百度下, 备忘,我使用的是这种方法, ::-webkit-input-placeholder { /* WebKit browsers * ...

  5. ubuntu下下载并安装H265(hm.x.x代码和X265代码)

    H265,现今是High Efficiency Video Coding的别称,详细的概述见维基百科,详细的开发见官方网站. 一.下载并编译官方的测试源码HM.x.x: 1 ubuntu下安装svn: ...

  6. Android ListView快速定位(二)

    方法二:android:textFilterEnabled="true" + Filter 这个属性在android.widget.AbsListView下,要求adapter必须 ...

  7. bzoj3230

    以前觉得这题好难,现在觉得这题还是挺简单首先看到类似LCP问题不难想到后缀数组吧前后的相似需要我们分别做一个后缀数组和“前缀数组”(就是把字符串反向然后跑后缀数组)这道题的难点就在于如何确定子串是什么 ...

  8. Objective-C中release和nil的关系

    (iphone/ipad)浅谈Objective-C中release和nil的关系 分类: iPhone/iPad开发技术2011-12-09 01:40 2515人阅读 评论(4) 收藏 举报 ui ...

  9. linux下一个oracle11G DG建立(一个):准备环境

    linux下一个oracle11G  DG建立(一个):准备环境 周围环境 名称 主库 备库 主机名 bjsrv shsrv 软件版本号 RedHat Enterprise5.5.Oracle 11g ...

  10. 新概念英语(1-143)A walk through the woods

    Lesson 143 A walk through the woods 林中散步 Listen to the tape then answer this question. What was so f ...