当前位置 博文首页 > 文章内容

    用PHP换个思路读取WORD内容

    作者:shunshunshun18 栏目:未分类 时间:2021-08-28 10:42:31

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    项目:问卷

    需求:WORD 导入问卷

    背景:运营那里有几百个 WORD 格式问卷,如果去后台手动录入,无疑工作量很大,希望能直接导入。

    心情:接到需求之后五味杂陈,因为以前做过 excel 导入,而且有现成的插件,代码也是一搜索一堆。

    word 导入无疑涉及到了知识盲点,但是需求就在那里,又怼不过产品同学!只能硬着头皮上了。

    难点:word 不好读取内容,内容读出来不好结构化。

    解决问题思路:

    先读取 WORD, 再说怎么结构化。

    读取 WORD:

    一开始想着用 PHPWORD, 毕竟 PHPOFFICE 这么成熟的插件应该可以直接读取到 WORD 内容吧。

    然而现实很骨感,找遍了文档并没有找到直接读取到 WORD 内容的方法。PHPWORD 只提供了把 WORD 转换成 HTML,TDF 的方法。

    转换思路:

    既然不能读取 WORD, 那我可以读取 HTML, 只需要把 WORD 转换成 HTML 就可以了,然后读取 HTML 内容就行。

    代码:

    <?php
    namespace App\Console\Commands;
    use Illuminate\Console\Command;
    use PhpOffice\PhpSpreadsheet\Reader\Html;
    use PhpOffice\PhpWord\Reader\Word2007;
    class Test extends Command {
        /**
         * The name and signature of the console command.
         *
         * @var string
         */
        protected $signature = 'word';
        /**
         * The console command description.
         *
         * @var string
         */
        protected $description = 'word';
        /**
         * Create a new command instance.
         *
         * @return void
         */
        public function __construct() {
            parent::__construct();
        }
        /**
         * Execute the console command.
         *
         * @return int
         */
        public function handle(Word2007 $word) {
            //WORD转换HTML
            $result=$word->load(storage_path('测试.docx'));
            $write=new \PhpOffice\PhpWord\Writer\HTML($result);
            $write->save(storage_path().'/测试.html');
            //读取HTML内容
            $document=new \DOMDocument();
            $document->loadHTML(file_get_contents(storage_path('测试.html')));
            $html=simplexml_import_dom($document);
            dd((array)$html->body);
        }
    }

    开始测试:新建 测试.docx

    测试.docx 内容:

    f777ab8394a4c064fd71e3e5e44bce0.png

    执行脚本:

    php artisan word

    结果:

    0a6f8646774a9ceb6098cb18e351dcc.png