Nな人のWebしるべ
arrow_backBACK

PHPWordで、Docxファイルに編集履歴をつける

php
phpword

PHP Wordという、PHPでMS Wordが編集できる物があります。

それを使って、docxファイルに編集履歴を付けてみましょう。

composer install

composerでPHP Wordをインストールするのですが、

2018/03/06現在、肝心の編集履歴機能「track changed」の機能はmasterブランチにマージされていません。;

なので、以下のコマンドで無理くり取ってきます。

composer require phpoffice/phpword:dev-develop
composer update

PHP Wordで編集履歴をつける

<?php

require_once 'vendor/autoload.php';

use PhpOffice\PhpWord\Element\TrackChange;      // 編集履歴系のクラス

// PHP Wordのインスタンス化
$phpword = new PhpOffice\PhpWord\PhpWord();

// 編集履歴記録開始
$phpword->getSettings()->setTrackRevisions(true);

// 新規セクション(docxにデータを書き出す場所の定義)
$section = $phpword->addSection();

// セクションにテキストを書き込む
$section->addText('ボクはテキスト');

// コメント書き込みを行うインスタンス生成
$comment = new PhpOffice\PhpWord\Element\Comment('Nな人', new DateTime(), 'nnahito');

// コメント内容
$comment->addText('ボクはコメント', array('bold' => true));

// コメント追記
$phpword->addComment($comment);

// 様々な書体を設定できる、テキストエリア
$textrun = $section->addTextRun();

// テキストを追加
$text = $textrun->addText('ボクはコメントを持っている');

// テキストに対し、コメントを付与する
$text->setCommentRangeStart($comment);

// テキストの追加
$section->addText('ボクはテキスト');


// 編集履歴をつけてみる
$textRun2 = $section->addTextRun();
$text = $textRun2->addText('ボクはNな人によって追加されたテキストだよ。');
$text->setChangeInfo(TrackChange::INSERTED, 'Nな人', time() - 1800);

// 通常のテキストもできる
$text = $section->addText('ボクはnnahitoによって追加されたテキストだよ。');
$text->setTrackChange(new TrackChange(TrackChange::INSERTED, 'nnahito'));

// 消した履歴
$text = $section->addText('消された(´;ω;`)');
$text->setChangeInfo(TrackChange::DELETED, 'Nな人', new \DateTime('@' . (time() - 3600)));


// DOCXファイルに書き出し
$objWriter = PhpOffice\PhpWord\IOFactory::createWriter($phpword, 'Word2007');
$objWriter->save('helloWorld.docx');

こんな感じのコードになります。

関連リンク

https://www.bricoleur.co.jp/blog/archives/3643

POSTED AT 2018-10-28 07:55:18
 
名前:Nな人
職種:多分エンジニア
好きなもの:P言語(perl, python, php)


Web系のエンジニアをやっているNな人という人物。
業務ではPHPをメインで扱っており、Silex、CakePHP3を主に利用しています。
あとは趣味でLaravelを触っていたり、インフラをオンプレでちょこちょこやってたりするおっさんです。