2012-09-05 24 views

回答

2

如果你想使用PHP,最完整​​的解決方案是PHPDocX

您可以在教程中查看如何使用來自任何數據源(如MySQL DB)的數據替換佔位符變量。

特別的,你可以填充錶行的條目數量不確定的,你可能刪除取決於輸送到應用程序中的數據在Word文檔的整個塊或建立動態的Word圖表。

您可以檢查可用的演示,瞭解一個簡單但頗具說明性的示例(其內部工作原理在教程部分中進行了介紹)。

3

**披露:我帶領docx4j項目**

有可用的現有工具/庫堆!

是的,你可以做一個字符串替換,但這是一個脆弱的方法,因爲Word可能已經跨運行分割字符串。

您可以使用MERGEFIELD或內容控制數據綁定。

docx4j支持所有三種方法,但內容控制數據綁定是最強大的。

有一點要特別考慮的是「重複」。如果你想在Word中說一行表格,那麼你需要一種方法來實現這一點。

docx4j通過在表格行周圍的「重複」內容控件執行此操作;無論您選擇哪種解決方案,我都會確保它能夠處理重複。

+0

我使用docx4j解決方案,我可以證明它。由於提供了所有示例代碼,因此它非常快速並且非常易於實現。我已經發布了一個docx4j的示例實現,作爲一個名爲docx4j-ws的Web服務,以說明將它們的示例代碼作爲Web服務實現是多麼容易。完整的Web服務項目可以在這裏找到:https://github.com/sylnsr/docx4j-ws關於通過Web服務使用docx4j的好處是客戶端可以用您選擇的語言編寫。 –

3

信息披露:我爲Invantive工作。

使用Invantive Composition(http://www.invantive.com/products/invantive-composition),您可以用來自數據庫(IBM DB2,Oracle,MySQL,Teradata和SQL Server)的數據填充Word文檔(字母,法律訴狀,保險政策),然後隨意更改內容手動。它適用於通過中央Web服務訪問數據庫以及使用查詢模型的真正的Microsoft Word最終用戶(包括製作模板和使用它的人員)。 Invantive Composition允許嵌套重複的數據組和佈局。使用點擊一次將其集成到Microsoft Word中。

在過去,我個人也一直在使用JasperReports(http://community.jaspersoft.com/project/jasperreports-library)來使用JasperReports的RTF輸出目標生成字母。只要您不想編輯輸出超過幾個字,並且具有Java/SQL開發技能,它就是免費的並且工作正常。就像Invantive Composition一樣,它適用於大量不同的報告。

只要你可以完全控制環境,你也可以考慮使用RTF作爲中間語言(不適用於最終用戶,只適用於真正的開發者)。將文檔保存爲RTF,將需要替換的部分文本替換掉,編寫一個接受參數的web服務並將生成的RTF轉儲回去。需要一些時間來生成更復雜的表格(表格顯然是在編寫RTF規範後由人類發明的:-)這種方法只適用於數量非常有限的模板,並且當您有足夠的開發人員時間可以完成時,運行和穩定。作爲一個獨立的審稿人,我也看到了使用XML模板的情況,但結果並不如JasperReports。

0

你好,我讀過上述esp的評論和Ivantive看起來令人印象深刻 - 但我需要的解決方案更簡單。在Word中使用Selection.Range.InsertDatabase可從訪問數據庫或Excel電子表格或甚至另一個Word文檔中提取記錄。通過訪問解決方案,您可以選擇要提取的記錄佈局,並根據字段(例如ID)獲取特定記錄。谷歌上面的話,它會帶你到MS指導和一個示例VB腳本。只需幾分鐘即可完成工作。現在尋找VB腳本,詢問該人員他們想從dbase獲得什麼ID,我們就完成了。

0

它使用docx模板合併字段與java對象(對象具有從mysql或任何其他來源加載的信息)。 xdoc報告是一個java語言的項目,該項目的主頁是https://code.google.com/p/xdocreport/

0

*披露:我創建了templ4docx項目*

你好

您可以使用templ4docx Java庫,這是行家中央存儲庫,所以你可以把它添加到你的Maven的依賴關係:

<dependency> 
    <groupId>pl.jsolve</groupId> 
    <artifactId>templ4docx</artifactId> 
    <version>2.0.0</version> 
</dependency> 

實例:

Docx docx = new Docx("E:\\template.docx"); 
    Variables variables = new Variables(); 
    variables.addTextVariable(new TextVariable("${firstName}", "John")); 
    variables.addTextVariable(new TextVariable("${lastName}", "Sky")); 
    docx.fillTemplate(variables); 
    docx.save("E:\\filledTemplate.docx"); 

的更多細節你可以在這裏找到:http://jsolve.github.io/java/templ4docx/

相關問題