2013-07-17 51 views
3

我目前正在嘗試使用PHPWord庫及其模板系統與docx文件一起工作。我發現並更新了某些可以與表處理的庫(不記得名稱,但不重要)路徑(複製其行,然後在每行上使用PHPWord中的標準setValue())。爲什麼Office OpenXML在標籤之間分割文本以及如何防止它?

如果我創建自己的文件,XML中的數據是正常的結構,所以要被替換的變量$ {變量}是在自己的標籤是這樣的:

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

我簡化了代碼,在實際的代碼有其他標籤descibing大小,樣式等數量

我的問題是我必須從其他人的過程中,一張空白行的表格。我添加$ {variable}變量並通過PHPWord運行它。問題是,它失敗了。之後做一些研究,我發現,源XML看起來是這樣的:

.... 
     ... 
     ${va 

     ... 
     riab 

     ... 
     le} 
    .... 

(再次大量簡化,但你得到的圖片)

這種結構對我來說是一個問題,因爲功能克隆行使用strpos(),substr()和正則表達式來工作,並不適用於這種結構(我無法想象如此優雅的方式)。

所以問題是 - 有人知道爲什麼docx做到這一點,以及如何防止他?我在尋找通過單詞的解決方案,而不是PHP(我需要電流功能沒有太多的編輯工作)

回答

3

我有這個問題做了很多:

在Word中,文檔可以保存這樣

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

因此,我創建了一個JS庫,即使變量名被拆分也能工作:DocXgenjs(工作服務器端)。什麼樣的發展過程中,我發現了是變量名,如果不分裂:

  • 找到的文本只由一個-ZA-Z字符(無{,$或})
  • 文本例如,如果你犯了一個拼寫錯誤,並且編寫$ {varuable},然後進行編輯 - > $ {variable},那麼xml中的文本很有可能是非常可能的將被分裂。基本上你必須一次性寫出你的變量名,如果你想編輯它,完全重寫變量名。

我不認爲有一種方法可以在Word中使用一個命令修復docx文檔,但是重寫變量以將它們寫入到一個Stroke應該可行。

+0

偉大的,它的工作原理。它完全像你說的。我首先寫了$ {tab1_var#1},然後將其重寫爲$ {tab1_var1}。我永遠不會認爲那會是問題。非常感謝你,你救了我很多麻煩。 (我會定義檢查你的圖書館) – j0hny

相關問題