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小偷的核心程序
Apr 09 PHP
php 防止单引号,双引号在接受页面转义
Jul 10 PHP
很好用的PHP数据库类
May 27 PHP
PHP 网络开发详解之远程文件包含漏洞
Apr 25 PHP
PHP中改变图片的尺寸大小的代码
Jul 17 PHP
php多层数组与对象的转换实例代码
Aug 05 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
php读取txt文件并将数据插入到数据库
Feb 23 PHP
微信支付开发发货通知实例
Jul 12 PHP
PHP进程通信基础之信号量与共享内存通信
Feb 19 PHP
Yii2.0 RESTful API 基础配置教程详解
Dec 26 PHP
phpcmsv9.0任意文件上传漏洞解析
Oct 20 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
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
php正则修正符用法实例详解
2016/12/29 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
PHP生成图表pChart的示例解析
2020/07/31 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
JS案例分享之金额小写转大写
2014/05/15 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
python多线程扫描端口示例
2014/01/16 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
Python实现类的创建与使用方法示例
2017/07/25 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
python使用tornado实现简单爬虫
2018/07/28 Python
自学python的建议和周期预算
2019/01/30 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
介绍一下linux文件系统分配策略
2012/11/17 面试题
售后求职信范文
2014/03/15 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
大学生就业指导课心得体会
2016/01/15 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
JS代码编译器Monaco使用方法
2021/06/11 Javascript
redis protocol通信协议及使用详解
2022/07/15 Redis
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers