PHP 读取 WORD 内容

项目:问卷
需求: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内容:
执行脚本:

php artisan word

结果:

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12

大佬辛苦了,先做个记号,备用!~ :+1:

4年前 评论

既然是导入问卷,问卷就会设计到问卷选项、问卷的题干。难点是如何处理内容的格式,你这个处理成HTML,能够正确处理这个问题吗?

4年前 评论
LXK (楼主) 4年前
奕鹏 (作者) 4年前
ross 4年前

@奕鹏 其实能够读出来word,需求就已经解决大半了,剩下的就是你和产品制定导入规则,然后你根据规则转换成你想要的数据结构。

4年前 评论

请问可以获取图片和表格吗

4年前 评论

请问这个phpword支持doc格式吗 我试了下报错 Uninitialized string offset docx没问题

3年前 评论
LXK (楼主) 3年前
Zain (作者) 3年前
Zain (作者) 3年前