php中使用PHPExcel读写excel(xls)文件的方法


Posted in PHP onSeptember 15, 2014

本文实例讲述了PHP中使用PHPExcel读写excel(xls)文件的方法,非常实用。分享给大家供大家参考之用。具体方法如下:

很多PHP类库在读取中文的xls、csv文件时会有问题,网上找了下资料,发现PHPExcel类库好用,官网地址为:http://phpexcel.codeplex.com/。现将PHPExcel读写Excel的方法分别叙述如下:

1、读取xls文件内容

<?php
  //向xls文件写入内容
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);  
  include 'Classes/PHPExcel.php';      
  include 'Classes/PHPExcel/IOFactory.php'; 
  //$data:xls文件内容正文
  //$title:xls文件内容标题
  //$filename:导出的文件名
  //$data和$title必须为utf-8码,否则会写入FALSE值
  function write_xls($data=array(), $title=array(), $filename='report'){
    $objPHPExcel = new PHPExcel();
    //设置文档属性,设置中文会产生乱码,需要转换成utf-8格式!!
    // $objPHPExcel->getProperties()->setCreator("云舒")
               // ->setLastModifiedBy("云舒")
               // ->setTitle("产品URL导出")
               // ->setSubject("产品URL导出")
               // ->setDescription("产品URL导出")
               // ->setKeywords("产品URL导出");
    $objPHPExcel->setActiveSheetIndex(0);
    
    $cols = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    //设置3water.com标题
    for($i=0,$length=count($title); $i<$length; $i++) {
      //echo $cols{$i}.'1';
      $objPHPExcel->getActiveSheet()->setCellValue($cols{$i}.'1', $title[$i]);
    }
    //设置标题样式
    $titleCount = count($title);
    $r = $cols{0}.'1';
    $c = $cols{$titleCount}.'1';
    $objPHPExcel->getActiveSheet()->getStyle("$r:$c")->applyFromArray(
      array(
        'font'  => array(
          'bold'   => true
        ),
        'alignment' => array(
          'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT,
        ),
        'borders' => array(
          'top'   => array(
            'style' => PHPExcel_Style_Border::BORDER_THIN
          )
        ),
        'fill' => array(
          'type'    => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
          'rotation'  => 90,
          'startcolor' => array(
            'argb' => 'FFA0A0A0'
          ),
          'endcolor'  => array(
            'argb' => 'FFFFFFFF'
          )
        )
      )
    );
    
    $i = 0;
    foreach($data as $d) { //这里用foreach,支持关联数组和数字索引数组
      $j = 0;
      foreach($d as $v) {  //这里用foreach,支持关联数组和数字索引数组
        $objPHPExcel->getActiveSheet()->setCellValue($cols{$j}.($i+2), $v);
        $j++;
      }
 $i++;
    }
    // 生成2003excel格式的xls文件
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="'.$filename.'.xls"');
    header('Cache-Control: max-age=0');

    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    $objWriter->save('php://output');
  }
  $array = array(
    array(1111,'名称','品牌','商品名','https://3water.com'),
    array(1111,'名称','品牌','商品名','https://3water.com'),
    array(1111,'名称','品牌','商品名','https://3water.com'),
    array(1111,'名称','品牌','商品名','https://3water.com'),
    array(1111,'名称','品牌','商品名','https://3water.com'),
  );
  write_xls($array,array('商品id','供应商名称','品牌','商品名','URL'),'report');
  
?>

2、向xls文件写内容

<?php
  //获取数据库数据(mysqli预处理学习)
  $config = array(
    'DB_TYPE'=>'mysql',
    'DB_HOST'=>'localhost',
    'DB_NAME'=>'test',
    'DB_USER'=>'root',
    'DB_PWD'=>'root',
    'DB_PORT'=>'3306',
  );
  function getProductIdByName($name) {
    global $config;
    $id = false;
    
    $mysqli = new mysqli($config['DB_HOST'], $config['DB_USER'], $config['DB_PWD'], $config['DB_NAME']);
    if(mysqli_connect_error()) {  //兼容 < php5.2.9 OO way:$mysqli->connect_error
      die("连接失败,错误码:".mysqli_connect_errno()."错误信息:".mysqli_connect_error());
    }
    //设置连接数据库的编码,不要忘了设置
    $mysqli->set_charset("gbk");
    //中文字符的编码要与数据库一致,若没设置,结果为null
    $name = iconv("utf-8", "gbk//IGNORE", $name);
    if($mysqli_stmt = $mysqli->prepare("select id from 137_product where name like ?")) {
      $mysqli_stmt->bind_param("s", $name);
      $mysqli_stmt->execute();
      $mysqli_stmt->bind_result($id);
      $mysqli_stmt->fetch();
      $mysqli_stmt->close();
    }
    $mysqli->close(); 
    return $id;  //得到的是gbk码(同数据库编码)
  }  
  $id = getProductIdByName('%伊奈卫浴伊奈分体座便器%');
  var_dump($id);
?>

希望本文所述对大家的PHP程序设计有所帮助

PHP 相关文章推荐
php _autoload自动加载类与机制分析
Feb 10 PHP
apache php模块整合操作指南
Nov 16 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
深入php函数file_get_contents超时处理的方法详解
Jun 03 PHP
使用phpQuery采集网页的方法
Nov 13 PHP
php几个预定义变量$_SERVER用法小结
Nov 07 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
php二维码生成
Oct 19 PHP
Yii2.0高级框架数据库增删改查的一些操作
Nov 16 PHP
利用PHP实现一个简单的用户登记表示例
Apr 25 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
PHP生成随机数的方法总结
Mar 01 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
Sep 12 #PHP
php修改指定文件后缀的方法
Sep 11 #PHP
MyEclipse常用配置图文教程
Sep 11 #PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 #PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
Sep 10 #PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 #PHP
PHP实现对站点内容外部链接的过滤方法
Sep 10 #PHP
You might like
PHP 柱状图实现代码
2009/12/04 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
激动人心的 Angular HttpClient的源码解析
2017/07/10 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
详解npm 配置项registry修改为淘宝镜像
2018/09/07 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
python中plot实现即时数据动态显示方法
2018/06/22 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
详解python编译器和解释器的区别
2019/06/24 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
Python虚拟环境venv用法详解
2020/05/25 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
运动会开幕式邀请函
2014/01/22 职场文书
公司会议策划方案
2014/05/17 职场文书
宣传口号大全
2014/06/16 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
酒会邀请函
2015/01/31 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android