DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录.
  • DmozDir.org
DMOZ目录快速登录入口-免费收录各类优秀网站的中文网站目录.由人工编辑,并提供网站分类目录检索及地区分类目录检索,是站长免费推广网站的有力平台!

使用phpword获取doc中的表格数据

  • 使用phpword获取doc中的表格数据

  • 已被浏览: 38 次2020年10月13日    来源:  https://www.cnblogs.com/haizizhu/p/13808155.html
  • 1. 首先确定使用phpword是可以读取word文档中表格里面的数据, 使用的phpword版本0.17.02.理解word文档内容的存储逻辑规则(这里只做简单概述)一般做博文喜欢直接贴代码,直接用。可这个不太行,因为输入不统一,wor

    1. 首先确定使用phpword是可以读取word文档中表格里面的数据, 使用的phpword版本0.17.0

    2.理解word文档内容的存储逻辑规则(这里只做简单概述)

    一般做博文喜欢直接贴代码,直接用。可这个不太行,因为输入不统一,word格式样式太多,输出也不统一,有的要输出数据,有的要输出word或者html,所以这里就追一下原理

     

    关键词

    section(部分) : phpword中将word文档分为若干个section(部分)

    element(元素) : 每个section包含若干个element(元素),元素分为文本元素、表格元素、文本、图片、其他(未涉及不做讨论)

    textRun(文本元素) : 每个文本集合包含多个文本

    text(文本) : 为字符或者图片

    table(表格元素) : 每个表格元素包含多个行 row

    row(行) : 每个行包含多个列 cell

    cell(列) : 每个列包含多个textRun(文本元素) 这里没错,就是包含多个文本元素(表格元素也可以但是没人在word表格的某一个格里再来一个表格吧)

     

     

     

     

     

     

     

    3.代码实现

     

    <?php
    /**
     * Created by PhpStorm.
     * User: parker
     * Date: 2020/10/18
     * Time: 16:09
     */
    
    namespace common\services;
    
    
    class WordService extends BaseService
    {
    
        public static function importWord($info)
        {
            $word  = self::getWord($info["path"]);
            dd($word);
        }
    
        /**
         * 获取word文档内容
         * @param string $path
         * @return array
         */
        public static function getWord($path = "")
        {
            //加载word文档,使用phpword处理
            $phpWord = \PhpOffice\PhpWord\IOFactory::load($path);
            return self::getNodeContent($phpWord);
        }
    
        /**
         * 根据word主节点获取分节点内容
         * @param $word
         * @return array
         */
        public static function getNodeContent($word)
        {
            $return = [];
            //分解部分
            foreach ($word->getSections() as $section)
            {
                if ($section instanceof \PhpOffice\PhpWord\Element\Section) {
                    //分解元素
                    foreach ($section->getElements() as $element)
                    {
                        //文本元素
                        if ($element instanceof \PhpOffice\PhpWord\Element\TextRun) {
                            $text = "";
                            foreach ($element->getElements() as $ele) {
                                $text .= self::getTextNode($ele);
                            }
                            $return[] = $text;
                        }
                        //表格元素
                        else if ($element instanceof \PhpOffice\PhpWord\Element\Table) {
                            foreach ($element->getRows() as $ele)
                            {
                                $return[] = self::getTableNode($ele);
                            }
                        }
                    }
                }
            }
            return $return;
        }
    
        /**
         * 获取文档节点内容
         * @param $node
         * @return string
         */
        public static function getTextNode($node)
        {
            $return = "";
            //处理文本
            if ($node instanceof \PhpOffice\PhpWord\Element\Text)
            {
                $return .= $node->getText();
            }
            //处理图片
            else if ($node instanceof \PhpOffice\PhpWord\Element\Image)
            {
                $return .= self::pic2text($node);
            }
            //处理文本元素
            else if ($node instanceof \PhpOffice\PhpWord\Element\TextRun) {
                foreach ($node->getElements() as $ele) {
                    $return .= self::getTextNode($ele);
                }
            }
            return $return;
        }
    
        /**
         * 获取表格节点内容
         * @param $node
         * @return string
         */
        public static function getTableNode($node)
        {
            $return = "";
            //处理行
            if ($node instanceof \PhpOffice\PhpWord\Element\Row) {
                foreach ($node->getCells() as $ele)
                {
                    $return .= self::getTableNode($ele);
                }
            }
            //处理列
            else if ($node instanceof \PhpOffice\PhpWord\Element\Cell) {
                foreach ($node->getElements() as $ele)
                {
                    $return .= self::getTextNode($ele);
                }
            }
            return $return;
        }
    
        /**
         * 处理word文档中base64格式图片
         * @param $node
         * @return string
         */
        public static function pic2text($node)
        {
            //获取图片编码
            $imageData = $node->getImageStringData(true);
            //添加图片html显示标头
            $imageData = "data:" . $node->getImageType() . ";base64," . $imageData;
            $return = "<img src="".$imageData."">";
            return $return;
        }
        /**
         * 处理word文档中base64格式图片
         * @param $node
         * @return string
         */
        public static function pic2file($node)
        {
            //图片地址(一般为word文档地址+在word中的锚点位置)
            $imageSrc  = "images/" . md5($node->getSource()) . "." . $node->getImageExtension();
            $imageData = $node->getImageStringData(true);
            //将图片保存在本地
            file_put_contents($imageSrc, base64_decode($imageData));
            return $imageSrc;
        }
    
        /**
         * 将word转化为html(转换存储html文件后展示)
         * @param $path
         * @throws \PhpOffice\PhpWord\Exception\Exception
         */
        public static function word2html($path)
        {
            $phpWord = FileImportService::getOne($path);
            //转为html处理
            $xmlWriter  = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, "HTML");
            $path = pathinfo($path);
            $fileName = $path["dirname"] . "/" . $path["filename"] . ".html";
            $xmlWriter->save($fileName);
            $html = file_get_contents($fileName);
            echo $html;
            die;
    
        }
    
    
    }

     

      


    以上信息来源于网络,如有侵权,请联系站长删除。

    TAG:表格 数据 phpword doc

  • 上一篇:LR之Oracle 2tier协议录制Oracle脚本
  • 与“使用phpword获取doc中的表格数据”相关的资讯
  • 浅谈 Checkbox Group 的双向数据绑定
  • jquery表格插件Datatables使用、快速上手
  • WebApi 中请求的 JSON 数据字段作为 POST 参数传入
  • 伦敦呼唤:Doc Martens在伦敦证券交易所上的IPO计划
  • 大数据实战-电信客服-重点记录