phpexcel读取模版并写入导出

li0401 2016-04-13 07:59:25

如图,
6~16行,22行,不固定行数,没有上限。
读取,导出都没问题。
如果6~16行的数据有80行,那么如何将17~21行的内容向下移动??
...全文
1232 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
avi9111 2017-10-31
  • 打赏
  • 举报
回复
上面都说的不错,不错,学习一下
xuzuning 2016-04-28
  • 打赏
  • 举报
回复
如果是依据模版导出数据的话,肯定是不能直接在模板中写的,否则就破坏了模版。 难道会每次都用新模板?那要模版有什么意义? 实际是: 从模板按行读取单元格 把读到的单元格写到新文档中 如果需要充填数据,则读取数据填进去 如此反复,直到结束 你的模版中没有指示哪个单元格填什么数据,这给编程带来很多困难 我一般这么做,供你参考
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');
li0401 2016-04-28
  • 打赏
  • 举报
回复
引用 2 楼 u013558809 的回复:
17~21不要写在模版里面了 直接在写入excel时候最后写入················· 要开发没时间的话 我就这么干··········
可以理解成另外读取一个文档,最后拼接上. 怎样进行拼接呢?
li0401 2016-04-28
  • 打赏
  • 举报
回复
引用 1 楼 eclothy 的回复:
读取数据分段处理然后整合到一起不行吗
才疏学浅,我只会写入A3 B4这样的信息, 怎样进行分段处理??
蜘蛛上网 2016-04-19
  • 打赏
  • 举报
回复
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;
    }
阿不阿 2016-04-14
  • 打赏
  • 举报
回复
读取数据分段处理然后整合到一起不行吗
夜雨Z1 2016-04-14
  • 打赏
  • 举报
回复
17~21不要写在模版里面了 直接在写入excel时候最后写入················· 要开发没时间的话 我就这么干··········

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧