• PHP 将access 导入 Excel


    最近看了excel 发现好多时候excel 这个表格处理软件,还是挺不错的!于是就想用php 来操作一下Excel! 说来也没什么的,就是借用了一个开源的phpexcel 的类!

    但是,也是经过本人测试,所以记录了下!

    首先是php 链接Access ,这个是比较简单的!

    <?php
    ini_set(max_execution_time,3000);
    ini_set(memory_limit,"1024M");


    function microtime_float()
    {
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
    }

    $start_time=microtime_float();
    error_reporting(E_ERROR);
    date_default_timezone_set(
    'Asia/Shanghai');

    /** PHP Excel* */
    require_once 'classes/PHPExcel.php';

    //Create new PHPExcel object
    $objexcel = new PHPExcel();

    //Set properties
    $objexcel->getProperties()->setCreator("Neve Zhang")->setCategory("Poem");

    //AddSome data
    $conn = @new com("ADODB.Connection") or die('ADO connnection failed');
    if (!$conn) {
    echo "<h5>链接失败</h5>";
    }
    define('filepath', dirname(__FILE__));
    define('DB_HOST', filepath . "/data/data.mdb");
    $connstr = "driver={microsoft access driver (*.mdb)}; dbq=" . str_replace("/", "\\", DB_HOST) . ";uid='';pwd='';";

    $conn->open($connstr);
    if ($conn->state == 0) {
    $conn->open($connstr);
    }
    $sql = "select top 1000 * from poem";
    $rs = @new com("adodb.recordset");
    $rs = $conn->execute($sql);
    $fld = array();
    $i = 0;
    $count = $rs->fields->count();

    while (!$rs->eof) {
    for ($j = 0; $j < $rs->fields->count(); $j++) {

    $fld[$i][$j] = $rs->fields[$j]->value;
    }



    $rs->Movenext();
    $i = $i + 1;
    }
    $e_col=2;

    $objexcel->setActiveSheetIndex(0)
    ->setCellValue("A1","序号")
    ->setCellValue("B1","标题")
    ->setCellValue("C1","n_id")
    ->setCellValue("D1","z_id")
    ->setCellValue("E1","内容")
    ->setCellValue("F1","注释")
    ->setCellValue("G1","upsize_ts");

    foreach ($fld as $rows) {

    // print_r($rows);
    $e_row='A';
    // $num=intval($e_col/500);
    foreach ($rows as $cloums) {

    // echo $e_row.$e_col."=".$cloums;


    $objexcel->setActiveSheetIndex(0)->setCellValue("$e_row"."$e_col",iconv('GBK','utf-8',$cloums));
    $e_row++;
    }
    $e_col++;
    }
    $objexcel->getActiveSheet()->setTitle('Poem Test');
    $objWriter=PHPExcel_IOFactory::createWriter($objexcel,'Excel2007');
    //$objWriter->save("5000poem.xlsx");

    //$objWriter_2=new PHPExcel_Writer_Excel2007($objWriter);

    /*
    *header("Content-Type:text/xml; charset=UTF-8");
    header("Progma:Public");
    header("Expires:0");
    header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
    header("Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    header("Content-Disposition:attachment;filename=resume.xlsx");
    header("Content-Transfer-Encoding:binary");
    * *
    */


    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="01simple.xlsx"');
    header('Cache-Control: max-age=0');
    $objWriter_2=
    $objWriter->save("php://output");

    /**
    $end_time=microtime_float();

    echo $start_time."<br />";
    echo $end_time;
    $time=$end_time-$start_time;
    echo "<br /><b>". sprintf( "%01.5f ", $time)."</b>";
    *
    */

    ?>

    其中一开始设置了php 的最大运行时间和最大运行内存,因为,是测试嘛!所以读了50000条的数据,内存一开始尽然512M 都显示耗尽!没办法,于是乎直接调整到1024M,这次是够了,最后统计了下时间, 发现竟然用了300多秒,差不多五分钟!

    还好数据库字段不错,还能勉强运算完毕! 还好,excel2007 据说可以支持1,000,000 行的数据,于是那肯定是问题了!

    对了,其实php 连接access 的步骤也是先建立一个connection,然后再创建一个记录集!然后,用movernext 来下移动指针,我也直接用了一个二维数组来转换recordset 记录集!可能有更好的办法!

    其中其中有一点,就是recordset 转换来的二维数组,用var_dump() 这个函数总是输不出结果来,最后只有用print_f() 来查看数据!

    上面的代码就是操作phpexcel 了,其中代码有点乱,许多都被我注释掉了!

    其中有几个乱码的问题,在其中也是需要注意的,还有就是输出到客户端,其中也有细节要注意下! 不然的话,也会报excel的错误! 首先是版本不好弄错了,然后就是输出到客户端浏览器的页面不要再有任何的输出了! 尤其是其中被我注释掉的地方!

    比如" echo" 之类!

  • 相关阅读:
    软件工程实验三 面向对象分析与设计
    软件工程实验二 结构化分析与设计
    软件工程实验一 软件开发文档与工具安装与使用
    ATM管理系统
    举例分析流程图与活动图的区别与联系
    自动生成四则运算
    Java入门基础知识点总结(详细篇)
    数据库树状结构数据查询
    java中Date日期类型的大小比较
    文件转byte[ ]
  • 原文地址:https://www.cnblogs.com/neve/p/1991129.html
Copyright © 2020-2023  润新知