2011-08-05 50 views
0

我有一個word文檔模板,我需要執行查找和替換。 例如,我需要用1 Test Street替換<address 1>如何使用命令行(CLI)在word文檔上執行字符串替換

我試過這樣做,使用一個宏,我可以從命令行運行,但你似乎無法傳遞參數,因此無法編輯您正在搜索的模式或替換它的東西。

我最終需要使用PHP,所以一直在尋找一些我可以用exec調用的東西,我找到了一個名爲PHPWord的庫,看起來非常有用,但它的工作方式是將.doc文件解析爲XML文件,這是不正常工作,導致單詞分成一半,因此沒有一個str_replace好。

最後我看着使用VBScript,我沒有這方面的經驗,並沒有得到它的工作。

回答

0

爲什麼不要使用Interop來訪問Word文檔。 您將不得不爲此使用.NET,並且您可以創建控制檯應用程序。

看一看Interop Class Namespacethis for an example

+0

非常感謝,我現在唯一遇到的麻煩是調用我從PHP頁面創建的C#程序,我認爲這是某種權限問題,但無法解決問題。 – Matt

+0

不會工作:http://us.php.net/manual/en/function.shell-exec.php – waqasahmed

0

我不是那麼熟悉PHP或VBScript

的任務是很容易在Python ::

#!/usr/bin/python 
import sys 
if __name__ == '__main__': 
    filename = sys.argv[1] 
    f = open(filename,'r') 
    output = f.read().replace('<Address 1>','1 Test Street') 
    f.close() 
    f = open('filename','w') 
    f.write(output) 
    f.close() 

運行在命令行中的文件$蟒蛇thisfile.py名

+0

謝謝你的反應,我試了一下,首先我得到了一個不可用的文件,然後我嘗試從底部的第三行引用'文件名',並獲得了權限被拒絕的錯誤 – Matt

+0

我剛剛意識到將.docx擴展名放在底部的第三行讀取'filename.docx',但這隻會創建一個損壞的文件。 – Matt

+0

我不使用窗戶這麼多。嘗試運行diff以查看我做錯了什麼。第8行還有一個錯誤:: open(filename,'w') –

1

要通過一個又一個用PHP代替Word文檔中的文本的現有字符串,perserving所有Word風格,現在很簡單,如果你使用PHPDocX:Replacing text in a Word document with PHP

這個程序是實現相當困難它可能看起來是因爲Word(OOXML標準)將段落內容分解爲不同文本運行的方式。例如,如果Word文檔的原始編輯器引入了一些更正,或者即使(他)已經擊中了後退鍵,單個單詞也可能被分成不同的文本運行,並帶有自己的標記。

PHPDocX的searchAndReplace方法查找特定的文本字符串,提取它的Word樣式,並用保留所有原始樣式的替換文本重建相應的paragrah。

可以選擇搜索並替換整個文檔,包括頁眉,頁腳,腳註,註釋等,或者如果性能很重要,可以選擇指定一個零件。儘管如此,該方法相當快速,並且在一百頁的Word文檔中替換一串文本可能需要幾百分之一秒。

相關問題