按月预交明细


房产: #房产编号
业户姓名: #占用者名称 制表日期: #制表日期

项目 说明 充值时间 开始时间 预交金额
管理费 #管理费费用说明 #管理费充值时间 #管理费开始时间 #管理费
租金 #租金费用说明 #租金费充值时间 #租金费开始时间 #租金
电梯分摊 #电梯分摊费用说明 #电梯分摊费充值时间 #电梯分摊费开始时间 #电梯分摊费
推广费 #推广费费用说明 #推广费充值时间 #推广费开始时间 #推广费

预交费用合计: #费用合计因为不能发送EXCEL格式的文件,只好COPY里面的内容了,上面的内容是用户上传的EXCEL文件,我要将里面#开头的字段替换成数据库里面的数据,如果用户有3条数据,就变成下面的EXCEL文件。          按月预交明细


房产: #房产编号
业户姓名: #占用者名称 制表日期: #制表日期

项目 说明 充值时间 开始时间 预交金额
管理费 #管理费费用说明 #管理费充值时间 #管理费开始时间 #管理费
租金 #租金费用说明 #租金费充值时间 #租金费开始时间 #租金
电梯分摊 #电梯分摊费用说明 #电梯分摊费充值时间 #电梯分摊费开始时间 #电梯分摊费
推广费 #推广费费用说明 #推广费充值时间 #推广费开始时间 #推广费

预交费用合计: #费用合计         按月预交明细


房产: #房产编号
业户姓名: #占用者名称 制表日期: #制表日期

项目 说明 充值时间 开始时间 预交金额
管理费 #管理费费用说明 #管理费充值时间 #管理费开始时间 #管理费
租金 #租金费用说明 #租金费充值时间 #租金费开始时间 #租金
电梯分摊 #电梯分摊费用说明 #电梯分摊费充值时间 #电梯分摊费开始时间 #电梯分摊费
推广费 #推广费费用说明 #推广费充值时间 #推广费开始时间 #推广费

预交费用合计: #费用合计         按月预交明细


房产: #房产编号
业户姓名: #占用者名称 制表日期: #制表日期

项目 说明 充值时间 开始时间 预交金额
管理费 #管理费费用说明 #管理费充值时间 #管理费开始时间 #管理费
租金 #租金费用说明 #租金费充值时间 #租金费开始时间 #租金
电梯分摊 #电梯分摊费用说明 #电梯分摊费充值时间 #电梯分摊费开始时间 #电梯分摊费
推广费 #推广费费用说明 #推广费充值时间 #推广费开始时间 #推广费

预交费用合计: #费用合计有#号的会替换,这样的效果如何实现,要将原来EXCEL的样式获得,不是只有数据.



解决方案 »

  1.   

    EXCEL文档处理?
    PHP有开源的EXCEL文档读写类。
      

  2.   

    我对PHPEXCEL了解不是很多,而且只有第一份会有样式,后面的就没有了。不知道怎么处理了?
      

  3.   

    终于写好了,先贴一个类include 'PHPExcel/Classes/PHPExcel/IOFactory.php';class fill_template {
      var $startrow = 0;
      function __construct($fn) {
        $this->tpl = PHPExcel_IOFactory::load($fn);
      }
      function add_data($ar) {
        $ar = array_values($ar);
        if(!isset($this->target)) $this->target = clone $this->tpl;
        $sheet = $this->tpl->getActiveSheet();
        $i = 0;
        foreach($sheet->getRowDimensions() as $y=>$row) {
          foreach($sheet->getColumnDimensions($row) as $x=>$col) {
            $txt = trim($sheet->getCell($x.$y)->getValue());
            if($txt && $txt{0} == '#') $txt = isset($ar[$i]) ? $ar[$i++] : '';
            $h = $y + $this->startrow;
            $this->target->getActiveSheet()->getCell("$x$h")->setValue($txt);
            $this->target->getActiveSheet()->duplicateStyle($sheet->getStyle("$x$y"), "$x$h");
          }
        }
        //如果模板中有合并的单元格,就做合并单元格操作
        foreach($sheet->getMergeCells() as $merge) {
          $merge = preg_replace('/\d+/e',"$0+$this->startrow", $merge);
          $this->target->getActiveSheet()->mergeCells($merge);
        }
        $this->startrow += $sheet->getHighestRow() + 3;//多加3行便于裁剪
      }
      function output($fn) {
        $t = PHPExcel_IOFactory::createWriter($this->target, 'Excel5');
        $t->save($fn);
      }
    }
    用法$p = new fill_template('tpl.xls');//实例化并加载模板xls
    $p->add_data(array(1,2,3,4,5,6,7,8,9));//数据要按模板中“#”出现的次序排列
    $p->add_data(array(1,2,3,4,5,6,7,8,9, 'a汉字'));//汉字要用utf-8的
    $p->add_data(array(1,2,3,4,5,6,7,8,9));
    $p->output('xxx.xls');//输出到文件
      

  4.   

    看看這個可用嗎?
    <?php
    $dbHost = "localhost";
    $dbUsername = "root";
    $dbPassword = "";
    $dbDbName = "rybweb";
    $dbTablename = "rybuser";
    header("Content-type:charset=gb2312");   
    header("Cache-Control: no-cache, must-revalidate"); 
    header("Pragma: no-cache"); 
    header('Content-type: application/x-msexcel'); 
    header("Content-Disposition: attachment; filename=$dbTablename.xls" ); 
    header("Content-Description: PHP/INTERBASE Generated Data" ); 
    //输出内容如下:
     
     // connect database$Connect = @mysql_connect($dbHost, $dbUsername, $dbPassword) or die("Couldn't connect.");
    $Db = @mysql_select_db($dbDbName, $Connect) or die("Couldn't select database.");
    $sql = 'select * from '.$dbTablename.';';
    $ALT_Db = @mysql_select_db($dbDbName, $Connect) or die("Couldn't select database");
    $result = @mysql_query($sql,$Connect) or die(mysql_error());date_default_timezone_set('Asia/Shanghai');
    $now_date = date('Y-m-d H:i:s');
    $title = "数据库名:$dbDbName, 数据表:$dbTablename, 备份日期:$now_date";
    echo("$title\n");
    $sql = 'set names gbk;';
    @mysql_query($sql,$Connect);
    $sql = 'select * from '.$dbTablename.';';
    $ALT_Db = @mysql_select_db($dbDbName, $Connect) or die("Couldn't select database");
    $result = @mysql_query($sql,$Connect) or die(mysql_error());$sep = "\t";
    for ($i = 0; $i < mysql_num_fields($result); $i++) {
        echo mysql_field_name($result,$i) . "\t";
    }
    print("\n");
    $i = 0;
    while($row = mysql_fetch_row($result)) {
        $schema_insert = "";
        for($j=0; $j<mysql_num_fields($result);$j++) {
            if(!isset($row[$j]))
                $schema_insert .= "NULL".$sep;
            elseif ($row[$j] != "")
                $schema_insert .= "$row[$j]".$sep;
            else
                $schema_insert .= "".$sep;
        }
        $schema_insert = str_replace($sep."$", "", $schema_insert);
        $schema_insert .= "\t";
        print(trim($schema_insert));
        print "\n";
        $i++;
    }
    return (true);
     ?>還有這一個:
    <?php
    function xlsBOF() {
        echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
        return;
    }function xlsEOF() {
        echo pack("ss", 0x0A, 0x00);
        return;
    }function xlsWriteNumber($Row, $Col, $Value) {
        echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
        echo pack("d", $Value);
        return;
    }function xlsWriteLabel($Row, $Col, $Value ) {
        $L = strlen($Value);
        echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
        echo $Value;
    return;
    }// 文件头
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");;
    header("Content-Disposition: attachment;filename=test.xls ");
    header("Content-Transfer-Encoding: binary ");//模拟一个数据出来
    $array_info = array(1=>array(10,11,12,12,13,13,13,13,12,9,12),2=>array(9,11,12,12,13,13,8,13,9,12,12),3=>array(5,11,12,12,13,5,5,13,12,12,12),);
        // 向表中添加数据
            xlsBOF();
            xlsWriteLabel(0,5,"XX年XX月报表"); //表头在第一行 下面通过纵坐标的值另起一行
            xlsWriteLabel(1,2,"派车号");
            xlsWriteLabel(1,3,"派车日期");
            xlsWriteLabel(1,4,"运单号");
            xlsWriteLabel(1,5,"箱号");
            xlsWriteLabel(1,6,"车牌号");
            xlsWriteLabel(1,7,"客户海运费");
            xlsWriteLabel(1,8,"客户拖车费");
            xlsWriteLabel(1,9,"中海拖车费");
            xlsWriteLabel(1,10,"应收款");
            xlsWriteLabel(1,11,"应付款");
            xlsWriteLabel(1,12,"是否结算");        $xlsRow = 2;
            if(is_array($array_info)&&count($array_info))
            {
                foreach($array_info as $key=>$val)
                {                xlsWriteNumber($xlsRow,2,$val[0]);
                    xlsWriteNumber($xlsRow,3,$val[1]);
                    xlsWriteNumber($xlsRow,4,$val[2]);
                    xlsWriteNumber($xlsRow,5,$val[3]);
                    xlsWriteNumber($xlsRow,6,$val[4]);
                    xlsWriteNumber($xlsRow,7,$val[5]);
                    xlsWriteNumber($xlsRow,8,$val[6]);
                    xlsWriteNumber($xlsRow,9,$val[7]);
                    xlsWriteNumber($xlsRow,10,$val[8]);
                    xlsWriteNumber($xlsRow,11,$val[9]);
                    xlsWriteNumber($xlsRow,12,$val[10]);
                    $xlsRow++;
                }        }        xlsEOF();
            exit();
    ?>都是从硬盘上刚翻出来的,忘记能否用了.