phpexcel读取模版并写入导出

作者:超级管理员 更新时间:2017-10-31 17:58:54 来源:未知 点击:15642
如图,6~16行,22行,不固定行数,没有上限。读取,导出都没问题。如果6~16行的数据有80行,那么如何将17~21行的内容向下移动??-------------------------------

如图,
6~16行,22行,不固定行数,没有上限。
读取,导出都没问题。
如果6~16行的数据有80行,那么如何将17~21行的内容向下移动??
-------------------------------
读取数据分段处理然后整合到一起不行吗
-------------------------------
17~21不要写在模版里面了   直接在写入excel时候最后写入·················  要开发没时间的话 我就这么干··········
-------------------------------
worksheet类里有插入行方法
PHPExcel_Worksheet->insertNewRowBefore()

/**
     * Insert a new row, updating all possible related data
     *
     * @param int $pBefore    Insert before this one
     * @param int $pNumRows    Number of rows to insert
     * @throws    PHPExcel_Exception
     * @return PHPExcel_Worksheet
     */
    public function insertNewRowBefore($pBefore = 1, $pNumRows = 1) {
        if ($pBefore >= 1) {
            $objReferenceHelper = PHPExcel_ReferenceHelper::getInstance();
            $objReferenceHelper->insertNewBefore('A' . $pBefore, 0, $pNumRows, $this);
        } else {
            throw new PHPExcel_Exception("Rows can only be inserted before at least row 1.");
        }
        return $this;
    }
-------------------------------
引用 1 楼 eclothy 的回复:
读取数据分段处理然后整合到一起不行吗


才疏学浅,我只会写入A3  B4这样的信息,  怎样进行分段处理??
-------------------------------
引用 2 楼 u013558809 的回复:
17~21不要写在模版里面了   直接在写入excel时候最后写入·················  要开发没时间的话 我就这么干··········


可以理解成另外读取一个文档,最后拼接上.    怎样进行拼接呢?
-------------------------------
如果是依据模版导出数据的话,肯定是不能直接在模板中写的,否则就破坏了模版。
难道会每次都用新模板?那要模版有什么意义?

实际是:
从模板按行读取单元格
把读到的单元格写到新文档中
如果需要充填数据,则读取数据填进去
如此反复,直到结束

你的模版中没有指示哪个单元格填什么数据,这给编程带来很多困难
我一般这么做,供你参考
include 'Plugin/PHPExcel/Classes/PHPExcel/IOFactory.php';
//print_r(get_class_methods('PHPExcel_IOFactory'));

class fill_template {
  var $startrow = 0;
  function __construct($fn) {
    $this->tpl = PHPExcel_IOFactory::load($fn);
    $this->target = clone $this->tpl;
  }
  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');
$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汉字'));
$p->add_data(array(1,2,3,4,5,6,7,8,9));
$p->output('xxx.xls');
-------------------------------
上面都说的不错,不错,学习一下

推荐阅读

热门内容

curl无法获取数据,浏览器正常

curl 无法获取数据 ,报错:Empt...

phpexcel读取模版并写入导出

如图,6~16行,22行,不固定行数,没...

微信公众号网页的服务器端php代码不能正

微信公众号网页的服务器端php代码不能正...

PHP好讨厌的弱类型:在为空(null,

本帖最后由szuzsq于2017-08-...

请输入正确的email,表达式是否有错?

这个是mvmmall\templates...

在 Laravel 中 “规范” 的开发

Laravel简介Laravel是一套简...

phpStudy配置多站点多域名方法及遇

此文不太适合一点不懂多站点多域名的。适合...

phpstudy的php版本自由修改的方

网上有着许多的网站集成搭建软件,比较出名...

PHP 对redis订阅的问题

有这么一个需求,客户下单,下单后把订单发...

我这里有三个分类,每个分类上面有相对应的

我这里有三个分类,每个分类上面有相对应的...

最新内容

swing 判断单选框问题

    鼓动鼓动 swing  用的 windowbuilder 来进行设计的,...

关于java客户端与mqtt服务器用证书连接的问题

在网上找了很多例子,也实现了用java客户端通过证书连接mqtt服务器,但是有疑...

想了好久,还是不知道在哪出问题了,驱动包也重新下载了好几次,用户密码没问题

前台错误:type Exception reportmessage An exc...

GlassFish5部署应用报错,求大神教育

GlassFish5部署应用报错:Error occurred during d...

关于java多线程的一个问题

做一个多线程的题目实现*g*g*g*g*g*g.......实现其实不难,不过中...

萌新小白学习遇到问题,求各位大佬帮忙看一下哪里出错了?

这个是题目package edu.exam;import java.util.S...

最近学习spring aop 遇到的小白问题,求解答!!

package com.dao;import org.springframewo...

Java代码生成的随机数如果数据库的主键不能对应

建了一张表,查询到了所有题目的数量,然后根据题数随机生成你输入的几个随机数:(i...

web项目在MyEclipse部署正常,打成War包部署到外部Tomcat报空指针

如题,新人小白一个,新网大家帮帮忙用myeclipse启用外部Tomcat调试也...

IDEA里无法创建命名为build的目录?

IDEA里,无法创建命名为build的目录。提示为ignored name,无法...

魅红女性手机微博上线 魅蓝有女朋友了?

    中关村在线消息:今天上午,一个名为“魅红女性手机”的微博账号悄然上线,从...

使用spring+spring MVC + hibernate 实现不同数据库类型(sql server & orcale)切换获取数据

最近按照公司要求  搭个SSH框架   要动态切换获取数据库  网上百度了很多教...

求1到N的和

// 递归function Add($num){    switch ($num...

魅蓝打脸!未发售Note6绿色版高价转卖

    中关村在线消息:日前,有贴吧有网友晒出了他购买的海贼王典藏版的魅蓝Not...

过滤器里面可以拿到session,但是从session里面取出的值为空

本帖最后由zhouhai6833于2017-10-2710:54:55编辑用的s...

Maven的no such method错误

 这个方法在spring jar包里找到了,那么是不是有冲突了?还有我的IDEA...

curl无法获取数据,浏览器正常

curl 无法获取数据 ,报错:Empty reply from serverc...

诺基亚东家HMD新人事任命 临时CEO转正

    中关村在线消息:今天,诺基亚的东家HMD宣布了新的人事任命:临时CEO弗...

升级使用tomcat8.5,jdk8以后出现的报错

信息: Error parsing HTTP request header No...

curl 无法获取数据 Empty reply from server

curlDataTest("http://zhannei.baidu.com/a...