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

PHP
PHP Word
docx
word

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 PhpOfficePhpWordElementTrackChange;      // 編集履歴系のクラス

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

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

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

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

// コメント書き込みを行うインスタンス生成
$comment = new PhpOfficePhpWordElementComment('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 = PhpOfficePhpWordIOFactory::createWriter($phpword, 'Word2007');
$objWriter->save('helloWorld.docx');

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

関連リンク

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