やりたいこと
PHP Wordで、校閲の「編集履歴の記録」情報を追加したい。
(1)PHP Wordでテキストを追加
(2)(1)で追加したテキストに編集履歴として「編集前」というテキストをもたせる
(3)Docxで吐き出し、Wordで開ける
やったこと
コードを調べながら書いています。
php
1<?php 2 3require_once 'vendor/autoload.php'; 4 5// PHP Wordのインスタンス化 6$phpword = new PhpOffice\PhpWord\PhpWord(); 7 8// 編集履歴系のクラスをインスタンス化 9$trackChangesView = new PhpOffice\PhpWord\ComplexType\TrackChangesView(); 10 11// 新規セクション(docxにデータを書き出す場所の定義) 12$section = $phpword->addSection(); 13 14// セクションにテキストを書き込む 15$section->addText('ボクはノーマルなテキスト'); 16 17// コメント書き込みを行うインスタンス生成 18$comment = new PhpOffice\PhpWord\Element\Comment('Nな人', new DateTime(), 'nnahito'); 19 20// コメント内容 21$comment->addText('ボクはコメント', array('bold' => true)); 22 23// コメント追記 24$phpword->addComment($comment); 25 26// 様々な書体を設定できる、テキストエリア 27$textrun = $section->addTextRun(); 28 29// テキストを追加 30$text = $textrun->addText('ボクはコメントを持っている'); 31 32// テキストに対し、コメントを付与する 33$text->setCommentRangeStart($comment); 34 35// テキストの追加 36$section->addText('ボクは普通のテキスト'); 37 38// 編集履歴記録開始 39 $phpword->getSettings()->setTrackRevisions(true); 40 $phpword->getSettings()->setDoNotTrackMoves(true); 41 $phpword->getSettings()->setDoNotTrackFormatting(true); 42 43// テキストの追加 44$section->addText('ボクは追加のテキスト'); 45 46 47 48// DOCXファイルに書き出し 49$objWriter = PhpOffice\PhpWord\IOFactory::createWriter($phpword, 'Word2007'); 50$objWriter->save('helloWorld.docx');
とまでは書きましたが、たしかに吐き出されたファイルをWordで開くと編集履歴はONになっております。
しかし、編集履歴が追加されておりません。(コメントは追加されております。)
編集履歴を追加する方法はあるのでしょうか?
ご存じの方がいらっしゃいましたら、ご教示いただけますと幸いです。
よろしくお願いいたします。
追記
php
1<?php 2 3require_once 'vendor/autoload.php'; 4 5// PHP Wordのインスタンス化 6$phpword = new PhpOffice\PhpWord\PhpWord(); 7 8// 編集履歴記録開始 9$phpword->getSettings()->setTrackRevisions(true); 10// $phpword->getSettings()->setDoNotTrackMoves(true); 11// $phpword->getSettings()->setDoNotTrackFormatting(true); 12 13// 新規セクション(docxにデータを書き出す場所の定義) 14$section = $phpword->addSection(); 15 16// セクションにテキストを書き込む 17$section->addText('ボクはテキスト'); 18 19// コメント書き込みを行うインスタンス生成 20$comment = new PhpOffice\PhpWord\Element\Comment('Nな人', new DateTime(), 'nnahito'); 21 22// コメント内容 23$comment->addText('ボクはコメント', array('bold' => true)); 24 25// コメント追記 26$phpword->addComment($comment); 27 28// 様々な書体を設定できる、テキストエリア 29$textrun = $section->addTextRun(); 30 31// テキストを追加 32$text = $textrun->addText('ボクはコメントを持っている'); 33 34// テキストに対し、コメントを付与する 35$text->setCommentRangeStart($comment); 36 37// テキストの追加 38$section->addText('ボクはテキスト'); 39 40 41// DOCXファイルに書き出し 42$objWriter = PhpOffice\PhpWord\IOFactory::createWriter($phpword, 'Word2007'); 43$objWriter->save('helloWorld.docx'); 44 45 46// =========================================== 47 48// DOCXを読み込み 49$reader = PhpOffice\PhpWord\IOFactory::load("helloWorld.docx", 'Word2007'); 50 51// 編集履歴系のクラスをインスタンス化 52$trackChangesView = new PhpOffice\PhpWord\ComplexType\TrackChangesView(); 53 54// 新規セクション(docxにデータを書き出す場所の定義) 55$section2 = $reader->addSection(); 56 57// セクションにテキストを書き込む 58$trackChangesView->setComments('編集履歴?'); 59 60$sugoiyatsu = $section2->addTextRun(); 61$sugoiyatsu->addText('うぇい'); 62 63$writer = PhpOffice\PhpWord\IOFactory::createWriter($reader, 'Word2007'); 64$writer->save("sample.docx");
↑ちなみにこれを実行すると、コメントが消えます。。。
追記2(2018/03/06)
マニュアルにそれっぽい項目を発見しました。
→PHP Wordマニュアルの5.15(P.28)
↓ 抜粋
しかし、setChangeInfo
もsetTrackChange
も、サンプルがなくIDEの方でもそれらしきメソッドは発見できませんでした。。。
また、P.21にもそれらしきものがありました。
↓ 抜粋
しかし、\PhpOffice\PhpWord\Element\ChangedElement
はなく、IDEでもsetChanged
メソッドは見当たりませんでした。
↓
setChanged
メソッドは現在deploy
ブランチにいるようで、
master
ブランチにはいませんでした。
それで使えないのですね。。。
現在、composerでPHPWordを入れているのですが、
Deployブランチをcomposerで入れることは可能なのでしょうか?
ひとまず公式GitHubに書いてある以下のことは試しましたが落ちてきませんでした。
composer require phpoffice/phpword composer install または composer require phpoffice/phpword:dev-master composer install
回答1件
あなたの回答
tips
プレビュー