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 url 加密解密函数代码
Aug 26 PHP
通过5个php实例细致说明传值与传引用的区别
Aug 08 PHP
在PHP中使用redis
Nov 04 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
Jul 14 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
PHP邮件发送类PHPMailer用法实例详解
Sep 22 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 PHP
php显示时间常用方法小结
Jun 05 PHP
php session的锁和并发
Jan 22 PHP
PHP字典树(Trie树)定义与实现方法示例
Oct 09 PHP
PHP实现按之字形顺序打印二叉树的方法
Jan 16 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 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/04/13 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
PHP实现获取图片颜色值的方法
2014/07/11 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
javascript知识点收藏
2007/02/22 Javascript
Javascript !!的作用
2008/12/04 Javascript
Prototype Number对象 学习
2009/07/19 Javascript
简洁短小的 JavaScript IE 浏览器判定代码
2010/03/21 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
Express的路由详解
2015/12/10 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
[02:59]DOTA2完美大师赛主赛事第三日精彩集锦
2017/11/25 DOTA
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
Python version 2.7 required, which was not found in the registry
2014/08/26 Python
使用graphics.py实现2048小游戏
2015/03/10 Python
详解python中的json的基本使用方法
2016/12/21 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
python实现windows下文件备份脚本
2018/05/27 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
Python日志模块logging基本用法分析
2018/08/23 Python
基于python实现学生管理系统
2018/10/17 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
python3判断IP地址的方法
2021/03/04 Python
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
聘任书的写作格式及范文
2014/03/29 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
家长学校教学计划
2015/01/19 职场文书
郭明义电影观后感
2015/06/08 职场文书
详解Nginx 工作原理
2021/03/31 Servers
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
Python进行区间取值案例讲解
2021/08/02 Python