4

現在、 PHPWordライブラリとそのテンプレート システムを使用して docx ファイルを操作しようとしています。テーブルを操作できるこのライブラリへのパスを誰かが見つけて更新しました(名前は覚えていませんが、重要ではありません)(行を複製し、各行でPHPWordの標準setValue()を使用します)。

独自のドキュメントを作成すると、xml 内のデータは通常の構造になっているため、置き換えられる変数 ${variable} は次のように独自のタグ内にあります。

<w:tbl>
    <w:tr>
        ...
         ${variable}
    </w:tr>
</w:tbl>

コードを簡略化しました。実際のコードには、サイズ、スタイルなどを表す他のタグが多数あります。

私の問題は、大きな変更を行うことが禁止されている他の人からのドキュメントを処理する必要があることです。ある時点で、それらが 1 つの空白行を持つテーブルであるドキュメントを取得します。${variable} 変数を追加し、PHPWord で実行します。問題は、それが失敗することです。いくつかの調査を行った後、ソース XML が次のようになっていることがわかりました。

    ....
        ...
         ${va

        ...
         riab

        ...
         le}
    ....

(ここでも大幅に簡略化されていますが、全体像がわかります)

行を複製する関数は strpos() 、 substr() 、および正規表現を使用して機能し、この構造では機能しないため、この構造は私にとって問題です (そうするエレガントな方法は想像できません)。

問題は、docx がこれを行う理由と、それを防ぐ方法を知っている人はいますか? PHPではなく単語による解決策を探しています(あまり編集せずに機能するには、現在の関数が必要です)

4

2 に答える 2

5

私はこの問題に多く取り組んできました:

Wordでは、ドキュメントはこのように保存できます

  <w:t>{</w:t>...
  <w:t>variable</w:t>
  <w:t>}</w:t>

したがって、変数名が分割されていても機能する JS ライブラリを作成しました: Docxtemplater (works server side too) 。開発中にわかったのは、次の場合、変数名が分割されないことです。

  • 検索するテキストは、a-zA-Z 文字のみで構成されています ({、$、または } は含まれません)。
  • テキストが一筆で書かれていない場合、テキストが分割される可能性があります。たとえば、スペルミスをして ${varuable} と記述し、編集 -> ${variable} を行うと、xml 内のテキストは次のようになります。割れる可能性が高いです。変数名は基本的に一筆書きで、編集したい場合は変数名を丸ごと書き直します。

Word で 1 つのコマンドで docx 文書を修正する方法はないと思いますが、変数を書き直して 1 つのストロークでそれらを書き込む方法は機能するはずです。

于 2013-07-18T11:16:48.383 に答える