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 静态变量与自定义常量的使用方法
Jan 26 PHP
ecshop 批量上传(加入自定义属性)
Mar 20 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
PHP实现多图片上传类实例
Jul 26 PHP
PHP集成百度Ueditor 1.4.3
Nov 23 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
Symfony学习十分钟入门经典教程
Feb 03 PHP
PHP+Ajax无刷新带进度条图片上传示例
Feb 08 PHP
Redis构建分布式锁
Mar 28 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 PHP
PHP区块查询实现方法分析
May 12 PHP
PHP架构及原理知识点详解
Dec 22 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 获取远程文件内容的函数代码
2010/03/24 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
php使用百度天气接口示例
2014/04/22 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
jQuery1.6 类型判断实现代码
2011/09/01 Javascript
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
微信小程序实现banner图轮播效果
2020/06/28 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
Python程序员开发中常犯的10个错误
2014/07/07 Python
python3编码问题汇总
2016/09/06 Python
Python基础知识_浅谈用户交互
2017/05/31 Python
对python中的pop函数和append函数详解
2018/05/04 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
python实现二维插值的三维显示
2018/12/17 Python
Python3操作MongoDB增册改查等方法详解
2020/02/10 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
测绘工程专业个人自我评价
2013/12/01 职场文书
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
计算机专业毕业生自荐信
2013/12/31 职场文书
后备干部推荐材料
2014/12/24 职场文书
五年级学生评语大全
2014/12/26 职场文书
工会积极分子个人总结
2015/03/03 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
人生感悟经典句子
2019/08/20 职场文书
spring boot中nativeQuery的用法
2021/07/26 Java/Android