質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

888閲覧

PHP Wordで、編集履歴を追加したい

nnahito

総合スコア2004

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/03/05 10:54

編集2018/03/06 02:47

やりたいこと

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)

↓ 抜粋

イメージ説明

しかし、setChangeInfosetTrackChangeも、サンプルがなく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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/05 11:22

編集履歴onのワードを開かないと効果がないのでは?
nnahito

2018/03/05 11:24

追記部分のコードを試しましたが、だめでした。
nnahito

2018/03/05 11:35

そちら、Getしかないので特に見てませんでしたが……こちらでできるのでしょうか?
退会済みユーザー

退会済みユーザー

2018/03/05 11:36

コンストラクタで全部設定するのかと
退会済みユーザー

退会済みユーザー

2018/03/05 11:37

一度設定したら書き換え厳禁な設定かな
nnahito

2018/03/06 02:19

ご返信ありがとうございます。あれからまた調べたのですが、有益な情報がなく止まってしまいました。。。
guest

回答1

0

ベストアンサー

https://github.com/PHPOffice/PHPWord/blob/develop/samples/Sample_39_TrackChanges.php

これですね。

composer require phpoffice/phpword:dev-develop composer update

で入ります。Sample見ながら使ってみたら一応機能しているみたいです。

投稿2018/03/06 04:38

nullbot

総合スコア910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nnahito

2018/03/06 05:08 編集

ありがとうございます!! サンプルの通り無事できました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問