phpexcel读写xls文件实现程序

 更新时间:2016年11月25日 17:30  点击:2218
文章介绍了关于phpexcel读写xls文件的方法代码,有需要了解的同学可以参考一下本教程哦。
 代码如下 复制代码

<?php
include_once('PHPExcel.php');
//read excel file;
$PHPExcel = new PHPExcel();    
$PHPReader = new PHPExcel_Reader_Excel5();
$PHPExcel = $PHPReader->load('/home/yuanjianjun/taobao_cat.xls');
$currentSheet = $PHPExcel->getSheet(0);
$allColumn = $currentSheet->getHighestColumn();
$allRow = $currentSheet->getHighestRow();
for($currentRow = 1; $currentRow<=$allRow; $currentRow++){
   for($currentColumn='A'; $currentColumn<=$allColumn; $currentColumn++){  
    $address = $currentColumn.$currentRow;  
    echo $currentSheet->getCell($address)->getValue()."t";  
   }
   echo "n";
}


//write excel file
$objExcel = new PHPExcel();
$objWriter = new PHPExcel_Writer_Excel5($objExcel);
$objProps = $objExcel->getProperties();  
$objProps->setCreator("yuan");
$objProps->setLastModifiedBy("yuan");
$objProps->setTitle("excel test");  
$objProps->setSubject("my excel test");
$objProps->setDescription("hello world.");  
$objProps->setKeywords("PHPExcel");
$objProps->setCategory("EXCEL");
$objExcel->setActiveSheetIndex(0);
$objActSheet = $objExcel->getActiveSheet();
$objActSheet->setTitle('TEST1');
$objActSheet->setCellValue('A1', '字符串内容');
$objActSheet->setCellValue('A2', 26);
$objActSheet->setCellValue('A3', true);
$objActSheet->setCellValue('A4', '=A2+A2');
$objWriter->save('/home/yuanjianjun/helloworld.xls');  


//copy excel format
$objReader = PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel = $objReader->load('/home/yuanjianjun/20100301.xls');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->_phpExcel->setActiveSheetIndex(0);
$objWriter->_phpExcel->getActiveSheet()->setCellValue('A1', 'FESDF');
$objWriter->_phpExcel->getActiveSheet()->setCellValue('B1', 'S');
$objWriter->_phpExcel->getActiveSheet()->setCellValue('C1', 'FEFSD');
$objWriter->_phpExcel->getActiveSheet()->setCellValue('D1', 'SDFD');
$objWriter->_phpExcel->getActiveSheet()->setCellValue('E1', '淘宝CPS');
$objWriter->save('/home/yuanjianjun/copy.xls');

在php要删除数组元素的方法有很多,php内置了为我们提供了两个函数array_slice() 和array_flip()大家可参考一下。 我们先用php函数来实现

array_slice() 第一个参数是要切割的数组,第二个参数是起始位置,第三个参数是长度。
就是 切割 $arr这个数组,从第0个元素往后数3个。

 代码如下 复制代码

array("a","b","c","d","e","f","g")

$arr = array_slice($arr, 0, 3);


array_flip实现去重效果 phperz~com

另一个方法是使用php的array_flip函数来间接的实现去重效果

array_flip是反转数组键和值的函数,他有个特性就是如果数组中有二个值是一样的,那么反转后会保留最后一个键和值.利用这个特性我们用他来间接的实现数组的去重.

 代码如下 复制代码

<?php
$arr = array("a"=>"a1","b"=>'b1',"c"=>"a2","d"=>"a1");
$arr1 = array_flip($arr);
print_r($arr1);//先反转一次,去掉重复值,输出Array ( [a1] => d [b1] => b [a2] => c )
$arr2 = array_flip($arr);
print_r($arr2);//再反转回来,得到去重后的数组,输出Array ( [a1] => d [b1] => b [a2] => c )
$arr3 = array_unique($arr);
print_r($arr3);//利用php的array_unique函数去重,输出Array ( [a] => a1 [b] => b1 [c] => a2 )
?>

下面为我之前常用的方法unset来实现删除

代码如下:

 代码如下 复制代码

<?php
$arr = array('a','b','c','d');
unset($arr[1]);
print_r($arr);
?>

print_r($arr)之后,结果却不是那样的,最终结果是 Array ( [0] => a [2] => c [3] => d

本文章介绍了在php中常用的简单的异常处理类,我们主要是讲述到了Exception处理 ,有需要了解的同学可参考一下。
 代码如下 复制代码
<?php
    try {
        $a=10/0;
    }catch (Exception $e){
        echo "抛出异常";
    }
?>

以上代码,并不会输出“抛出异常”,而是输出了错误信息:Warning: Division by zero in......

说明:try块中并没有抛出异常,而是按照系统默认的错误处理机制进行处理

所以能不能捕获到异常,取决于有没有真正的抛出异常

 

 代码如下 复制代码

<?php
class Exception
{
    protected $message = 'Unknown exception';   // 异常信息
    protected $code = 0;                        // 用户自定义异常代码
    protected $file;                            // 发生异常的文件名
    protected $line;                            // 发生异常的代码行号

    function __construct($message = null, $code = 0);

    final function getMessage();                // 返回异常信息
    final function getCode();                   // 返回异常代码
    final function getFile();                   // 返回发生异常的文件名
    final function getLine();                   // 返回发生异常的代码行号
    final function getTrace();                  // backtrace() 数组
    final function getTraceAsString();          // 已格成化成字符串的 getTrace() 信息

    /* 可重载的方法 */
    function __toString();                       // 可输出的字符串
}
?>

简单的使用如下:(通过异常,抛出错误信息)

 代码如下 复制代码

try {
    $error = 'my error!';
    throw new Exception($error)
} catch (Exception $e) {
    echo $e->getMessage();
}

我们可以扩展此类,方便我们的使用

 

 代码如下 复制代码

class MyException extends Exception
{
    // 重定义构造器使 message 变为必须被指定的属性
    public function __construct($message, $code = 0) {
        // 自定义的代码

        // 确保所有变量都被正确赋值
        parent::__construct($message, $code);
    }

    // 自定义字符串输出的样式
    public function __toString() {
        return __CLASS__ . ": [{$this->code}]: {$this->message}n";
    }

    public function customFunction() {
        echo "A Custom function for this type of exceptionn";
    }
}
  

异常处理的基本思想是代码在try代码被调用执行。如果try码块出现错误,我们可以执行一个抛出异常的处理。某些编程语言,如java,,在特定情况下将自动抛出异常。在php中,异常必须手动抛出。可以使用如下方式抛出一个异常:

 代码如下 复制代码

  Throw new Exception(‘message’,code);

  Throw 关键字将触发异常处理机制,它是一个语言结构,而不是一个函数,但是必须给它传递一个值。它要求一个接受对象。在最简单的情况下,可以实例化一个内置的Exception类。

  最后,在try代码之后,必须至少给出一个catch代码块。可以将多个catch代码块与一个try代码块进行关联。如果每个catch代码块可以捕获一个不同类型的异常,可以使用多个catch代码块是有意义的。例如,如果想捕获Exception类的异常,代码如下

 

 代码如下 复制代码

Catch(Exception $e)

{

   //handing exception

}

Catch代码捕获的对象就是导致异常并传递给throw语句的对象(被throw 语句抛出)。使用Exception 类的实例,是不错的选择。

Exception类提供了如下的内置方法:

  Getcode()      —返回传递给构造函数的代码。

  GetMessage()    —返回传递给构造函数的消息。

  getFile()     —返回产生异常代码的文件的路径

  getLine()    —返回产生异常的代码所在的行。
注意:

当捕获到一个异常后,try()块里面的后续代码将不会继续执行,而是会尝试查找匹配的“catch”代码块
 当抛出一个异常后,如果不进行catch处理,则会报“Uncaught exception 'Exception'”错误

 代码如下 复制代码
<?php
    function test($val){
        if ($val>100){
            throw new Exception("提示信息:您输入的值过大");
        }
    }
    test(111);
?>

  3.当一个异常抛出后,catch语句块可以进行处理也可以不处理

以下是我用户注册功能的部分代码

try{
     //check forms filled in
     if(!filled_out($_POST)){
         throw new Exception('你还没有填写表单,请回去填写');
     }
     //check email address not valid
     if(!check_email($email)){
        throw new Exception('邮件的格式不正确');
     }
     //检查密度的长度是否大于6
     if(strlen($passwd<6)){
         throw new Exception('密度的长度应该大于6');
     }
     //检查两次密码是否相等
     if($passwd!=$passwd1){
         throw new Exception('两次密码不一样,请重新输入');
     }
     //检查用户名的长度是否正确
     if(strlen($username)>16){
         throw new Exception('用户名的长度不符,请重新输入');
     }
  
 } catch(Exception $e){
     echo $e->getMessage(); //输出异常信息。
 }

 

php对异常的处理与java一样,用到的是try{}catch(){}

定义顶级异常处理器用到的函数是
set_exception_handler("My_exception");
这里的My_expection是开发者自定义的异常处理函数,既顶级异常处理器,只有当程序中没有函数来处理异常才有顶级异常处理器来处理异常,如果没有定义顶级异常处理器,则由系统默认的异常处理器来处理异常
举例说明:

 代码如下 复制代码
<meta http-equiv="content-type" content="text/html;charset=utf-8" /><?php
    set_exception_handler("My_expection");
    function My_expection(){
        echo "这里是顶级异常处理器";
    }
    try{
        nohello("hello");
    }catch(Exception $e){
        throw $e;
    }
  function nohello($nohello){
          if($nohello == "hello"){
              throw new Exception("不能输入hello");
          }else{
            echo "输入成功";
        }
    }
?>

 

本文章这里是一个己排序好的二维数据,我们要向数组中插入一个元素这个保存到数据中后还需要进行排序的哦。
 代码如下 复制代码

<?php
/**
* 逆序二维数组插入一元素
*
* @author WadeYu
* @date 2012-05-30
*/
$aSorted = array(
array(1, 100),
array(2, 90),
array(3, 80),
array(4, 70),
array(5, 60),
array(6, 50),
array(7, 40),
array(8, 40),
array(9, 40),
array(10, 20),
);
$aInsert = array(11, 40);
$maxCmpIdx = 0;
$cnt = 0;
$maxCnt = 10;
foreach ($aSorted as $idx => $arr){
if ($arr[0] == $aInsert[0]){
$maxCmpIdx = $idx;
}
$cnt++;
}
if ( !$maxCmpIdx){
$maxCmpIdx = $cnt++;
}
$aSorted[$maxCmpIdx] = $aInsert;
for ($i = $maxCmpIdx; $i > 0; $i--){
if ($aSorted[$i][1] > $aSorted[$i-1][1]){
$aTmp = $aSorted[$i-1];
$aSorted[$i-1] = $aSorted[$i];
$aSorted[$i] = $aTmp;
continue ;
}
break;
}
for ($i = $cnt; $i > $maxCnt; $i--){
unset($aSorted[$i-1]);
}
print_r($aSorted);

在数组中插入元素的方法有很多,这里只介绍了一种,有需要了解更多的朋友可到本站搜索。

我们这里讲述的防盗链代码只专注于php的解决方案,当然如果你有服务器管理权限或htaccess文件操作我建义不要用php防盗链哦。

先来看个最简单的
下面是php实现的代码, xxx.mp3就是你的音乐文件的实际地址, 对外传播的时候只传播php地址,mp3地址对外不公开

 代码如下 复制代码
<?php
 if(strpos($_SERVER['HTTP_REFERER'], 'qq.com') !== FALSE) {
  header('HTTP/1.1 404 Not Found');
  exit;
 }
 readfile('xxx.mp3');
?>

可以加入白名单的做法

 

 代码如下 复制代码
<?php
/**
* @author seraphim
* @copyright 2012
*/
$ADMIN = array(
'defaulturl'=> 'http://www.xx.com/images/banner-header.gif', //盗链返回的地址
'url_1' => 'http://www.xx.net/file',
'url_2' => 'http://www.xx.net/file1',
);
$okaysites = array(
'http://box.baidu.com',
'http://tieba.baidu.com/p/1493336008', //白名单
'http://www.xx.com/1.html',
);
$reffer = $_SERVER['HTTP_REFERER'];
if ($reffer) {
$yes = 0;
while (list($domain, $subarray) = each($okaysites)) {
if (ereg($subarray, "$reffer")) {
$yes = 1;
}
}
$theu = 'url_' . $_GET['site'];
$file = $_GET['file'];
if ($ADMIN[$theu] and $yes == 1) {
header("Location: $ADMIN[$theu]/$file");
} else {
header("Location: $ADMIN[defaulturl]");
}
} else {
header("Location: $ADMIN[defaulturl]");
}
print_r($_SERVER['HTTP_REFERER']);
?>

实例3 [支持白名单二]

 代码如下 复制代码

<?php

$ADMIN[defaulturl] = "http://www.111cn.net/404.htm";//盗链返回的地址
$okaysites = array("http://www.111cn.net/","http://111cn.net"); //白名单
$ADMIN[url_1] = "http://www.111cn.net/download/";//下载地点1
$ADMIN[url_2] = "";//下载地点2,以此类推

$reffer = $HTTP_REFERER;
if($reffer) {
$yes = 0;
while(list($domain, $subarray) = each($okaysites)) {
if (ereg($subarray,"$reffer")) {
$yes = 1;
}
}
$theu = "url"."_"."$site";
if ($ADMIN[$theu] AND $yes == 1) {
header("Location: $ADMIN[$theu]/$file");
} else {
header("Location: $ADMIN[defaulturl]");
}
} else {
header("Location: $ADMIN[defaulturl]");
}

?> 

还有很多的方法来实现防盗链本文章只讲到了利用php实现,像有些站生成了html这样做起来就不怎么方便了,我们可以在iis,apache,htaccess来操作。

[!--infotagslink--]

相关文章

  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25
  • C# 向二进制文件进行读写的操作方法

    该例子使用 BinaryStream 和 BinaryWriter 对二进制文件进行读写操作先上代码再根据我理解的所分享给各位朋友...2020-06-25
  • 微信小程序 网络请求(GET请求)详解

    这篇文章主要介绍了微信小程序 网络请求(GET请求)详解的相关资料,需要的朋友可以参考下...2016-11-22
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • 微信小程序自定义tabbar组件

    这篇文章主要为大家详细介绍了微信小程序自定义tabbar组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14
  • 微信小程序二维码生成工具 weapp-qrcode详解

    这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
  • Python爬取微信小程序通用方法代码实例详解

    这篇文章主要介绍了Python爬取微信小程序通用方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-29
  • 微信小程序(应用号)开发新闻客户端实例

    这篇文章主要介绍了微信小程序(应用号)开发新闻客户端实例的相关资料,需要的朋友可以参考下...2016-10-25
  • 微信小程序手势操作之单触摸点与多触摸点

    这篇文章主要介绍了微信小程序手势操作之单触摸点与多触摸点的相关资料,需要的朋友可以参考下...2017-03-13
  • 微信小程序 页面跳转传递值几种方法详解

    这篇文章主要介绍了微信小程序 页面跳转传递值几种方法详解的相关资料,需要的朋友可以参考下...2017-01-16
  • 手把手教你uniapp和小程序分包(图文)

    本文主要介绍了手把手教你uniapp和小程序分包,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-02
  • 微信小程序实现点击导航条切换页面

    这篇文章主要为大家详细介绍了微信小程序实现点击导航条切换页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-11-19
  • 微信小程序实现canvas分享朋友圈海报

    这篇文章主要为大家详细介绍了微信小程序实现canvas分享朋友圈海报,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-21