用PHP換個思路讀取WORD內容

choubou發表於2021-09-11

用PHP換個思路讀取WORD內容

專案:問卷

需求:WORD 匯入問卷

背景:運營那裡有幾百個 WORD 格式問卷,如果去後臺手動錄入,無疑工作量很大,希望能直接匯入。

心情:接到需求之後五味雜陳,因為以前做過 excel 匯入,而且有現成的外掛,程式碼也是一搜尋一堆。

word 匯入無疑涉及到了知識盲點,但是需求就在那裡,又懟不過產品同學!只能硬著頭皮上了。

難點:word 不好讀取內容,內容讀出來不好結構化。

解決問題思路:

先讀取 WORD, 再說怎麼結構化。

讀取 WORD:

一開始想著用 PHPWORD, 畢竟 PHPOFFICE 這麼成熟的外掛應該可以直接讀取到 WORD 內容吧。

然而現實很骨感,找遍了文件並沒有找到直接讀取到 WORD 內容的方法。PHPWORD 只提供了把 WORD 轉換成 HTML,TDF 的方法。

轉換思路:

既然不能讀取 WORD, 那我可以讀取 HTML, 只需要把 WORD 轉換成 HTML 就可以了,然後讀取 HTML 內容就行。

程式碼:

<?php
namespace AppConsoleCommands;
use IlluminateConsoleCommand;
use PhpOfficePhpSpreadsheetReaderHtml;
use PhpOfficePhpWordReaderWord2007;
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 PhpOfficePhpWordWriterHTML($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

以上就是用PHP換個思路讀取WORD內容的詳細內容,更多請關注php中文網其它相關文章!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4548/viewspace-2827324/,如需轉載,請註明出處,否則將追究法律責任。

相關文章