共计 1245 个字符,预计需要花费 4 分钟才能阅读完成。
我的项目:问卷
需要: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
后果:
正文完